ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAxNjA0Mzc2Li5hODk2ZTI1IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDE3ICsyLDM3MyBAQAogQ2hhbmdlcyBzaW5jZSBVLUJvb3QgMS4xLjQ6CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKyogRGlzYWJsZSBhdXRvYm9vdCBhYm9ydCBmb3IgRk8zMDAgd2hlbiBzaWxlbnQgbW9kZSBpcyBlbmFibGVkCisgIChhY2NvcmRpbmcgdG8gUzEgc3dpdGNoIHNldHRpbmcpLgorCisqIENsZWFudXAgZXhhbXBsZXMgYmluYXJpZXMKKworKiBBZGQgTkFORCBlbnZpcm9ubWVudCBzdXBwb3J0IGZvciBQUEM0NDBFUHggU2VxdW9pYSBOQU5EIGJvb3QgY29uZmlnCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgU2VwIDIwMDYKKworKiBVcGRhdGUgTkFORCBib290IGRvY3VtZW50YXRpb24KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwNgorCisqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiAibXRkcGFydHMiIGNvbW1hbmQKKworKiBBZGQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbGF0ZXN0IGJ1aWxkIGVudmlyb25tZW50IGV4dGVuc2lvbnMgdG8KKyAgdGhlIFJFQURNRSBmaWxlLgorCisqIFJlbW92ZSBkZWFkIGNvZGUgKGkybyBhbmQgZG1hKSBmcm9tIGNwdS9tcGM4MjR4L2RyaXZlcnMvIGRpcmVjdG9yeS4KKworKiBGaXggTE9HX0RJUiBkaXJlY3RvcnkgY3JlYXRpb24gZXJyb3IuCisgIEFkZCBzdXBwb3J0IGZvciBhdXRvbWF0aWMgY3JlYXRpb24gb2YgQlVJTERfRElSIGRpcmVjdG9yeS4KKworKiBGaXggYnVpbGQgcHJvYmxlbSBjcHUvcHBjNHh4L25kZmMuYworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CisKKyogRml4IGJ1aWxkIHByb2JsZW0gd2l0aCBDUENJNDQwCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgU2VwIDIwMDYKKworKiBDaGFuZ2UgWWVsbG93c3RvbmUgdG8gdXNlIENGSSB3cml0ZSBidWZmZXIKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBTZXAgMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBBTUNDIFNlcXVvaWEgUFBDNDQwRVB4IGV2YWwgYm9hcmQKKyAgLSBBZGQgc3VwcG9ydCBmb3IgUFBDNDQwRVB4ICYgUFBDNDQwR1J4CisgIC0gQWRkIHN1cHBvcnQgZm9yIFBQQzQ0MEVQKHgpL0dSKHgpIE5BTkQgY29udHJvbGxlcgorICAgIGluIGNwdS9wcGM0eHggZGlyZWN0b3J5CisgIC0gQWRkIE5BTkQgYm9vdCBmdW5jdGlvbmFsaXR5IGZvciBTZXF1b2lhIGJvYXJkLAorICAgIHBsZWFzZSBzZWUgZG9jL1JFQURNRS5uYW5kLWJvb3QtcHBjNDQwIGZvciBkZXRhaWxzCisgIC0gVGhpcyBTZXF1b2lhIE5BTkQgaW1hZ2UgZG9lc24ndCBzdXBwb3J0IGVudmlyb25tZW50CisgICAgaW4gTkFORCBmb3Igbm93LiBUaGlzIHdpbGwgYmUgYWRkZWQgaW4gYSBzaG9ydCB3aGlsZS4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBTZXAgMjAwNgorCisqIEZpeCBta2ltYWdlIC1sIGJ1ZyB3aXRoIG11bHRpZmlsZSBpbWFnZXMgb24gNjRiaXQgcGxhdGZvcm1zCisgIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMDYgU2VwIDIwMDYKKworKiBGaXggYnVpbGQgcHJvYmxlbXMgb24gc29yY2VyeSBib2FyZC4KKworKiBGaXggY29sZGZpcmUgYnVpbGQgcHJvYmxlbXMuCisgIFBhdGNoIGJ5IE1hcmlhbiBCYWxha293aWN6LCAwMSBTZXAgMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBhIHNhdmluZyBidWlsZCBvYmplY3RzIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LgorICBNb2RpZmljYXRpb25zIGFyZSBiYXNlZCBvbiB0aGUgTGludXgga2VybmVsIGFwcHJvYWNoIGFuZCBzdXBwb3J0CisgIHR3byB1c2UgY2FzZXM6CisgIDEpIEFkZCBPPSB0byB0aGUgbWFrZSBjb21tYW5kIGxpbmUgJ21ha2UgTz0vdG1wL2J1aWxkIGFsbCcKKyAgMikgU2V0IGVudmlyb25lbWVudCB2YXJpYWJsZSBCVUlMRF9ESVIgdG8gcG9pbnQgdG8gdGhlIGRlc2lyZWQgbG9jYXRpb24KKwknZXhwb3J0IEJVSUxEX0RJUj0vdG1wL2J1aWxkJworCSdtYWtlJworICBUaGUgc2Vjb25kIGFwcHJvYWNoIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBhIE1BS0VBTEwgc2NyaXB0CisJJ2V4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZCcKKwknLi9NQUtFQUxMJworICBDb21tYW5kIGxpbmUgJ089JyBzZXR0aW5nIG92ZXJyaWRlcyB0aGUgQlVJTERfRElSIGVudmlyb25lbnQgdmFyaWFibGUuCisgIFdoZW4gbm9uZSBvZiB0aGUgYWJvdmUgbWV0aG9kcyBpcyB1c2VkIHRoZSBsb2NhbCBidWlsZCBpcyBwZXJmb3JtZWQKKyAgYW5kIHRoZSBvYmplY3QgZmlsZXMgYXJlIHBsYWNlZCBpbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KKworKiBSZW1vdmUgdGhlIGJvYXJkL25ldHN0YXIvY3JjaXQgYmluYXJ5IGZyb20gZ2l0IHJlcG9zaXRvcnkuCisKKyogRml4IHRvb2xzL3VwZGF0ZXIgYnVpbGQgZXJyb3IuCisKKyogRml4IHRvb2xzL2Vhc3lsb2dvIGJ1aWxkIGVycm9yLgorCisqIEZpeGVkIHByb2JsZW1zIG9uIFBSUzIwMCBib2FyZCBjYXVzZWQgYnkgYWRkaW5nIHNwbGFzaCBzY3JlZW4gb24gTUNDMjAwCisKKyogRXh0ZW5kZWQgUkVBRE1FIGVudHJ5IG9uIGNvZGluZyBzdHlsZQorCisqIEFkZGVkIGFub3RoZXIgZXhhbXBsZSBzaG93aW5nIHNpbXBsZSBpbnRlcnJ1cHQgaW50ZXJjZXB0aW9uLgorCisqIEFkZGVkIHNpbXBsZV9zdHJ0b3VsKCksIGdldGVudigpIGFuZCBzZXRlbnYoKSB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgorICBBbHNvIGJ1bXBlZCB1cCBBQkkgdmVyc2lvbiB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgorCisqIEFkZGVkIGludGVycnVwdCBoYW5kbGluZyBjYXBhYmlsaXRpZXMgZm9yIG1wYzV4eHggcHJvY2Vzc29ycy4KKyAgQWxzbyBhZGRlZCBMaW51eCBsaWtlIEJVRygpIG1hY3Jvcy4KKworKiBDb2RpbmcgU3R5bGUgY2xlYW51cC4KKyAgUGF0Y2ggYnkgU3RlZmFubyBCYWJpYywgMzEgQXVnIDIwMDYKKworKiBBZGQgc3BsYXNoc2NyZWVuIHN1cHBvcnQgZm9yIE1DQzIwMCBib2FyZC4KKworKiBNYWtlIHRoZSBzZXJpYWwgZHJpdmVyIGZyYW1ld29yayB3b3JrIHdpdGggQ09ORklHX1NFUklBTF9NVUxUSQorICBlbmFibGVkCisKKyogUENJZSBlbmRwb2ludCBzdXBwb3J0IGZvciBBTUNDIFl1Y2NhIDQ0MFNQZSBib2FyZAorICBQYXRjaCBieSBUaXJ1bWFsYSBSIE1hcnJpLCAyNiBBdWcgMjAwNgorCisqIEltcHJvdmUgRElNTSBkZXRlY3Rpb24gZm9yIEFNQ0MgWXVjY2EgNDQwU1BlIGJvYXJkCisgIEltcHJvdmVkIHRoZSBtZW1vcnkgRElNTSBkZXRlY3Rpb24gZm9yIHRoZSBZdWNjYSA0NDBTUGUgYm9hcmQgZm9yCisgIHRoZSBjYXNlIHdoZXJlIGEgbWVtb3J5IERJTU0gaXMgZmFsc2VseSBkZXRlY3RlZCBhcyBwcmVzZW50LgorICBUaGlzIGlzc3VlIGlzIHNlZW4gb24gc29tZSBBTUNDIFl1Y2NhIDQ0MFNQZSB2YWxpZGF0aW9uIGJvYXJkcyBpZgorICBvbmx5IG9uZSA1MTJNQiBtZW1vcnkgRElNTSBpcyBpbnN0YWxsZWQsIGkuZS4gRElNTSBzbG90IDAgaXMKKyAgcG9wdWxhdGVkIGFuZCBESU1NIHNsb3QgMSBpcyBlbXB0eS4gIEluIHRoaXMgY2FzZSwgVS1Cb290IGRvZXMKKyAgbm90IGNvcnJlY3RseSBkZXRlY3QgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBESU1NIG1lbW9yeSBtb2R1bGUKKyAgaW5zdGFsbGVkIGFuZCB3aWxsIGZhbHNlbHkgZGV0ZWN0IHR3byBESU1NIG1lbW9yeSBtb2R1bGVzIGFyZQorICBwcmVzZW50IGFuZCB0aGVyZWZvcmUgVS1Cb290IHdpbGwgbm90IGNhbGN1bGF0ZSB0aGUgY29ycmVjdCBhbW91bnQKKyAgb2YgdG90YWwgbWVtb3J5IGFuZCB1LWJvb3Qgd2lsbCBub3QgYm9vdGluZyB1cC4KKyAgUGF0Y2ggYnkgQWRhbSBHcmFoYW0sIDI0IEF1ZyAyMDA2CisKKyogRml4IHR5cG8uCisKKyogQ29kZSBjbGVhbnVwCisKKyogVXBkYXRlIGZvciBNQ0MyMDAgLyBQUlMyMDAgYm9hcmRzOgorICAtIGF1dG8tYWRqdXN0IGNvbnNvbGUgZGV2aWNlIGZvciBMaW51eC4KKyAgLSBmaXggdHlwb3MuCisKKyogQWRkIGEgZml4IGZvciBhIGJ1Z2d5IFVTQiBkZXZpY2Ugb24gdGhlIEZPMzAwIGJvYXJkLgorCisqIFVwZGF0ZXMgZm9yIE1DQzIwMCAvIFBSUzIwMCBib2FyZHM6CisgIC0gc3VwcG9ydCBmb3IgY29uZmlndXJhdGlvbnMgd2l0aCBTRFJBTSBvciBERFIgbWVtb3J5LAorICAtIHN1cHBvcnQgZm9yIGhpZ2hib290IGFuZCBsb3dib290CisgIC0gYWRqdXN0aW5nIGVudmlyb25tZW50IGRlZmluaXRpb25zCisKKyogQWRkIHN1cHBvcnQgZm9yIFdUSyBGTzMwMCBib2FyZCAoVFFNNTIwMCBiYXNlZCkuCisKKyogRml4IFRRTTgzNHggaGFuZy4KKworKiBVcGRhdGUgZm9yIFNDNTIwIGJvYXJkLgorICBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDAyIERlYyAyMDA1CisKKyogRml4ZWQgY29tbW9uLmggc3BlbGxpbmcgZXJyb3IuCisgIFBhdGNoIGJ5IENvcnkgVHVzYXIsIDMwIE5vdiAyMDA1CisKKyogRml4IHR5cG8uCisgIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDI4IE5vdiAyMDA1CisKKyogRml4IGZhdGxvYWQgY29tbWFuZCBvbiBGQVQzMiBmb3JtYXR0ZWQgcGFydGl0aW9ucy4KKyAgUGF0Y2ggYnkgSm9hY2hpbSBKYWVnZXIsIDE4IE5vdiAyMDA1CisKKyogRml4IGRyaXZlcnMvZG05MDAwLmMgd2hlbiBjb25maWd1cmVkIGluIDMyIGJpdCBtb2RlLgorICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMTcgTm92IDIwMDUKKworKiBDbGVhbnVwIGRlYnVnIGNvZGUgZm9yIHl1Y2NhIGJvYXJkLgorCisqIE1DQzIwMDogcmVzdHJpY3QgYWRkcmVzc2FibGUgZmxhc2ggc3BhY2UgdG8gMzIgTUIKKworKiBBZGQgZGVidWcgY29uc29sZSBvbiBDT00xMiBmb3IgTUNDMjAwIGJvYXJkCisKKyogRml4IGNvbnRyb2wtYyBoYW5kaW5nIGluIENPTkZJR19DTURMSU5FX0VESVRJTkcKKyAgUHJvcGVybHkgcGFzcyBicmVhayBjb2RlIGJhY2sgZnJvbSByZWFkbGluZS4KKyAgUGF0Y2ggYnkgUm9nZXIgQmxvZmVsZCwgMzEgSnVsIDIwMDYKKworKiBBZGQgY29tbWFuZGxpbmUgaGlzdG9yeSBzdXBwb3J0IHRvIGFsbCBBTUNDIGV2YWwgYm9hcmRzCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgQXVnIDIwMDYKKworKiBBZGQgTWFjcm9uaXggTVhMVjMyMFQgZmxhc2ggc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgorCisqIENoYW5nZSAibWlpIGluZm8iIHRvIG5vdCBwcmludCBhbiBlcnJvciB1cG9uIG1pc3NpbmcgUEhZIGF0IGFkZHJlc3MKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgorCisqIEZpeCBQQ0ktRXhwcmVzcyBvbiBQUEM0NDBTUGUgcmV2LiBBLgorCisqIEZpeCBwcmVib290IG1lc3NhZ2Ugb24gVFFNODV4eCBhZnRlciBzd2l0Y2hpbmcgdG8gaHVzaCBwYXJzZXIuCisKKyogQWRhcHQgVFFNODV4eCByYW1kaXNrIGFkZHJlc3MgdG8gTGludXgga2VybmVsIG1lbW9yeSBtYXAKKworKiBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBQQ0ktRXhwcmVzcyBvbiBQUEM0NDBTUGUgKFl1Y2NhIGJvYXJkKS4KKworKiBGaXggY29tcGlsZXIgd2FybmluZyBmb3IgVFJBQiBib2FyZC4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgQXVnIDIwMDYKKworKiBQcmV2ZW50IFVTQiBjb21tYW5kcyBmcm9tIHdvcmtpbmcgd2hlbiBVU0IgaXMgc3RvcHBlZC4KKworKiBBZGQgcnVkaW1lbnRhcnkgaGFuZGxpbmcgb2YgYWx0ZXJuYXRlIHNldHRpbmdzIG9mIFVTQiBpbnRlcmZhY2VzLgorICBUaGlzIGlzIGluIG9yZGVyIHRvIGZpeCBpc3N1ZXMgd2l0aCBzb21lIFVTQiBzdGlja3MgdGltaW5nIG91dAorICBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFNvbWUgY29kZSByZWFkYWJpbGl0eSBpbXByb3ZlbWVudHMuCisKKyogUFBDNDQwIEREUiBzZXR1cDogU2V0IFNEUkFNMF9DRkcwW1BNVV09MCBmb3IgYmVzdCBwZXJmb3JtYW5jZQorICBBTUNDIHN1Z2dlc3RlZCB0byBzZXQgdGhlIFBNVSBiaXQgdG8gMCBmb3IgYmVzdCBwZXJmb3JtYWNlIG9uCisgIHRoZSBQUEM0NDAgRERSIGNvbnRyb2xsZXIuCisgIFBsZWFzZSBzZWUgZG9jL1JFQURNRS40NDAtRERSLXBlcmZvcm1hbmNlIGZvciBkZXRhaWxzLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEp1bCAyMDA2CisKKyogQU1DQyBiYW1ib28gKDQ0MEVQKSBVLUJvb3QgaW1hZ2UgcmVkdWNlZCB0byAzODRrYnl0ZQorICBQbGVhc2Ugc2VlIGRvYy9SRUFETUUuYmFtYm9vIGZvciBkZXRhaWxzLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IEp1bCAyMDA2CisKKyogRml4IENPTkZJR19DTURMSU5FX0VESVRJTkcgaW1wbGVtZW50YXRpb24KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBKdWwgMjAwNgorCisqIEZpeCBwcmVib290IG1lc3NhZ2Ugb24gVFFNNTIwMCBhZnRlciBzd2l0Y2hpbmcgdG8gaHVzaCBwYXJzZXIuCisKKyogTUNDMjAwOiBzZXQgZGVmYXVsdCBjb25maWd1cmF0aW9uIHRvIGxvd19ib290IEREUiwKKyAgYW5kIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGhpZ2hfYm9vdCBhbmQvb3IgU0RSQU0uCisKKyogQWRkIHN1cHBvcnQgZm9yIDI1NiBNQiBTRFJBTSBvbiBDUFU4NworICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDI1IE5vdiAyMDA1CisKKyogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIGNhbTUyMDAgYm9hcmQgKGJhc2VkIG9uIFRRTTUyMDBTKS4KKworKiBNb3JlIGNvZGUgY2xlYW51cAorCisqIERpc2FibGVkIGt2bWUwODAgYm9hcmQgaW4gTUFLRUFMTCBiZWNhdXNlIG9mIGJ1aWxkIHByb2JsZW1zLgorCisqIENvZGUgY2xlYW51cAorCisqIFVwZGF0ZSBOZXRTdGFyIGJvYXJkCisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwMyBOb3YgMjAwNQorCisqIE1ha2UgY29kZSBiZXR0ZXIgcmVhZGFibGUuCisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNCBTZXAgMjAwNQorCisqIEVuYWJsZSBpbml0cmQgQVRBRyBmb3IgeG0yNTAgYm9hcmQuCisgIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDUgU2VwIDIwMDUKKworKiBBZGQgcmVhZGxpbmUgY21kbGluZS1lZGl0aW5nIGV4dGVuc2lvbgorICBQYXRjaCBieSBKaW5IdWEgTHVvLCAwMSBTZXAgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBmcmllbmRseS1hcm0gU0JDLTI0MTBYIGJvYXJkCisgIFBhdGNoIGJ5IEppbkh1YSBMdW8sIDAxIFNlcCAyMDA1CisKKyogRml4IG11bHRpLXBhcnQgaW1hZ2Ugc3VwcG9ydCBvbiBpMzg2IHBsYXRmb3JtLgorICBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDE5IEF1ZyAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIEtWTUUwODAgYm9hcmQKKyAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOCBBdWcgMjAwNQorCisqIEZpeCBNSVBTIExFIGJ1aWxkIHByb2JsZW0KKyAgUGF0Y2ggYnkgTWF0ZWogS3VwbGplbiwgMTAgQXVnIDIwMDUKKworKiBDaGVjayBhcmd1bWVudCBjb3VudCBpbiAibWlpIiBjb21tYW5kLgorICBQcm9ibGVtIHBvaW50ZWQgb3V0IGJ5IEFuZHJldyBEeWVyLCAxMyBKdW4gMjAwNQorCisqIENsZWFudXAgVFFNNTIwMCBib2FyZCBjb25maWd1cmF0aW9uczoKKyAgLSBtYWtlIGhpZ2hib290IGNvbmZpZ3VyYXRpb25zIHVzZSBlbnZpcm9ubWVudCBhdCBoaWdoIGVuZCwgdG9vLAorICAgIHRvIGF2b2lkIGZsYXNoIGZyYWdtZW50YXRpb24KKyAgLSBhbHdheXMgdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudAorICAtIGRvbid0IGVuYWJsZSB2aWRlbyBjb2RlIGZvciBtb2R1bGVzIHdpdGhvdXQgZ3JhcGhpY3MgY29udHJvbGxlcgorICAtIHByb3ZpZGUgdXNlZnVsICh0aG91Z2ggZGlmZmVyZW50KSBtdGRwYXJ0cyBzZXR0aW5ncworICAtIGdldCByaWQgb2YgQ09ORklHX0NTX0FVVE9DT05GIHdoaWNoIHdhcyBhbHdheXMgc2V0IGFueXdheQorCisqIEV4dGVuZCBta2NvbmZpZyB0b29sIHRvIHByaW50IG1vcmUgdXNlZnVsIHRhcmdldCBuYW1lCisKKyogQWRkIHN1cHBvcnQgZm9yIGhpZ2gtYm9vdCBvbiBUUU01MjAwIGFuZCBUUU01MjAwUyBib2FyZHMuCisgIEhpbnQ6IHRoZSBDUExEIG9uIHRoZSBUUU01MjAwIG11c3QgYmUgcHJvZ3JhbW1lZCB3aXRoIGEgc29mdHdhcmUKKyAgdmVyc2lvbiBzdXBwb3J0aW5nIHRoZSBoaWdoIGJvb3Qgb3B0aW9uISBUaGUgbmV3IFRRTTUyMDBTIGlzCisgIGFscmVhZHkgc3VwcG9ydGluZyB0aGlzIG9wdGlvbi4gT24gdGhlIFRRTTUyMDAgdGhpcyBvcHRpb24gd2lsbCBiZQorICBzdXBwb3J0ZWQgaW4gY29uZmlndXJhdGlvbnMgd2l0aCBNUEM1MjAwIHJldiBCIHByb2Nlc3NvcnMuCisgIFRvIGFjdHVhbGx5ICJoaWdoIGJvb3QiLCBzZXQganVtcGVyIFgzMCBvbiB0aGUgU1RLNTJ4eC4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTIgSnVsIDIwMDYKKworKiBBZGQgc3VwcG9ydCBmb3IgbmV3IFRRTTUyMDAgcmV2aXNpb25zCisgIC0gU3VwcG9ydCBmb3IgVFFNNTIwMFMgKHNob3J0IHZlcnNpb24gd2l0aG91dCBncmFwaGljIGNvbnRyb2xsZXIpCisgIC0gU3VwcG9ydCBmb3IgbW9kdWxlcyB3aXRoICdOJyB0eXBlIFMyOUdMMTI4TiBTcGFuc2lvbiBmbGFzaGVzCisgICAgKHJlcXVpcmVzIGNoYW5nZXMgdG8gZmxhc2ggbGF5b3V0KQorICAtIFN1cHBvcnQgZm9yIE1QQzUyMDBCIGNwdSAobW9zdGx5IHN1cHBvcnQgZm9yIHNlY29uZCBTRFJBTSBiYW5rKQorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBKdWwgMjAwNgorCisqIEZpeCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkIG9uIFRRTTg1eHggYm9hcmRzCisgIFRoZSBQUy8yIGtleW9iYXJkIGRyaXZlciBmb3IgdGhlIFRRTTg1eHggbW9kdWxlcyBvbmx5IHN1cHBvcnRzIHRoZQorICBpbnRlcm5hbCBEVUFSVCBvZiB0aGUgTVBDODV4eCBDUFUuIFNpbmNlIHRoZSBNUEM4NTYwIGRvZXNuJ3QKKyAgaW5jbHVkZSBhIERVQVJULCB0aGUgVFFNODU2MCBtb2R1bGVzIGNhbid0IGJlIHVzZWQgd2l0aCB0aGUgUFMvMgorICBrZXlib2FyZCBjb250cm9sbGVyIG9uIHRoZSBTVEs4NXh4IGJvYXJkLgorICBUaGUgUFMvMiBrZXlib2FyZCBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCB0aGUgbW9kdWxlcyBUUU04NTQwLAorICBUUU04NTQxIGFuZCBUUU04NTU1LCBidXQgaXQgb25seSBoYXMgYmVlbiB0ZXN0ZWQgb24gYSBUUU04NTQwLCB5ZXQuCisgIE1ha2Ugc3VyZSB0aGUgUFMvMiBjb250cm9sbGVyIG9uIHRoZSBTVEs4NXh4IGlzIHByb2dyYW1tZWQuIEp1bXBlcgorICBzZXR0aW5nczogWDY2IDEtMiwgOS0xMDsgWDYxIDItMworICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMSBKdW4gMjAwNgorCisqIEFkanVzdCBSVEMgY2VudHVyeSBoYW5kbGluZyBvbiBTVEs1Mnh4IGJvYXJkIHRvIG1hdGNoIExpbnV4IGRyaXZlci4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTIgSnVuIDIwMDYKKworKiBBZGp1c3QgZmlsZW5hbWVzIGZvciBVU0IgdXBkYXRlIGltYWdlcyBvbiBUUkFCIGJvYXJkLgorICBEdXJpbmcgYW4gYXV0b21hdGljIHVwZGF0ZSB2aWEgVVNCIHN0aWNrLCBVLUJvb3Qgc2VhcmNoZXMgZm9yCisgIGltYWdlcyB3aXRoIHRoZSBuYW1lICJmaXJtd2FyZS5pbWciIGFuZCAia2VybmVsLmltZyIuIFRoaXMgbmFtZXMKKyAgYXJlIG5vdyBjaGFuZ2VkIHRvICJmaXJtd18wMS5pbWciIGFuZCAia2VybmxfMDEuaW1nIi4gVGhpcyBpcyBkb25lLAorICB0byBwcmV2ZW50IHVwZGF0ZXMgb2YgbmV3IGJvYXJkcyAod2l0aCB0aGUgbmV3IG1hY3JvbmljcyAiYyIgc3RlcAorICBmbGFzaGVzKSB3aXRoIG9sZCwgaW5jb21wYXRpYmxlIGZpcm13YXJlIG9yIGtlcm5lbCB2ZXJzaW9ucy4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjEgSnVuIDIwMDYKKworKiBCdWdmaXggaW4gVkZEIHJvdXRpbmUgb24gVFJBQiBib2FyZC4KKyAgTWFrZSBzdXJlIHVwcGVyIGxleHQgcGl4ZWwgY2FuIGJlIHNldCB0byBibHVlLCB0b28KKyAgKHNvIGZhciBvbmx5IHJlZCB3YXMgcG9zc2libGUpLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNSBGZWIgMjAwNgorCisqIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRCNTIwMCBib2FyZC4KKworKiBGaXggc29tZSBidWdzIGluIFRSQUIgYm9hcmQgZmxhc2ggZHJpdmVyLgorICAtIGluY3JlYXNlIENGR19GTEFTSF9FUkFTRV9UT1VUIGZyb20gMiB0byAxNSBzZWNvbmRzCisgIC0gdXNlIENGR19GTEFTSF9XUklURV9UT1VUIGZvciBwcm9ncmFtbWluZyBpbnN0ZWFkIG9mIENGR19GTEFTSF9FUkFTRV9UT1VUCisgIC0gcmVtb3ZlICJVbmxvY2sgQnlwYXNzIiBtb2RlLCBiZWNhdXNlIG1hY3Jvbml4IGZsYXNoZXMgZG8gbm90IHN1cHBvcnQKKyAgICB0aGlzIG1vZGUgb2ZmaWNpYWxseQorICAtIGZpeCBmbGFzaCByZXNldCBjb21tYW5kIGZyb20gMHgwMEZGIHRvIDB4MDBGMC4gMHgwMEZGIGlzIG9ubHkgc3BlY2lmaWVkCisgICAgZm9yIEludGVsIGNvbXBhdGlibGUgZmxhc2hlcywgbm90IGZvciBBTUQgY29tcGF0aWJsZS4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTUgRmViIDIwMDYKKworKiBBZGQgYWRkaXRpb25hbCBlcnJvciBtZXNzYWdlcyB0byBmbGFzaCBkcml2ZXIgb24gVFJBQiBib2FyZAorICAoZm9yIGVyYXNlIGVycm9ycyBhbmQgdGltZW91dCBlcnJvcnMpCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE0IEZlYiAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIFRCNTIwMCBib2FyZAorICBUaGUgVEI1MjAwICgiVGlueWJveCIpIGlzIGEgc21hbGwgYmFzZWJvYXJkIGZvciB0aGUgVFFNNTIwMCBtb2R1bGUKKyAgaW50ZWdyYXRlZCBpbiBhIGxpdHRsZSBhbHVtaW5pdW0gY2FzZS4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgOCBKdW4gMjAwNgorCisqIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRRTTUyMDAgYm9hcmQuCisKKyogRml4IHByb2JsZW1zIHdpdGggU2FuRGlzayBDb3Jwb3JhdGlvbiBDcnV6ZXIgTWljcm8gVVNCIG1lbW9yeSBzdGljay4KKworKiBBZGQgc3VwcG9ydCBmb3IgVFFNODg1RCBib2FyZC4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjAgTWFyIDIwMDYKKworKiBGaXggRkVDIGluaXRpYWxpc2F0aW9uOiBBbGwgTUlJIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB2aWEgRkVDMQorICByZWdpc3RlcnMsIGJ1dCBNSUlfU1BFRUQgd2FzIGNvbmZpZ3VyZWQgYWNjb3JkaW5nIHRvIEZFQyB1c2VkLiBTbworICBpZiBvbmx5IEZFQzIgd2FzIHVzZWQsIHRoaXMgY2F1c2VkIHRoZSByZWFsIE1JSV9TUEVFRCByZWdpc3RlciBpbgorICBGRUMxIHRvIHN0YXkgdW5pbml0YWxpc2VkLCBsZXFhZGluZyB0byAibWlpX3NlbmQgU1RVQ0shIiBtZXNzYWdlcy4KKyAgRml4OiBhbHdheXMgY29uZmlndXJlIE1JSV9TUEVFRCBvbiBGRUMxIG9ubHkuCisgIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDEyIEp1bCAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIFNQQzE5MjAgYm9hcmQuCisgIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDEyIEp1bCAyMDA2CisKKyogTUNDMjAwIGJvYXJkOiBzdXBwb3J0IGNvbnNvbGUgb24gYW55IG9uZSBvZiB0aGUgUXVhZCBVQVJUIHBvcnRzLgorCisqIEZpeCBlcnJvciBpbiBmbGFzaCBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIG9uIE1DQzIwMCBib2FyZC4KKworKiBNYWpvciBQQ01DSUEgQ2xlYW51cCB0byBtYWtlIGNvZGUgYmV0dGVyIHJlYWRhYmxlIGFuZCBtYWludGFpbmFibGUuCisgIE5vdGVzOgorICAtIEJvYXJkLWRlcGVuZGVuZCBjb2RlIGZvciBSUFhMSVRFIGFuZCBSUFhDTEFTU0lDLWJhc2VkIGJvYXJkcworICAgIHBsYWNlZCB0byB0aGUgZHJpdmVycy9ycHhfcG1jaWEuYyBmaWxlIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgorICAgIFNhbWUgZm9yIFRRTTh4eC1iYXNlZCBib2FyZHMgKGRyaXZlcnMvdHFtOHh4X3BtY2lhLmMpLgorICAtIGRyaXZlcnMvaTgyMzY1LmMgaGFzIGJlZW4gc3BsaXQgaW50byB0d28gcGFydHMgbG9jYXRlZCBhdAorICAgIGJvYXJkL2F0Yy90aTExM3guYyBhbmQgYm9hcmQvY3BjNDUvcGQ2NzI5MC5jIChBVEMgYW5kIENQQzQ1IGFyZQorICAgIHRoZSBvbmx5IGJvYXJkcyB1c2luZyBDT05GSUdfODIzNjUpLgorICAtIENoYW5nZXMgd2VyZSB0ZXN0ZWQgZm9yIGNsZWFuIGJ1aWxkIGFuZCAqdmVyeSogKmZldyogYm9hcmRzLgorCisqIEZpeCB0aW1lciBwcm9ibGVtcyBvbiBBTUNDIHl1Y2NhIGJvYXJkLgorICBTZXQgVGltZXIgQ2xvY2sgU2VsZWN0IHRvIHVzZSBDUFUgY2xvY2sgYXMgYSB0aW1lciBpbnB1dCBzb3VyY2UuCisKKyogQnJpbmcgeXVjY2EgY29uZmlnIG1vcmUgaW4gbGluZSB3aXRoIG90aGVyIEFNQ0MgYm9hcmRzLgorCisqIEFkZCBBTUNDIGJhbWJvbyBib2FyZCB0byBNQUtFQUxMIGJ1aWxkIHNjcmlwdC4KKworKiBGaXggQU1DQyBiYW1ib28gZXZhbCBib2FyZCBjb21waWxhdGlvbiBlcnJvcnMuCisKKyogQWRkIHN5c3RlbSBtZW1vcnkgdG8gdGhlIFBDSSByZWdpb24gbGlzdCBmb3IgQU1DQyBQUEM0NHggQ1BVcy4KKyAgRW5hYmxlZCBpdCBmb3IgWXVjY2EgYm9hcmQuCisKKyogQ2xlYW51cCBjb25maWcgZmlsZSBhbmQgYm9vdHVwIG91dHB1dCBmb3IgWXVjY2EgYm9hcmQuCisKKyogRml4IENPTkZJR180NDBfR1ggZGVmaW5lIHVzYWdlLgorCisqIFJlbW92ZSBhdXRvZ2VuZXJhdGVkIGJtcF9sb2dvLmggZmlsZS4KKworKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBTUGUgQ1BVIGJhc2VkIGV2YWwgYm9hcmQgKFl1Y2NhKS4KKworKiBDYWxsIHNlcmlhbF9pbml0aWFsaXplKCkgYmVmb3JlIGZpcnN0IGRlYnVnKCkgaXMgdXNlZC4KKworKiBDbGVhbnVwIHRyYWIgYm9hcmQgZm9yIEdDQy00LngKKwogKiBWb2ljZUJsdWUgdXBkYXRlOiB1c2UgbmV3IE1URCBmbGFzaCBwYXJ0aXRpb25pbmcgbWV0aG9kcywgdXNlIG1vcmUKICAgcmVhc29uYWJsZSBURVhUX0JBU0UsIHVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGFuZCBlbmFibGUga2V5ZWQKICAgYXV0b2Jvb3QuCi0gIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNi4gQXVnIDIwMDUgCisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNi4gQXVnIDIwMDUKIAogKiBBZGQgZm9yZ290dGVuIGNoYW5nZXMgZm9yIHRoZSBQTEVCIDIgQm9hcmQuCiAgIFBhdGNoIGJ5IERhdmlkIFNub3dkb24sIDEzLiBBdWcgMjAwNQogCiAqIEFkZCBzdXBwb3J0IGZvciB3clBQTUM3eHgvNzR4eCBib2FyZHMKICAgUGF0Y2ggYnkgUmljaGFyZCBEYW50ZXIsIDEyIEF1ZyAyMDA1Ci0gCisKICogQWRkIHN1cHBvcnQgZm9yIGd0aDIgYm9hcmQKICAgUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCBBdWcgMTEgMjAwNQogCkBAIC0zNCw3ICszOTAsNyBAQAogICBXaXRoIHRoaXMgZml4IHBpbiBJMkNTQ0wgKFBHNikgaXMgcmVhbGx5IGNvbmZpZ3VyZWQgYXMgR1BJTwogICBzbyB0aGUgY2xvY2sgcHVsc2VzIGFyZSByZWFsbHkgZ2VuZXJhdGVkLgogICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNgotICAKKwogKiBGaXggRERSNiBlcnJhdGEgb24gVFFNODM0eCBib2FyZHMKICAgUGF0Y2ggYnkgVGhvbWFzIFdhZWhuZXIsIDA3IE1hciAyMDA2CiAKQEAgLTUxLDcgKzQwNyw3IEBACiAgIGhhcyBiZWVuIHByb2dyYW1tZWQuIEp1bXBlciBTZXR0aW5nczogWDY2IDEtMiwgOS0xMDsgWDYxIDItMwogCiAqIEZpeCBUUkFCIGNoYW5uZWwgc3dpdGNoaW5nIGRlbGF5IGZvciB0cmFiX2ZrdC5iaW4gc3RhbmRhbG9uZSBhcHBsaWthdGlvbgotICBJbiB0c2MyMDAwX3JlYWRfY2hhbm5lbCgpIHRoZSBkZWxheSBhZnRlciBzZXR0aW5nIHRoZSBtdWx0aXBsZXhlciAKKyAgSW4gdHNjMjAwMF9yZWFkX2NoYW5uZWwoKSB0aGUgZGVsYXkgYWZ0ZXIgc2V0dGluZyB0aGUgbXVsdGlwbGV4ZXIKICAgdG8gYSB0ZW1wZXJhdHVyZSBjaGFubmVsIGlzIGluY3JlYXNlZCBmcm9tIDEsNSBtcyB0byAxMCBtcy4gVGhpcwogICBpcyB0byBhbGxvdyB0aGUgbXVsdGlwbGV4ZXIgaW5wdXRzIHRvIHN0YWJpbGl6ZSBhZnRlciBodWdlIHN0ZXBzCiAgIG9mIHRoZSBpbnB1dCBzaWduYWwgbGV2ZWwuCmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCA5NDE1M2E3Li4zMmQzMDYwIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTIzMyw2ICsyMzMsNyBAQAogTjogU2FuZ21vb24gS2ltCiBFOiBkb2dvaWxAZXRpbnN5cy5jb20KIEQ6IFN1cHBvcnQgZm9yIGRlYnJpcyBib2FyZAorRDogU3VwcG9ydCBmb3IgS1ZNRTA4MCBib2FyZAogCiBOOiBGcmVkZXJpY2sgVy4gS2xhdHQKIEU6IGZyZWQua2xhdHRAd2luZHJpdmVyLmNvbQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBhYWY5MWNkLi4xOGIyM2EyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTk3LDYgKzE5Nyw3IEBACiBTYW5nbW9vbiBLaW0gPGRvZ29pbEBldGluc3lzLmNvbT4KIAogCWRlYnJpcwkJCU1QQzgyNDUKKwlLVk1FMDgwCQkJTVBDODI0NQogCiBUaG9tYXMgTGFuZ2UgPHRob21hc0Bjb3JlbGF0dXMuc2U+CiAKQEAgLTIxNyw2ICsyMTgsOCBAQAogCU1QQzg1NDFDRFMJCU1QQzg1NDEKIAlNUEM4NTU1Q0RTCQlNUEM4NTU1CiAKKwlNUEM4NjQxSFBDTgkJTVBDODY0MUQKKwogRGFuIE1hbGVrIDxkYW5AZW1iZWRkZWRlZGdlLmNvbT4KIAogCVNUeEdQMwkJCU1QQzg1eHgKQEAgLTI4NCw2ICsyODcsNyBAQAogCW9jb3RlYQkJCVBQQzQ0MEdYCiAJcDNwNDQwCQkJUFBDNDQwR1AKIAlwY3M0NDBlcAkJUFBDNDQwRVAKKwlzZXF1b2lhCQkJUFBDNDQwRVB4CiAJc3ljYW1vcmUJCVBQQzQwNUdQcgogCXdhbG51dAkJCVBQQzQwNUdQCiAJeWVsbG93c3RvbmUJCVBQQzQ0MEdSCkBAIC0zMTcsNiArMzIxLDExIEBACiAKIAlNUEM4MjY2QURTCQlNUEM4MjY2CiAKKworRGF2aWQgVXBkZWdyYWZmIDxkYXZlQGNyYXkuY29tPgorCisJQ1JBWUwxCQkJUFBDNHh4CisKIEpvc2VmIFdhZ25lciA8V2FnbmVyQE1pY3Jvc3lzLmRlPgogCiAJQ1BDNDUJCQlNUEM4MjQ1CkBAIC0zNDYsNyArMzU1LDYgQEAKIAlSUFhDbGFzc2ljCQlNUEM4eHgKIAlSUFhsaXRlCQkJTVBDOHh4CiAKLQlDUkFZTDEJCQlQUEM0eHgKIAlFUklDCQkJUFBDNHh4CiAKIAlNT1VTU0UJCQlNUEM4MjR4CmRpZmYgLS1naXQgYS9NQUtFQUxMIGIvTUFLRUFMTAppbmRleCA4MDRlYTEyLi4yYTMzNGZmIDEwMDc1NQotLS0gYS9NQUtFQUxMCisrKyBiL01BS0VBTEwKQEAgLTgsNyArOCwxNyBAQAogCU1BS0U9bWFrZQogZmkKIAotWyAtZCBMT0cgXSB8fCBta2RpciBMT0cgfHwgZXhpdCAxCitpZiBbICIke01BS0VBTExfTE9HRElSfSIgXSA7IHRoZW4KKwlMT0dfRElSPSR7TUFLRUFMTF9MT0dESVJ9CitlbHNlCisJTE9HX0RJUj0iTE9HIgorZmkKKworaWYgWyAhICIke0JVSUxEX0RJUn0iIF0gOyB0aGVuCisJQlVJTERfRElSPSIuIgorZmkKKworWyAtZCAke0xPR19ESVJ9IF0gfHwgbWtkaXIgJHtMT0dfRElSfSB8fCBleGl0IDEKIAogTElTVD0iIgogCkBAIC0yNSwxNiArMzUsMTYgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogTElTVF81eHh4PSIJXAotCUJDMzQ1MAkJY3BjaTUyMDAJRVZBTDUyMDAJaWNlY3ViZV81MTAwCVwKLQlpY2VjdWJlXzUyMDAJbGl0ZTUyMDBiCW1jYzIwMAkJbzJkbnQJCVwKLQlwZjUyMDAJCVBNNTIwCQlUb3RhbDUxMDAJVG90YWw1MjAwCVwKLQlUb3RhbDUyMDBfUmV2MglUUU01MjAwCQkJCQkJXAorCUJDMzQ1MAkJY3BjaTUyMDAJRVZBTDUyMDAJZm8zMDAJCVwKKwlpY2VjdWJlXzUxMDAJaWNlY3ViZV81MjAwCWxpdGU1MjAwYgltY2MyMDAJCVwKKwlvMmRudAkJcGY1MjAwCQlQTTUyMAkJVEI1MjAwCQlcCisJVG90YWw1MTAwCVRvdGFsNTIwMAlUb3RhbDUyMDBfUmV2MglUUU01MjAwCQlcCisJVFFNNTIwMF9CCVRRTTUyMDBTCQkJCQlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIE1QQzh4eCBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KIExJU1RfOHh4PSIJXAogCUFkZGVyODd4CUdFTklFVFYJCU1CWDg2MFQJCVIzNjBNUEkJCVwKIAlBZGRlcklJCQlHVEgJCU1IUEMJCVJCQzgyMwkJXApAQCAtNDQsMTYgKzU0LDE4IEBACiAJQ0NNCQlJUDg2MAkJTkVUUEhPTkUJUlBYbGl0ZV9EVwlcCiAJY29nZW50X21wYzh4eAlJVk1MMjQJCU5FVFRBCQlSUnZpc2lvbglcCiAJRUxQVDg2MAkJSVZNTDI0XzEyOAlORVRUQTIJCVNNODUwCQlcCi0JRVA4OHgJCUlWTUwyNF8yNTYJTkVUVEFfSVNETglTUEQ4MjNUUwlcCi0JRVNURUVNMTkyRQlJVk1TOAkJTkVUVklBCQlzdm1fc2M4eHgJXAotCUVUWDA5NAkJSVZNUzhfMTI4CU5FVFZJQV9WMglTWE5JODU1VAlcCi0JRkFEUzgyMwkJSVZNUzhfMjU2CU5YODIzCQlUT1A4NjAJCVwKLQlGQURTODUwU0FSCUtVUDRLCQlwY3VfZQkJVFFNODIzTAkJXAotCUZBRFM4NjBUCUtVUDRYCQlRUzgyMwkJVFFNODIzTF9MQ0QJXAotCUZMQUdBRE0JCUxBTlRFQwkJUVM4NTAJCVRRTTg1MEwJCVwKLQlGUFM4NTBMCQlsd21vbgkJUVM4NjBUCQlUUU04NTVMCQlcCi0JR0VOODYwVAkJTUJYCQlxdWFudHVtCQlUUU04NjBMCQlcCi0JR0VOODYwVF9TQwkJCQkJdWMxMDAJCVwKKwlFUDg4eAkJSVZNTDI0XzI1NglORVRUQV9JU0ROCXNwYzE5MjAJCVwKKwlFU1RFRU0xOTJFCUlWTVM4CQlORVRWSUEJCVNQRDgyM1RTCVwKKwlFVFgwOTQJCUlWTVM4XzEyOAlORVRWSUFfVjIJc3ZtX3NjOHh4CVwKKwlGQURTODIzCQlJVk1TOF8yNTYJTlg4MjMJCVNYTkk4NTVUCVwKKwlGQURTODUwU0FSCUtVUDRLCQlwY3VfZQkJVE9QODYwCQlcCisJRkFEUzg2MFQJS1VQNFgJCVFTODIzCQlUUU04MjNMCQlcCisJRkxBR0FETQkJTEFOVEVDCQlRUzg1MAkJVFFNODIzTF9MQ0QJXAorCUZQUzg1MEwJCWx3bW9uCQlRUzg2MFQJCVRRTTg1MEwJCVwKKwlHRU44NjBUCQlNQlgJCXF1YW50dW0JCVRRTTg1NUwJCVwKKwlHRU44NjBUX1NDCQkJCQlUUU04NjBMCQlcCisJCQkJCQkJVFFNODg1RAkJXAorCQkJCQkJCXVjMTAwCQlcCiAJCQkJCQkJdjM3CQlcCiAiCiAKQEAgLTYzLDE5ICs3NSwyMCBAQAogCiBMSVNUXzR4eD0iCVwKIAlBRENJT1AJCUFQMTAwMAkJQVI0MDUJCUFTSDQwNQkJXAotCWJ1YmluZ2EJCUNBTkJUCQlDTVM3MDAJCUNQQ0kyRFAJCVwKLQlDUENJNDA1CQlDUENJNDA1MglDUENJNDA1QUIJQ1BDSTQwNURUCVwKLQlDUENJNDQwCQlDUENJSVNFUjQJQ1JBWUwxCQljc2IyNzIJCVwKLQljc2I0NzIJCURBU0FfU0lNCURQNDA1CQlEVTQwNQkJXAotCWVib255CQlFUklDCQlFWEJJVEdFTglHMjAwMAkJXAotCUhINDA1CQlIVUI0MDUJCUpTRQkJS0FSRUYJCVwKLQlsdWFuCQlNRVRST0JPWAlNSVA0MDUJCU1JUDQwNVQJCVwKLQlNTDIJCW1sMzAwCQlvY290ZWEJCU9DUlRDCQlcCi0JT1JTRwkJcDNwNDQwCQlQQ0k0MDUJCXBjczQ0MGVwCVwKLQlQSVA0MDUJCVBMVTQwNQkJUE1DNDA1CSAgICAgICAgUFBDaGFtZWxlb25FVkIJXAotCXNiYzQwNQkJVk9INDA1CQlWT000MDUgICAgICAgICAgVzdPTE1DCQlcCi0JVzdPTE1HCQl3YWxudXQJCVdVSDQwNQkJWFBFRElURTFLCVwKLQl5ZWxsb3dzdG9uZQl5b3NlbWl0ZQkJCQkJXAorCWJhbWJvbwkJYnViaW5nYQkJQ0FOQlQJCUNNUzcwMAkJXAorCUNQQ0kyRFAJCUNQQ0k0MDUJCUNQQ0k0MDUyCUNQQ0k0MDVBQglcCisJQ1BDSTQwNURUCUNQQ0k0NDAJCUNQQ0lJU0VSNAlDUkFZTDEJCVwKKwljc2IyNzIJCWNzYjQ3MgkJREFTQV9TSU0JRFA0MDUJCVwKKwlEVTQwNQkJZWJvbnkJCUVSSUMJCUVYQklUR0VOCVwKKwlHMjAwMAkJSEg0MDUJCUhVQjQwNQkJSlNFCQlcCisJS0FSRUYJCWx1YW4JCU1FVFJPQk9YCU1JUDQwNQkJXAorCU1JUDQwNVQJCU1MMgkJbWwzMDAJCW9jb3RlYQkJXAorCU9DUlRDCQlPUlNHCQlwM3A0NDAJCVBDSTQwNQkJXAorCXBjczQ0MGVwCVBJUDQwNQkJUExVNDA1CQlQTUM0MDUJCVwKKwlQUENoYW1lbGVvbkVWQglzYmM0MDUJCXNlcXVvaWEJCXNlcXVvaWFfbmFuZAlcCisJVk9INDA1CQlWT000MDUJCVc3T0xNQwkJVzdPTE1HCQlcCisJd2FsbnV0CQlXVUg0MDUJCVhQRURJVEUxSwl5ZWxsb3dzdG9uZQlcCisJeW9zZW1pdGUJeXVjY2EJCWJhbWJvbwkJXAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC05Myw5ICsxMDYsOSBAQAogTElTVF84MjR4PSIJXAogCUEzMDAwCQliYXJjbwkJQk1XCQlDUEM0NQkJXAogCUNVODI0CQlkZWJyaXMJCWVYYWxpb24JCUhJRERFTl9EUkFHT04JXAotCU1PVVNTRQkJTVVTRU5LSQkJTVZCTFVFCQlPWEMJCVwKLQlQTjYyCQlTYW5kcG9pbnQ4MjQwCVNhbmRwb2ludDgyNDUJc2JjODI0MAkJXAotCVNMODI0NQkJdXR4ODI0NQkJCQkJCVwKKwkJCU1PVVNTRQkJTVVTRU5LSQkJTVZCTFVFCQlcCisJT1hDCQlQTjYyCQlTYW5kcG9pbnQ4MjQwCVNhbmRwb2ludDgyNDUJXAorCXNiYzgyNDAJCVNMODI0NQkJdXR4ODI0NQkJCQlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE3OSw5ICsxOTIsMTAgQEAKIAlhcDk2NgkJY3A5MjB0CQljcDkyMl9YQTEwCWNwOTI2ZWpzCVwKIAljcDk0NmVzCQljcDk2NgkJbHBkN2E0MDAJbXAydXNiCQlcCiAJbXgxYWRzCQlteDFmczIJCW5ldHN0YXIJCW9tYXAxNTEwaW5uCVwKLQlvbWFwMTYxMGgyCW9tYXAxNjEwaW5uCW9tYXA3MzBwMglzY2I5MzI4CQlcCi0Jc21kazI0MDAJc21kazI0MTAJdHJhYgkJVkNNQTkJCVwKLQl2ZXJzYXRpbGUJdmVyc2F0aWxlYWIJdmVyc2F0aWxlcGIJdm9pY2VibHVlCisJb21hcDE2MTBoMglvbWFwMTYxMGlubglvbWFwNzMwcDIJc2JjMjQxMHgJXAorCXNjYjkzMjgJCXNtZGsyNDAwCXNtZGsyNDEwCXRyYWIJCVwKKwlWQ01BOQkJdmVyc2F0aWxlCXZlcnNhdGlsZWFiCXZlcnNhdGlsZXBiCVwKKwl2b2ljZWJsdWUJCQkJCQkJXAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0zMDAsOCArMzE0LDEyIEBACiAKIAkke01BS0V9IGRpc3RjbGVhbiA+L2Rldi9udWxsCiAJJHtNQUtFfSAke3RhcmdldH1fY29uZmlnCi0JJHtNQUtFfSAke0pPQlN9IGFsbCAyPiYxID5MT0cvJHRhcmdldC5NQUtFTE9HIHwgdGVlIExPRy8kdGFyZ2V0LkVSUgotIwkke0NST1NTX0NPTVBJTEU6LXBwY184eHgtfXNpemUgdS1ib290IHwgdGVlIC1hIExPRy8kdGFyZ2V0Lk1BS0VMT0cKKworCSR7TUFLRX0gJHtKT0JTfSBhbGwgMj4mMSA+JHtMT0dfRElSfS8kdGFyZ2V0Lk1BS0VMT0cgXAorCQkJCXwgdGVlICR7TE9HX0RJUn0vJHRhcmdldC5FUlIKKworCSR7Q1JPU1NfQ09NUElMRTotcHBjXzh4eC19c2l6ZSAke0JVSUxEX0RJUn0vdS1ib290IFwKKwkJCQl8IHRlZSAtYSAke0xPR19ESVJ9LyR0YXJnZXQuTUFLRUxPRwogfQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMGIwMDgxOS4uYzA2MjFmNiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpbzsgZWl0aGVyIHZlcnNpb24gMiBvZgogIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0yNiw3ICsyNiw3IEBACiBTVUJMRVZFTCA9IDQKIEVYVFJBVkVSU0lPTiA9CiBVX0JPT1RfVkVSU0lPTiA9ICQoVkVSU0lPTikuJChQQVRDSExFVkVMKS4kKFNVQkxFVkVMKSQoRVhUUkFWRVJTSU9OKQotVkVSU0lPTl9GSUxFID0gaW5jbHVkZS92ZXJzaW9uX2F1dG9nZW5lcmF0ZWQuaAorVkVSU0lPTl9GSUxFID0gJChvYmopaW5jbHVkZS92ZXJzaW9uX2F1dG9nZW5lcmF0ZWQuaAogCiBIT1NUQVJDSCA6PSAkKHNoZWxsIHVuYW1lIC1tIHwgXAogCXNlZCAtZSBzL2kuODYvaTM4Ni8gXApAQCAtNDUsMTQgKzQ1LDc4IEBACiBWRU5ET1I9CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgVS1ib290IGJ1aWxkIHN1cHBvcnRzIHByb2R1Y2luZyBhIG9iamVjdCBmaWxlcyB0byB0aGUgc2VwYXJhdGUgZXh0ZXJuYWwKKyMgZGlyZWN0b3J5LiBUd28gdXNlIGNhc2VzIGFyZSBzdXBwb3J0ZWQ6CisjCisjIDEpIEFkZCBPPSB0byB0aGUgbWFrZSBjb21tYW5kIGxpbmUKKyMgJ21ha2UgTz0vdG1wL2J1aWxkIGFsbCcKKyMKKyMgMikgU2V0IGVudmlyb25lbWVudCB2YXJpYWJsZSBCVUlMRF9ESVIgdG8gcG9pbnQgdG8gdGhlIGRlc2lyZWQgbG9jYXRpb24KKyMgJ2V4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZCcKKyMgJ21ha2UnCisjCisjIFRoZSBzZWNvbmQgYXBwcm9hY2ggY2FuIGFsc28gYmUgdXNlZCB3aXRoIGEgTUFLRUFMTCBzY3JpcHQKKyMgJ2V4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZCcKKyMgJy4vTUFLRUFMTCcKKyMKKyMgQ29tbWFuZCBsaW5lICdPPScgc2V0dGluZyBvdmVycmlkZXMgQlVJTERfRElSIGVudmlyb25lbnQgdmFyaWFibGUuCisjCisjIFdoZW4gbm9uZSBvZiB0aGUgYWJvdmUgbWV0aG9kcyBpcyB1c2VkIHRoZSBsb2NhbCBidWlsZCBpcyBwZXJmb3JtZWQgYW5kCisjIHRoZSBvYmplY3QgZmlsZXMgYXJlIHBsYWNlZCBpbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KKyMKIAotVE9QRElSCTo9ICQoc2hlbGwgaWYgWyAiJCRQV0QiICE9ICIiIF07IHRoZW4gZWNobyAkJFBXRDsgZWxzZSBwd2Q7IGZpKQotZXhwb3J0CVRPUERJUgoraWZkZWYgTworaWZlcSAoIiQob3JpZ2luIE8pIiwgImNvbW1hbmQgbGluZSIpCitCVUlMRF9ESVIgOj0gJChPKQorZW5kaWYKK2VuZGlmCiAKLWlmZXEgKGluY2x1ZGUvY29uZmlnLm1rLCQod2lsZGNhcmQgaW5jbHVkZS9jb25maWcubWspKQoraWZuZXEgKCQoQlVJTERfRElSKSwpCitzYXZlZC1vdXRwdXQgOj0gJChCVUlMRF9ESVIpCisKKyMgQXR0ZW1wdCB0byBjcmVhdGUgYSBvdXRwdXQgZGlyZWN0b3J5LgorJChzaGVsbCBbIC1kICR7QlVJTERfRElSfSBdIHx8IG1rZGlyIC1wICR7QlVJTERfRElSfSkKKworIyBWZXJpZnkgaWYgaXQgd2FzIHN1Y2Nlc3NmdWwuCitCVUlMRF9ESVIgOj0gJChzaGVsbCBjZCAkKEJVSUxEX0RJUikgJiYgL2Jpbi9wd2QpCiskKGlmICQoQlVJTERfRElSKSwsJChlcnJvciBvdXRwdXQgZGlyZWN0b3J5ICIkKHNhdmVkLW91dHB1dCkiIGRvZXMgbm90IGV4aXN0KSkKK2VuZGlmICMgaWZuZXEgKCQoQlVJTERfRElSKSwpCisKK09CSlRSRUUJCTo9ICQoaWYgJChCVUlMRF9ESVIpLCQoQlVJTERfRElSKSwkKENVUkRJUikpCitTUkNUUkVFCQk6PSAkKENVUkRJUikKK1RPUERJUgkJOj0gJChTUkNUUkVFKQorTE5ESVIJCTo9ICQoT0JKVFJFRSkKK2V4cG9ydAlUT1BESVIgU1JDVFJFRSBPQkpUUkVFCisKK01LQ09ORklHCTo9ICQoU1JDVFJFRSkvbWtjb25maWcKK2V4cG9ydCBNS0NPTkZJRworCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorUkVNT1RFX0JVSUxEIAk6PSAxCitleHBvcnQgUkVNT1RFX0JVSUxECitlbmRpZgorCisjICQob2JqKSBhbmQgKHNyYykgYXJlIGRlZmluZWQgaW4gY29uZmlnLm1rIGJ1dCBoZXJlIGluIG1haW4gTWFrZWZpbGUKKyMgd2UgYWxzbyBuZWVkIHRoZW0gYmVmb3JlIGNvbmZpZy5tayBpcyBpbmNsdWRlZCB3aGljaCBpcyB0aGUgY2FzZSBmb3IKKyMgc29tZSB0YXJnZXRzIGxpa2UgdW5jb25maWcsIGNsZWFuLCBjbG9iYmVyLCBkaXN0Y2xlYW4sIGV0Yy4KK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCitvYmogOj0gJChPQkpUUkVFKS8KK3NyYyA6PSAkKFNSQ1RSRUUpLworZWxzZQorb2JqIDo9CitzcmMgOj0KK2VuZGlmCitleHBvcnQgb2JqIHNyYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmZXEgKCQoT0JKVFJFRSkvaW5jbHVkZS9jb25maWcubWssJCh3aWxkY2FyZCAkKE9CSlRSRUUpL2luY2x1ZGUvY29uZmlnLm1rKSkKKwogIyBsb2FkIEFSQ0gsIEJPQVJELCBhbmQgQ1BVIGNvbmZpZ3VyYXRpb24KLWluY2x1ZGUgaW5jbHVkZS9jb25maWcubWsKK2luY2x1ZGUgJChPQkpUUkVFKS9pbmNsdWRlL2NvbmZpZy5tawogZXhwb3J0CUFSQ0ggQ1BVIEJPQVJEIFZFTkRPUiBTT0MKKwogaWZuZGVmIENST1NTX0NPTVBJTEUKIGlmZXEgKCQoSE9TVEFSQ0gpLHBwYykKIENST1NTX0NPTVBJTEUgPQpAQCAtOTYsNyArMTYwLDYgQEAKICMgbG9hZCBvdGhlciBjb25maWd1cmF0aW9uCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFUtQm9vdCBvYmplY3RzLi4uLm9yZGVyIGlzIGltcG9ydGFudCAoaS5lLiBzdGFydCBtdXN0IGJlIGZpcnN0KQogCkBAIC0xMTQsMTEgKzE3NywxNiBAQAogaWZlcSAoJChDUFUpLG1wYzg1eHgpCiBPQkpTICs9IGNwdS8kKENQVSkvcmVzZXR2ZWMubwogZW5kaWYKK2lmZXEgKCQoQ1BVKSxtcGM4Nnh4KQorT0JKUyArPSBjcHUvJChDUFUpL3Jlc2V0dmVjLm8KK2VuZGlmCiBpZmVxICgkKENQVSksYmY1MzMpCiBPQkpTICs9IGNwdS8kKENQVSkvc3RhcnQxLm8JY3B1LyQoQ1BVKS9pbnRlcnJ1cHQubwljcHUvJChDUFUpL2NhY2hlLm8KIE9CSlMgKz0gY3B1LyQoQ1BVKS9jcGxiaGRsci5vCWNwdS8kKENQVSkvY3BsYm1nci5vCWNwdS8kKENQVSkvZmx1c2gubwogZW5kaWYKIAorT0JKUyA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChPQkpTKSkKKwogTElCUyAgPSBsaWJfZ2VuZXJpYy9saWJnZW5lcmljLmEKIExJQlMgKz0gYm9hcmQvJChCT0FSRERJUikvbGliJChCT0FSRCkuYQogTElCUyArPSBjcHUvJChDUFUpL2xpYiQoQ1BVKS5hCkBAIC0xMzksMTIgKzIwNywxMyBAQAogTElCUyArPSBwb3N0L2xpYnBvc3QuYSBwb3N0L2NwdS9saWJjcHUuYQogTElCUyArPSBjb21tb24vbGliY29tbW9uLmEKIExJQlMgKz0gJChCT0FSRExJQlMpCisKK0xJQlMgOj0gJChhZGRwcmVmaXggJChvYmopLCQoTElCUykpCiAuUEhPTlkgOiAkKExJQlMpCiAKICMgQWRkIEdDQyBsaWIKIFBMQVRGT1JNX0xJQlMgKz0gLUwgJChzaGVsbCBkaXJuYW1lIGAkKENDKSAkKENGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKSAtbGdjYwogCi0KICMgVGhlICJ0b29scyIgYXJlIG5lZWRlZCBlYXJseSwgc28gcHV0IHRoaXMgZmlyc3QKICMgRG9uJ3QgaW5jbHVkZSBzdHVmZiBhbHJlYWR5IGRvbmUgaW4gJChMSUJTKQogU1VCRElSUwk9IHRvb2xzIFwKQEAgLTE1Myw0NCArMjIyLDYxIEBACiAJICBwb3N0L2NwdQogLlBIT05ZIDogJChTVUJESVJTKQogCitpZmVxICgkKENPTkZJR19OQU5EX1VfQk9PVCkseSkKK05BTkRfU1BMID0gbmFuZF9zcGwKK1VfQk9PVF9OQU5EID0gJChvYmopdS1ib290LW5hbmQuYmluCitlbmRpZgorCitfX09CSlMgOj0gJChzdWJzdCAkKG9iaiksLCQoT0JKUykpCitfX0xJQlMgOj0gJChzdWJzdCAkKG9iaiksLCQoTElCUykpCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotQUxMID0gdS1ib290LnNyZWMgdS1ib290LmJpbiBTeXN0ZW0ubWFwCitBTEwgPSAkKG9iail1LWJvb3Quc3JlYyAkKG9iail1LWJvb3QuYmluICQob2JqKVN5c3RlbS5tYXAgJChVX0JPT1RfTkFORCkKIAogYWxsOgkJJChBTEwpCiAKLXUtYm9vdC5oZXg6CXUtYm9vdAorJChvYmopdS1ib290LmhleDoJJChvYmopdS1ib290CiAJCSQoT0JKQ09QWSkgJHtPQkpDRkxBR1N9IC1PIGloZXggJDwgJEAKIAotdS1ib290LnNyZWM6CXUtYm9vdAorJChvYmopdS1ib290LnNyZWM6CSQob2JqKXUtYm9vdAogCQkkKE9CSkNPUFkpICR7T0JKQ0ZMQUdTfSAtTyBzcmVjICQ8ICRACiAKLXUtYm9vdC5iaW46CXUtYm9vdAorJChvYmopdS1ib290LmJpbjoJJChvYmopdS1ib290CiAJCSQoT0JKQ09QWSkgJHtPQkpDRkxBR1N9IC1PIGJpbmFyeSAkPCAkQAogCi11LWJvb3QuaW1nOgl1LWJvb3QuYmluCiskKG9iail1LWJvb3QuaW1nOgkkKG9iail1LWJvb3QuYmluCiAJCS4vdG9vbHMvbWtpbWFnZSAtQSAkKEFSQ0gpIC1UIGZpcm13YXJlIC1DIG5vbmUgXAogCQktYSAkKFRFWFRfQkFTRSkgLWUgMCBcCiAJCS1uICQoc2hlbGwgc2VkIC1uIC1lICdzLy4qVV9CT09UX1ZFUlNJT04vL3AnICQoVkVSU0lPTl9GSUxFKSB8IFwKIAkJCXNlZCAtZSAncy8iWwkgXSokJC8gZm9yICQoQk9BUkQpIGJvYXJkIi8nKSBcCiAJCS1kICQ8ICRACiAKLXUtYm9vdC5kaXM6CXUtYm9vdAorJChvYmopdS1ib290LmRpczoJJChvYmopdS1ib290CiAJCSQoT0JKRFVNUCkgLWQgJDwgPiAkQAogCi11LWJvb3Q6CQlkZXBlbmQgdmVyc2lvbiAkKFNVQkRJUlMpICQoT0JKUykgJChMSUJTKSAkKExEU0NSSVBUKQorJChvYmopdS1ib290OgkJZGVwZW5kIHZlcnNpb24gJChTVUJESVJTKSAkKE9CSlMpICQoTElCUykgJChMRFNDUklQVCkKIAkJVU5ERUZfU1lNPWAkKE9CSkRVTVApIC14ICQoTElCUykgfHNlZCAgLW4gLWUgJ3MvLipcKF9fdV9ib290X2NtZF8uKlwpLy11XDEvcCd8c29ydHx1bmlxYDtcCi0JCSQoTEQpICQoTERGTEFHUykgJCRVTkRFRl9TWU0gJChPQkpTKSBcCi0JCQktLXN0YXJ0LWdyb3VwICQoTElCUykgLS1lbmQtZ3JvdXAgJChQTEFURk9STV9MSUJTKSBcCisJCWNkICQoTE5ESVIpICYmICQoTEQpICQoTERGTEFHUykgJCRVTkRFRl9TWU0gJChfX09CSlMpIFwKKwkJCS0tc3RhcnQtZ3JvdXAgJChfX0xJQlMpIC0tZW5kLWdyb3VwICQoUExBVEZPUk1fTElCUykgXAogCQkJLU1hcCB1LWJvb3QubWFwIC1vIHUtYm9vdAogCiskKE9CSlMpOgorCQkkKE1BS0UpIC1DIGNwdS8kKENQVSkgJChpZiAkKFJFTU9URV9CVUlMRCksJEAsJChub3RkaXIgJEApKQorCiAkKExJQlMpOgotCQkkKE1BS0UpIC1DIGBkaXJuYW1lICRAYAorCQkkKE1BS0UpIC1DICQoZGlyICQoc3Vic3QgJChvYmopLCwkQCkpCiAKICQoU1VCRElSUyk6CiAJCSQoTUFLRSkgLUMgJEAgYWxsCiAKKyQoTkFORF9TUEwpOgl2ZXJzaW9uCisJCSQoTUFLRSkgLUMgbmFuZF9zcGwgYWxsCisKKyQoVV9CT09UX05BTkQpOgkkKE5BTkRfU1BMKSAkKG9iail1LWJvb3QuYmluCisJCWNhdCBuYW5kX3NwbC91LWJvb3Qtc3BsLTE2ay5iaW4gJChvYmopdS1ib290LmJpbiA+ICQob2JqKXUtYm9vdC1uYW5kLmJpbgorCiB2ZXJzaW9uOgogCQlAZWNobyAtbiAiI2RlZmluZSBVX0JPT1RfVkVSU0lPTiBcIlUtQm9vdCAiID4gJChWRVJTSU9OX0ZJTEUpOyBcCiAJCWVjaG8gLW4gIiQoVV9CT09UX1ZFUlNJT04pIiA+PiAkKFZFUlNJT05fRklMRSk7IFwKQEAgLTE5OSwzMyArMjg1LDQyIEBACiAJCWVjaG8gIlwiIiA+PiAkKFZFUlNJT05fRklMRSkKIAogZ2RidG9vbHM6Ci0JCSQoTUFLRSkgLUMgdG9vbHMvZ2RiIHx8IGV4aXQgMQorCQkkKE1BS0UpIC1DIHRvb2xzL2dkYiBhbGwgfHwgZXhpdCAxCisKK3VwZGF0ZXI6CisJCSQoTUFLRSkgLUMgdG9vbHMvdXBkYXRlciBhbGwgfHwgZXhpdCAxCisKK2VudjoKKwkJJChNQUtFKSAtQyB0b29scy9lbnYgYWxsIHx8IGV4aXQgMQogCiBkZXBlbmQgZGVwOgotCQlAZm9yIGRpciBpbiAkKFNVQkRJUlMpIDsgZG8gJChNQUtFKSAtQyAkJGRpciAuZGVwZW5kIDsgZG9uZQorCQlmb3IgZGlyIGluICQoU1VCRElSUykgOyBkbyAkKE1BS0UpIC1DICQkZGlyIF9kZXBlbmQgOyBkb25lCiAKLXRhZ3M6Ci0JCWN0YWdzIC13IGBmaW5kICQoU1VCRElSUykgaW5jbHVkZSBcCit0YWdzIGN0YWdzOgorCQljdGFncyAtdyAtbyAkKE9CSlRSRUUpL2N0YWdzIGBmaW5kICQoU1VCRElSUykgaW5jbHVkZSBcCiAJCQkJbGliX2dlbmVyaWMgYm9hcmQvJChCT0FSRERJUikgY3B1LyQoQ1BVKSBsaWJfJChBUkNIKSBcCiAJCQkJZnMvY3JhbWZzIGZzL2ZhdCBmcy9mZG9zIGZzL2pmZnMyIFwKIAkJCQluZXQgZGlzayBydGMgZHR0IGRyaXZlcnMgZHJpdmVycy9zazk4bGluIGNvbW1vbiBcCiAJCQlcKCAtbmFtZSBDVlMgLXBydW5lIFwpIC1vIFwoIC1uYW1lICcqLltjaF0nIC1wcmludCBcKWAKIAogZXRhZ3M6Ci0JCWV0YWdzIC1hIGBmaW5kICQoU1VCRElSUykgaW5jbHVkZSBcCisJCWV0YWdzIC1hIC1vICQoT0JKVFJFRSkvZXRhZ3MgYGZpbmQgJChTVUJESVJTKSBpbmNsdWRlIFwKIAkJCQlsaWJfZ2VuZXJpYyBib2FyZC8kKEJPQVJERElSKSBjcHUvJChDUFUpIGxpYl8kKEFSQ0gpIFwKIAkJCQlmcy9jcmFtZnMgZnMvZmF0IGZzL2Zkb3MgZnMvamZmczIgXAogCQkJCW5ldCBkaXNrIHJ0YyBkdHQgZHJpdmVycyBkcml2ZXJzL3NrOThsaW4gY29tbW9uIFwKIAkJCVwoIC1uYW1lIENWUyAtcHJ1bmUgXCkgLW8gXCggLW5hbWUgJyouW2NoXScgLXByaW50IFwpYAogCi1TeXN0ZW0ubWFwOgl1LWJvb3QKKyQob2JqKVN5c3RlbS5tYXA6CSQob2JqKXUtYm9vdAogCQlAJChOTSkgJDwgfCBcCiAJCWdyZXAgLXYgJ1woY29tcGlsZWRcKVx8XChcLm8kJFwpXHxcKCBbYVV3XSBcKVx8XChcLlwubmckJFwpXHxcKExBU0hbUkxdRElcKScgfCBcCi0JCXNvcnQgPiBTeXN0ZW0ubWFwCisJCXNvcnQgPiAkKG9iailTeXN0ZW0ubWFwCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGVsc2UKLWFsbCBpbnN0YWxsIHUtYm9vdCB1LWJvb3Quc3JlYyBkZXBlbmQgZGVwOgorYWxsICQob2JqKXUtYm9vdC5oZXggJChvYmopdS1ib290LnNyZWMgJChvYmopdS1ib290LmJpbiBcCiskKG9iail1LWJvb3QuaW1nICQob2JqKXUtYm9vdC5kaXMgJChvYmopdS1ib290IFwKKyQoU1VCRElSUykgdmVyc2lvbiBnZGJ0b29scyB1cGRhdGVyIGVudiBkZXBlbmQgXAorZGVwIHRhZ3MgY3RhZ3MgZXRhZ3MgJChvYmopU3lzdGVtLm1hcDoKIAlAZWNobyAiU3lzdGVtIG5vdCBjb25maWd1cmVkIC0gc2VlIFJFQURNRSIgPiYyCiAJQCBleGl0IDEKIGVuZGlmCkBAIC0yMzMsNyArMzI4LDggQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogdW5jb25maWc6Ci0JQHJtIC1mIGluY2x1ZGUvY29uZmlnLmggaW5jbHVkZS9jb25maWcubWsgYm9hcmQvKi9jb25maWcudG1wCisJQHJtIC1mICQob2JqKWluY2x1ZGUvY29uZmlnLmggJChvYmopaW5jbHVkZS9jb25maWcubWsgXAorCQkkKG9iailib2FyZC8qL2NvbmZpZy50bXAgJChvYmopYm9hcmQvKi8qL2NvbmZpZy50bXAKIAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBQb3dlclBDCkBAIC0yNDQsMjkgKzM0MCwyOSBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBjYW5tYl9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgLWEgY2FubWIgcHBjIG1wYzV4eHggY2FubWIKKwlAJChNS0NPTkZJRykgLWEgY2FubWIgcHBjIG1wYzV4eHggY2FubWIKIAogY21pX21wYzV4eF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjNXh4IGNtaQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM1eHggY21pCiAKIFBBVElfY29uZmlnOgkJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM1eHggcGF0aSBtcGwKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjNXh4IHBhdGkgbXBsCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIE1QQzV4eHggU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBhZXZfY29uZmlnOiB1bmNvbmZpZwotCUAuL21rY29uZmlnIC1hIGFldiBwcGMgbXBjNXh4eCB0cW01MjAwCisJQCQoTUtDT05GSUcpIC1hIGFldiBwcGMgbXBjNXh4eCB0cW01MjAwCiAKIEJDMzQ1MF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgLWEgQkMzNDUwIHBwYyBtcGM1eHh4IGJjMzQ1MAorCUAkKE1LQ09ORklHKSAtYSBCQzM0NTAgcHBjIG1wYzV4eHggYmMzNDUwCiAKIGNwY2k1MjAwX2NvbmZpZzogIHVuY29uZmlnCi0JQC4vbWtjb25maWcgLWEgY3BjaTUyMDAgIHBwYyBtcGM1eHh4IGNwY2k1MjAwIGVzZAorCUAkKE1LQ09ORklHKSAtYSBjcGNpNTIwMCAgcHBjIG1wYzV4eHggY3BjaTUyMDAgZXNkCiAKIGhtaTEwMDFfY29uZmlnOiAgICAgICAgIHVuY29uZmlnCi0JQC4vbWtjb25maWcgaG1pMTAwMSBwcGMgbXBjNXh4eCBobWkxMDAxCisJQCQoTUtDT05GSUcpIGhtaTEwMDEgcHBjIG1wYzV4eHggaG1pMTAwMQogCiBMaXRlNTIwMF9jb25maWcJCQkJXAogTGl0ZTUyMDBfTE9XQk9PVF9jb25maWcJCQlcCkBAIC0yNzgsMTM3ICszNzQsMjE4IEBACiBpY2VjdWJlXzUyMDBfRERSX0xPV0JPT1RfY29uZmlnIAlcCiBpY2VjdWJlXzUyMDBfRERSX0xPV0JPT1QwOF9jb25maWcJXAogaWNlY3ViZV81MTAwX2NvbmZpZzoJCQl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBta2RpciAtcCAkKG9iailib2FyZC9pY2VjdWJlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgTE9XQk9PVF8sJEApIiBdIHx8IFwKIAkJeyBpZiBbICIkKGZpbmRzdHJpbmcgRERSLCRAKSIgXSA7IFwKLQkJCXRoZW4gZWNobyAiVEVYVF9CQVNFID0gMHhGRjgwMDAwMCIgPmJvYXJkL2ljZWN1YmUvY29uZmlnLnRtcCA7IFwKLQkJCWVsc2UgZWNobyAiVEVYVF9CQVNFID0gMHhGRjAwMDAwMCIgPmJvYXJkL2ljZWN1YmUvY29uZmlnLnRtcCA7IFwKKwkJCXRoZW4gZWNobyAiVEVYVF9CQVNFID0gMHhGRjgwMDAwMCIgPiQob2JqKWJvYXJkL2ljZWN1YmUvY29uZmlnLnRtcCA7IFwKKwkJCWVsc2UgZWNobyAiVEVYVF9CQVNFID0gMHhGRjAwMDAwMCIgPiQob2JqKWJvYXJkL2ljZWN1YmUvY29uZmlnLnRtcCA7IFwKIAkJICBmaSA7IFwKIAkJICBlY2hvICIuLi4gd2l0aCBMT1dCT09UIGNvbmZpZ3VyYXRpb24iIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBMT1dCT09UMDgsJEApIiBdIHx8IFwKLQkJeyBlY2hvICJURVhUX0JBU0UgPSAweEZGODAwMDAwIiA+Ym9hcmQvaWNlY3ViZS9jb25maWcudG1wIDsgXAorCQl7IGVjaG8gIlRFWFRfQkFTRSA9IDB4RkY4MDAwMDAiID4kKG9iailib2FyZC9pY2VjdWJlL2NvbmZpZy50bXAgOyBcCiAJCSAgZWNobyAiLi4uIHdpdGggOCBNQiBmbGFzaCBvbmx5IiA7IFwKIAkJICBlY2hvICIuLi4gd2l0aCBMT1dCT09UIGNvbmZpZ3VyYXRpb24iIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBERFIsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19NUEM1MjAwX0REUiIJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX01QQzUyMDBfRERSIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIEREUiBtZW1vcnkgcmV2aXNpb24iIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyA1MjAwLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTVBDNTIwMCIJCT4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19NUEM1MjAwIgkJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiB3aXRoIE1QQzUyMDAgcHJvY2Vzc29yIiA7IFwKIAkJfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgNTEwMCwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX01HVDUxMDAiCQk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTUdUNTEwMCIJCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gd2l0aCBNR1Q1MTAwIHByb2Nlc3NvciIgOyBcCiAJCX0KLQlALi9ta2NvbmZpZyAtYSBJY2VDdWJlIHBwYyBtcGM1eHh4IGljZWN1YmUKKwlAJChNS0NPTkZJRykgLWEgSWNlQ3ViZSBwcGMgbXBjNXh4eCBpY2VjdWJlCiAKIGlua2E0eDBfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnIGlua2E0eDAgcHBjIG1wYzV4eHggaW5rYTR4MAorCUAkKE1LQ09ORklHKSBpbmthNHgwIHBwYyBtcGM1eHh4IGlua2E0eDAKIAogbGl0ZTUyMDBiX2NvbmZpZwlcCiBsaXRlNTIwMGJfTE9XQk9PVF9jb25maWc6CXVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAotCUAgZWNobyAiI2RlZmluZSBDT05GSUdfTVBDNTIwMF9ERFIiCT4+aW5jbHVkZS9jb25maWcuaAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQG1rZGlyIC1wICQob2JqKWJvYXJkL2ljZWN1YmUKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQCBlY2hvICIjZGVmaW5lIENPTkZJR19NUEM1MjAwX0REUiIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oCiAJQCBlY2hvICIuLi4gRERSIG1lbW9yeSByZXZpc2lvbiIKLQlAIGVjaG8gIiNkZWZpbmUgQ09ORklHX01QQzUyMDAiCQk+PmluY2x1ZGUvY29uZmlnLmgKLQlAIGVjaG8gIiNkZWZpbmUgQ09ORklHX0xJVEU1MjAwQiIJPj5pbmNsdWRlL2NvbmZpZy5oCisJQCBlY2hvICIjZGVmaW5lIENPTkZJR19NUEM1MjAwIgkJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQCBlY2hvICIjZGVmaW5lIENPTkZJR19MSVRFNTIwMEIiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgTE9XQk9PVF8sJEApIiBdIHx8IFwKLQkJeyBlY2hvICJURVhUX0JBU0UgPSAweEZGMDAwMDAwIiA+Ym9hcmQvaWNlY3ViZS9jb25maWcudG1wIDsgXAorCQl7IGVjaG8gIlRFWFRfQkFTRSA9IDB4RkYwMDAwMDAiID4kKG9iailib2FyZC9pY2VjdWJlL2NvbmZpZy50bXAgOyBcCiAJCSAgZWNobyAiLi4uIHdpdGggTE9XQk9PVCBjb25maWd1cmF0aW9uIiA7IFwKIAkJfQogCUAgZWNobyAiLi4uIHdpdGggTVBDNTIwMEIgcHJvY2Vzc29yIgotCUAuL21rY29uZmlnIC1hIEljZUN1YmUgIHBwYyBtcGM1eHh4IGljZWN1YmUKKwlAJChNS0NPTkZJRykgLWEgSWNlQ3ViZSAgcHBjIG1wYzV4eHggaWNlY3ViZQogCiBtY2MyMDBfY29uZmlnCVwKLW1jYzIwMF9sb3dib290X2NvbmZpZzoJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCi0JQFsgLXogIiQoZmluZHN0cmluZyBsb3dib290XywkQCkiIF0gfHwgXAotCQl7IGVjaG8gIlRFWFRfQkFTRSA9IDB4RkMwMDAwMDAiID5ib2FyZC9tY2MyMDAvY29uZmlnLnRtcCA7IFwKLQkJICBlY2hvICIuLi4gd2l0aCBsb3dib290IGNvbmZpZ3VyYXRpb24iIDsgXAorbWNjMjAwX1NEUkFNX2NvbmZpZwlcCittY2MyMDBfaGlnaGJvb3RfY29uZmlnCVwKK21jYzIwMF9DT00xMl9jb25maWcJXAorbWNjMjAwX0NPTTEyX1NEUkFNX2NvbmZpZwlcCittY2MyMDBfQ09NMTJfaGlnaGJvb3RfY29uZmlnCVwKK21jYzIwMF9DT00xMl9oaWdoYm9vdF9TRFJBTV9jb25maWcJXAorbWNjMjAwX2hpZ2hib290X1NEUkFNX2NvbmZpZwlcCitwcnMyMDBfY29uZmlnCVwKK3ByczIwMF9ERFJfY29uZmlnCVwKK3ByczIwMF9oaWdoYm9vdF9jb25maWcJXAorcHJzMjAwX2hpZ2hib290X0REUl9jb25maWc6CXVuY29uZmlnCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAbWtkaXIgLXAgJChvYmopYm9hcmQvbWNjMjAwCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUBbIC1uICIkKGZpbmRzdHJpbmcgaGlnaGJvb3QsJEApIiBdIHx8IFwKKwkJeyBlY2hvICIuLi4gd2l0aCBsb3dib290IGNvbmZpZ3VyYXRpb24iIDsgXAogCQl9Ci0JQC4vbWtjb25maWcgbWNjMjAwIHBwYyBtcGM1eHh4IG1jYzIwMAorCUBbIC16ICIkKGZpbmRzdHJpbmcgaGlnaGJvb3QsJEApIiBdIHx8IFwKKwkJeyBlY2hvICJURVhUX0JBU0UgPSAweEZGRjAwMDAwIiA+JChvYmopYm9hcmQvbWNjMjAwL2NvbmZpZy50bXAgOyBcCisJCSAgZWNobyAiLi4uIHdpdGggaGlnaGJvb3QgY29uZmlndXJhdGlvbiIgOyBcCisJCX0KKwlAWyAtbiAiJChmaW5kc3RyaW5nIF9TRFJBTSwkQCkiIF0gfHwgXAorCQl7IGlmIFsgLW4gIiQoZmluZHN0cmluZyBtY2MyMDAsJEApIiBdOyBcCisJCSAgdGhlbiBcCisJCSAgCWVjaG8gIi4uLiB3aXRoIEREUiIgOyBcCisJCSAgZWxzZSBcCisJCQlpZiBbIC1uICIkKGZpbmRzdHJpbmcgX0REUiwkQCkiIF07XAorCQkJdGhlbiBcCisJCQkJZWNobyAiLi4uIHdpdGggRERSIiA7IFwKKwkJCWVsc2UgXAorCQkJCWVjaG8gIiNkZWZpbmUgQ09ORklHX01DQzIwMF9TRFJBTSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDtcCisJCQkJZWNobyAiLi4uIHdpdGggU0RSQU0iIDsgXAorCQkJZmk7IFwKKwkJICBmaTsgXAorCQl9CisJQFsgLXogIiQoZmluZHN0cmluZyBfU0RSQU0sJEApIiBdIHx8IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19NQ0MyMDBfU0RSQU0iCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJICBlY2hvICIuLi4gd2l0aCBTRFJBTSIgOyBcCisJCX0KKwlAWyAteiAiJChmaW5kc3RyaW5nIENPTTEyLCRAKSIgXSB8fCBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfQ09OU09MRV9DT00xMiIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgIGVjaG8gIi4uLiB3aXRoIGNvbnNvbGUgb24gQ09NMTIiIDsgXAorCQl9CisJQFsgLXogIiQoZmluZHN0cmluZyBwcnMyMDAsJEApIiBdIHx8IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19QUlMyMDAiICA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggO1wKKwkJfQorCUAkKE1LQ09ORklHKSAtbiAkQCAtYSBtY2MyMDAgcHBjIG1wYzV4eHggbWNjMjAwCiAKIG8yZG50X2NvbmZpZzoKLQlALi9ta2NvbmZpZyBvMmRudCBwcGMgbXBjNXh4eCBvMmRudAorCUAkKE1LQ09ORklHKSBvMmRudCBwcGMgbXBjNXh4eCBvMmRudAogCiBwZjUyMDBfY29uZmlnOiAgdW5jb25maWcKLQlALi9ta2NvbmZpZyBwZjUyMDAgIHBwYyBtcGM1eHh4IHBmNTIwMCBlc2QKKwlAJChNS0NPTkZJRykgcGY1MjAwICBwcGMgbXBjNXh4eCBwZjUyMDAgZXNkCiAKIFBNNTIwX2NvbmZpZyBcCiBQTTUyMF9ERFJfY29uZmlnIFwKIFBNNTIwX1JPTUJPT1RfY29uZmlnIFwKIFBNNTIwX1JPTUJPT1RfRERSX2NvbmZpZzoJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCiAJQFsgLXogIiQoZmluZHN0cmluZyBERFIsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19NUEM1MjAwX0REUiIJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX01QQzUyMDBfRERSIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIEREUiBtZW1vcnkgcmV2aXNpb24iIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBST01CT09ULCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfQk9PVF9ST00iID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19CT09UX1JPTSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiBib290aW5nIGZyb20gOC1iaXQgZmxhc2giIDsgXAogCQl9Ci0JQC4vbWtjb25maWcgLWEgUE01MjAgcHBjIG1wYzV4eHggcG01MjAKKwlAJChNS0NPTkZJRykgLWEgUE01MjAgcHBjIG1wYzV4eHggcG01MjAKIAogc21tYWNvNF9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgLWEgc21tYWNvNCBwcGMgbXBjNXh4eCB0cW01MjAwCisJQCQoTUtDT05GSUcpIC1hIHNtbWFjbzQgcHBjIG1wYzV4eHggdHFtNTIwMAogCiBzcGlldmFsX2NvbmZpZzoJdW5jb25maWcKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfQ1NfQVVUT0NPTkYiPj5pbmNsdWRlL2NvbmZpZy5oCi0JQGVjaG8gIi4uLiB3aXRoIGF1dG9tYXRpYyBDUyBjb25maWd1cmF0aW9uIgotCUAuL21rY29uZmlnIC1hIHNwaWV2YWwgcHBjIG1wYzV4eHggdHFtNTIwMAorCUAkKE1LQ09ORklHKSAtYSBzcGlldmFsIHBwYyBtcGM1eHh4IHRxbTUyMDAKKworVEI1MjAwX0JfY29uZmlnIFwKK1RCNTIwMF9jb25maWc6CXVuY29uZmlnCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAWyAteiAiJChmaW5kc3RyaW5nIF9CLCRAKSIgXSB8fCBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfVFFNNTIwMF9CIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCSAgZWNobyAiLi4uIHdpdGggTVBDNTIwMEIgcHJvY2Vzc29yIiA7IFwKKwkJfQorCUAkKE1LQ09ORklHKSAtbiAkQCAtYSBUQjUyMDAgcHBjIG1wYzV4eHggdHFtNTIwMAogCiBNSU5JNTIwMF9jb25maWcJXAogRVZBTDUyMDBfY29uZmlnCVwKIFRPUDUyMDBfY29uZmlnOgl1bmNvbmZpZwotCUAgZWNobyAiI2RlZmluZSBDT05GSUdfJChAOl9jb25maWc9KSAxIgk+aW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hIFRPUDUyMDAgcHBjIG1wYzV4eHggdG9wNTIwMCBlbWsKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUAgZWNobyAiI2RlZmluZSBDT05GSUdfJChAOl9jb25maWc9KSAxIgk+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtbiAkQCAtYSBUT1A1MjAwIHBwYyBtcGM1eHh4IHRvcDUyMDAgZW1rCiAKIFRvdGFsNTEwMF9jb25maWcJCVwKIFRvdGFsNTIwMF9jb25maWcJCVwKIFRvdGFsNTIwMF9sb3dib290X2NvbmZpZwlcCiBUb3RhbDUyMDBfUmV2Ml9jb25maWcJCVwKIFRvdGFsNTIwMF9SZXYyX2xvd2Jvb3RfY29uZmlnOgl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBta2RpciAtcCAkKG9iailib2FyZC90b3RhbDUyMDAKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCiAJQFsgLXogIiQoZmluZHN0cmluZyA1MTAwLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTUdUNTEwMCIJCT4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19NR1Q1MTAwIgkJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiB3aXRoIE1HVDUxMDAgcHJvY2Vzc29yIiA7IFwKIAkJfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgNTIwMCwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX01QQzUyMDAiCQk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTVBDNTIwMCIJCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gd2l0aCBNUEM1MjAwIHByb2Nlc3NvciIgOyBcCiAJCX0KIAlAWyAtbiAiJChmaW5kc3RyaW5nIFJldiwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX1RPVEFMNTIwMF9SRVYgMSIJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX1RPVEFMNTIwMF9SRVYgMSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiByZXZpc2lvbiAxIGJvYXJkIiA7IFwKIAkJfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgUmV2Ml8sJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19UT1RBTDUyMDBfUkVWIDIiCT4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19UT1RBTDUyMDBfUkVWIDIiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gcmV2aXNpb24gMiBib2FyZCIgOyBcCiAJCX0KIAlAWyAteiAiJChmaW5kc3RyaW5nIGxvd2Jvb3RfLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiVEVYVF9CQVNFID0gMHhGRTAwMDAwMCIgPmJvYXJkL3RvdGFsNTIwMC9jb25maWcudG1wIDsgXAorCQl7IGVjaG8gIlRFWFRfQkFTRSA9IDB4RkUwMDAwMDAiID4kKG9iailib2FyZC90b3RhbDUyMDAvY29uZmlnLnRtcCA7IFwKIAkJICBlY2hvICIuLi4gd2l0aCBsb3dib290IGNvbmZpZ3VyYXRpb24iIDsgXAogCQl9Ci0JQC4vbWtjb25maWcgLWEgVG90YWw1MjAwIHBwYyBtcGM1eHh4IHRvdGFsNTIwMAorCUAkKE1LQ09ORklHKSAtYSBUb3RhbDUyMDAgcHBjIG1wYzV4eHggdG90YWw1MjAwCiAKK2NhbTUyMDBfY29uZmlnIFwKK2ZvMzAwX2NvbmZpZyBcCitNaW5pRkFQX2NvbmZpZyBcCitUUU01MjAwU19jb25maWcgXAorVFFNNTIwMFNfSElHSEJPT1RfY29uZmlnIFwKK1RRTTUyMDBfQl9jb25maWcgXAorVFFNNTIwMF9CX0hJR0hCT09UX2NvbmZpZyBcCiBUUU01MjAwX2NvbmZpZwlcCi1UUU01MjAwX1NUSzEwMF9jb25maWcgXAotTWluaUZBUF9jb25maWc6CXVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAorVFFNNTIwMF9TVEsxMDBfY29uZmlnOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQG1rZGlyIC1wICQob2JqKWJvYXJkL3RxbTUyMDAKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQFsgLXogIiQoZmluZHN0cmluZyBjYW01MjAwLCRAKSIgXSB8fCBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfQ0FNNTIwMCIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgIGVjaG8gIiNkZWZpbmUgQ09ORklHX1RRTTUyMDBTIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCSAgZWNobyAiI2RlZmluZSBDT05GSUdfVFFNNTIwMF9CIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCSAgZWNobyAiLi4uIFRRTTUyMDBTIG9uIENhbTUyMDAiIDsgXAorCQl9CisJQFsgLXogIiQoZmluZHN0cmluZyBmbzMwMCwkQCkiIF0gfHwgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0ZPMzAwIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCSAgZWNobyAiLi4uIFRRTTUyMDAgb24gRk8zMDAiIDsgXAorCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBNaW5pRkFQLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTUlOSUZBUCIJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX01JTklGQVAiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gVFFNNTIwMF9BQyBvbiBNaW5pRkFQIiA7IFwKIAkJfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgU1RLMTAwLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfU1RLNTJYWF9SRVYxMDAiCT4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19TVEs1MlhYX1JFVjEwMCIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiBvbiBhIFNUSzUyWFguMTAwIGJhc2UgYm9hcmQiIDsgXAogCQl9Ci0JQGVjaG8gIiNkZWZpbmUgQ09ORklHX0NTX0FVVE9DT05GIj4+aW5jbHVkZS9jb25maWcuaCA7Ci0JQGVjaG8gIi4uLiB3aXRoIGF1dG9tYXRpYyBDUyBjb25maWd1cmF0aW9uIiA7Ci0JQC4vbWtjb25maWcgLWEgVFFNNTIwMCBwcGMgbXBjNXh4eCB0cW01MjAwCisJQFsgLXogIiQoZmluZHN0cmluZyBUUU01MjAwX0IsJEApIiBdIHx8IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19UUU01MjAwX0IiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJfQorCUBbIC16ICIkKGZpbmRzdHJpbmcgVFFNNTIwMFMsJEApIiBdIHx8IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19UUU01MjAwUyIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgIGVjaG8gIiNkZWZpbmUgQ09ORklHX1RRTTUyMDBfQiIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl9CisJQFsgLXogIiQoZmluZHN0cmluZyBISUdIQk9PVCwkQCkiIF0gfHwgXAorCQl7IGVjaG8gIlRFWFRfQkFTRSA9IDB4RkZGMDAwMDAiID4kKG9iailib2FyZC90cW01MjAwL2NvbmZpZy50bXAgOyBcCisJCX0KKwlAJChNS0NPTkZJRykgLW4gJEAgLWEgVFFNNTIwMCBwcGMgbXBjNXh4eCB0cW01MjAwCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIE1QQzh4eCBTeXN0ZW1zCkBAIC00MTgsOSArNTk1LDEwIEBACiBBZGRlcjg3eF9jb25maWcgXAogQWRkZXJJSV9jb25maWcgIFwKIAk6CQl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJJChpZiAkKGZpbmRzdHJpbmcgQWRkZXJJSSwkQCksIFwKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfTVBDODUyVCIgPiBpbmNsdWRlL2NvbmZpZy5oKQotCUAuL21rY29uZmlnIC1hIEFkZGVyIHBwYyBtcGM4eHggYWRkZXIKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfTVBDODUyVCIgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oKQorCUAkKE1LQ09ORklHKSAtYSBBZGRlciBwcGMgbXBjOHh4IGFkZGVyCiAKIEFEUzg2MF9jb25maWcgICAgIFwKIEZBRFM4MjNfY29uZmlnICAgIFwKQEAgLTQyOCwxNTQgKzYwNiwxNjAgQEAKIE1QQzg2eEFEU19jb25maWcgIFwKIE1QQzg4NUFEU19jb25maWcgIFwKIEZBRFM4NjBUX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggZmFkcworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggZmFkcwogCiBBTVg4NjBfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggYW14ODYwIHdlc3RlbAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggYW14ODYwIHdlc3RlbAogCiBjMm1vbl9jb25maWc6CQl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBjMm1vbgorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggYzJtb24KIAogQ0NNX2NvbmZpZzoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IENDTSBzaWVtZW5zCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBDQ00gc2llbWVucwogCiBjb2dlbnRfbXBjOHh4X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggY29nZW50CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBjb2dlbnQKIAogRUxQVDg2MF9jb25maWc6CQl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBlbHB0ODYwIExFT1gKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGVscHQ4NjAgTEVPWAogCiBFUDg4eF9jb25maWc6CQl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBlcDg4eAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggZXA4OHgKIAogRVNURUVNMTkyRV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGVzdGVlbTE5MmUKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGVzdGVlbTE5MmUKIAogRVRYMDk0X2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGV0eDA5NAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggZXR4MDk0CiAKIEZMQUdBRE1fY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBmbGFnYWRtCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBmbGFnYWRtCiAKIHh0cmFjdF9HRU44NjBUID0gJChzdWJzdCBfU0MsLCQoc3Vic3QgX2NvbmZpZywsJDEpKQogCiBHRU44NjBUX1NDX2NvbmZpZwlcCiBHRU44NjBUX2NvbmZpZzogdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCiAJQFsgLXogIiQoZmluZHN0cmluZyBfU0MsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19TQyIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX1NDIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiV2l0aCByZWR1Y2VkIEgvVyBmZWF0dXJlIHNldCAoU0MpLi4uIiA7IFwKIAkJfQotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfR0VOODYwVCwkQCkgcHBjIG1wYzh4eCBnZW44NjB0CisJQCQoTUtDT05GSUcpIC1hICQoY2FsbCB4dHJhY3RfR0VOODYwVCwkQCkgcHBjIG1wYzh4eCBnZW44NjB0CiAKIEdFTklFVFZfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBnZW5pZXR2CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBnZW5pZXR2CiAKIEdUSF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGd0aAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggZ3RoCiAKIGhlcm1lc19jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBoZXJtZXMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGhlcm1lcwogCiBITUkxMF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCB0cW04eHgKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHRxbTh4eAogCiBJQUQyMTBfY29uZmlnOiB1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBJQUQyMTAgc2llbWVucworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggSUFEMjEwIHNpZW1lbnMKIAogeHRyYWN0X0lDVTg2MiA9ICQoc3Vic3QgXzEwME1IeiwsJChzdWJzdCBfY29uZmlnLCwkMSkpCiAKIElDVTg2Ml8xMDBNSHpfY29uZmlnCVwKIElDVTg2Ml9jb25maWc6IHVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgXzEwME1IeiwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHXzEwME1IeiIJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHXzEwME1IeiIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiB3aXRoIDEwME1IeiBzeXN0ZW0gY2xvY2siIDsgXAogCQl9Ci0JQC4vbWtjb25maWcgLWEgJChjYWxsIHh0cmFjdF9JQ1U4NjIsJEApIHBwYyBtcGM4eHggaWN1ODYyCisJQCQoTUtDT05GSUcpIC1hICQoY2FsbCB4dHJhY3RfSUNVODYyLCRAKSBwcGMgbXBjOHh4IGljdTg2MgogCiBJUDg2MF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBpcDg2MAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggaXA4NjAKIAogSVZNTDI0XzI1Nl9jb25maWcgXAogSVZNTDI0XzEyOF9jb25maWcgXAogSVZNTDI0X2NvbmZpZzoJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCiAJQFsgLXogIiQoZmluZHN0cmluZyBJVk1MMjRfY29uZmlnLCRAKSIgXSB8fCBcCi0JCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0lWTUwyNF8xNk0iCT4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfSVZNTDI0XzE2TSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgSVZNTDI0XzEyOF9jb25maWcsJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfSVZNTDI0XzMyTSIJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19JVk1MMjRfMzJNIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSB9CiAJQFsgLXogIiQoZmluZHN0cmluZyBJVk1MMjRfMjU2X2NvbmZpZywkQCkiIF0gfHwgXAotCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19JVk1MMjRfNjRNIgk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0lWTUwyNF82NE0iCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJIH0KLQlALi9ta2NvbmZpZyAtYSBJVk1MMjQgcHBjIG1wYzh4eCBpdm0KKwlAJChNS0NPTkZJRykgLWEgSVZNTDI0IHBwYyBtcGM4eHggaXZtCiAKIElWTVM4XzI1Nl9jb25maWcgXAogSVZNUzhfMTI4X2NvbmZpZyBcCiBJVk1TOF9jb25maWc6CXVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgSVZNUzhfY29uZmlnLCRAKSIgXSB8fCBcCi0JCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0lWTVM4XzE2TSIJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19JVk1TOF8xNk0iCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJIH0KIAlAWyAteiAiJChmaW5kc3RyaW5nIElWTVM4XzEyOF9jb25maWcsJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfSVZNUzhfMzJNIgk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0lWTVM4XzMyTSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgSVZNUzhfMjU2X2NvbmZpZywkQCkiIF0gfHwgXAotCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19JVk1TOF82NE0iCT4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfSVZNUzhfNjRNIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSB9Ci0JQC4vbWtjb25maWcgLWEgSVZNUzggcHBjIG1wYzh4eCBpdm0KKwlAJChNS0NPTkZJRykgLWEgSVZNUzggcHBjIG1wYzh4eCBpdm0KIAogS1VQNEtfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHgga3VwNGsga3VwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBrdXA0ayBrdXAKIAogS1VQNFhfY29uZmlnICAgIDogICAgICAgdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHgga3VwNHgga3VwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBrdXA0eCBrdXAKIAogTEFOVEVDX2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGxhbnRlYworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggbGFudGVjCiAKIGx3bW9uX2NvbmZpZzoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IGx3bW9uCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBsd21vbgogCiBNQlhfY29uZmlnCVwKIE1CWDg2MFRfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBtYng4eHgKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IG1ieDh4eAogCiBNSFBDX2NvbmZpZzoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IG1ocGMgZWx0ZWMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IG1ocGMgZWx0ZWMKIAogTVZTMV9jb25maWcgOgkJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggbXZzMQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggbXZzMQogCiB4dHJhY3RfTkVUVklBID0gJChzdWJzdCBfVjIsLCQoc3Vic3QgX2NvbmZpZywsJDEpKQogCiBORVRWSUFfVjJfY29uZmlnIFwKIE5FVFZJQV9jb25maWc6CQl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUAgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKIAlAWyAteiAiJChmaW5kc3RyaW5nIE5FVFZJQV9jb25maWcsJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUVklBX1ZFUlNJT04gMSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19ORVRWSUFfVkVSU0lPTiAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIFZlcnNpb24gMSIgOyBcCiAJCSB9CiAJQFsgLXogIiQoZmluZHN0cmluZyBORVRWSUFfVjJfY29uZmlnLCRAKSIgXSB8fCBcCi0JCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05FVFZJQV9WRVJTSU9OIDIiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUVklBX1ZFUlNJT04gMiIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiBWZXJzaW9uIDIiIDsgXAogCQkgfQotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfTkVUVklBLCRAKSBwcGMgbXBjOHh4IG5ldHZpYQorCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0X05FVFZJQSwkQCkgcHBjIG1wYzh4eCBuZXR2aWEKIAogeHRyYWN0X05FVFBIT05FID0gJChzdWJzdCBfVjIsLCQoc3Vic3QgX2NvbmZpZywsJDEpKQogCiBORVRQSE9ORV9WMl9jb25maWcgXAogTkVUUEhPTkVfY29uZmlnOgl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUAgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKIAlAWyAteiAiJChmaW5kc3RyaW5nIE5FVFBIT05FX2NvbmZpZywkQCkiIF0gfHwgXAotCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19ORVRQSE9ORV9WRVJTSU9OIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUUEhPTkVfVkVSU0lPTiAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSB9CiAJQFsgLXogIiQoZmluZHN0cmluZyBORVRQSE9ORV9WMl9jb25maWcsJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUUEhPTkVfVkVSU0lPTiAyIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05FVFBIT05FX1ZFUlNJT04gMiIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfTkVUUEhPTkUsJEApIHBwYyBtcGM4eHggbmV0cGhvbmUKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF9ORVRQSE9ORSwkQCkgcHBjIG1wYzh4eCBuZXRwaG9uZQogCiB4dHJhY3RfTkVUVEEgPSAkKHN1YnN0IF9TV0FQSE9PSywsJChzdWJzdCBfNjQxMiwsJChzdWJzdCBfSVNETiwsJChzdWJzdCBfY29uZmlnLCwkMSkpKSkKIApAQCAtNTg3LDg1ICs3NzEsODggQEAKIE5FVFRBX0lTRE5fY29uZmlnIFwKIE5FVFRBXzY0MTJfY29uZmlnIFwKIE5FVFRBX2NvbmZpZzoJCXVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgSVNETl8sJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUVEFfSVNETiAxIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05FVFRBX0lTRE4gMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQogCUBbIC1uICIkKGZpbmRzdHJpbmcgSVNETl8sJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI3VuZGVmIENPTkZJR19ORVRUQV9JU0ROIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCSB7IGVjaG8gIiN1bmRlZiBDT05GSUdfTkVUVEFfSVNETiIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgNjQxMl8sJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUVEFfNjQxMiAxIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05FVFRBXzY0MTIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQogCUBbIC1uICIkKGZpbmRzdHJpbmcgNjQxMl8sJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI3VuZGVmIENPTkZJR19ORVRUQV82NDEyIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCSB7IGVjaG8gIiN1bmRlZiBDT05GSUdfTkVUVEFfNjQxMiIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgU1dBUEhPT0tfLCRAKSIgXSB8fCBcCi0JCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05FVFRBX1NXQVBIT09LIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUVEFfU1dBUEhPT0sgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQogCUBbIC1uICIkKGZpbmRzdHJpbmcgU1dBUEhPT0tfLCRAKSIgXSB8fCBcCi0JCSB7IGVjaG8gIiN1bmRlZiBDT05GSUdfTkVUVEFfU1dBUEhPT0siID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJIHsgZWNobyAiI3VuZGVmIENPTkZJR19ORVRUQV9TV0FQSE9PSyIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfTkVUVEEsJEApIHBwYyBtcGM4eHggbmV0dGEKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF9ORVRUQSwkQCkgcHBjIG1wYzh4eCBuZXR0YQogCiB4dHJhY3RfTkVUVEEyID0gJChzdWJzdCBfVjIsLCQoc3Vic3QgX2NvbmZpZywsJDEpKQogCiBORVRUQTJfVjJfY29uZmlnIFwKIE5FVFRBMl9jb25maWc6CQl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUAgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKIAlAWyAteiAiJChmaW5kc3RyaW5nIE5FVFRBMl9jb25maWcsJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUVEEyX1ZFUlNJT04gMSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19ORVRUQTJfVkVSU0lPTiAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSB9CiAJQFsgLXogIiQoZmluZHN0cmluZyBORVRUQTJfVjJfY29uZmlnLCRAKSIgXSB8fCBcCi0JCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05FVFRBMl9WRVJTSU9OIDIiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfTkVUVEEyX1ZFUlNJT04gMiIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfTkVUVEEyLCRAKSBwcGMgbXBjOHh4IG5ldHRhMgorCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0X05FVFRBMiwkQCkgcHBjIG1wYzh4eCBuZXR0YTIKIAogTkM2NTBfUmV2MV9jb25maWcgXAogTkM2NTBfUmV2Ml9jb25maWcgXAogQ1A4NTBfY29uZmlnOgl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUAgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKIAlAWyAteiAiJChmaW5kc3RyaW5nIENQODUwLCRAKSIgXSB8fCBcCi0JCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0NQODUwIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKLQkJICAgZWNobyAiI2RlZmluZSBDT05GSUdfSURTODUyX1JFVjIgMSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19DUDg1MCAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCSAgIGVjaG8gIiNkZWZpbmUgQ09ORklHX0lEUzg1Ml9SRVYyIDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJIH0KIAlAWyAteiAiJChmaW5kc3RyaW5nIFJldjEsJEApIiBdIHx8IFwKLQkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfSURTODUyX1JFVjEgMSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgeyBlY2hvICIjZGVmaW5lIENPTkZJR19JRFM4NTJfUkVWMSAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSB9CiAJQFsgLXogIiQoZmluZHN0cmluZyBSZXYyLCRAKSIgXSB8fCBcCi0JCSB7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0lEUzg1Ml9SRVYyIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJIHsgZWNobyAiI2RlZmluZSBDT05GSUdfSURTODUyX1JFVjIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgfQotCUAuL21rY29uZmlnIC1hIE5DNjUwIHBwYyBtcGM4eHggbmM2NTAKKwlAJChNS0NPTkZJRykgLWEgTkM2NTAgcHBjIG1wYzh4eCBuYzY1MAogCiBOWDgyM19jb25maWc6CQl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBueDgyMworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggbng4MjMKIAogcGN1X2VfY29uZmlnOgkJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggcGN1X2Ugc2llbWVucworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggcGN1X2Ugc2llbWVucwogCiBRUzg1MF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHFzODUwIHNubWMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHFzODUwIHNubWMKIAogUVM4MjNfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBxczg1MCBzbm1jCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBxczg1MCBzbm1jCiAKIFFTODYwVF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHFzODYwdCBzbm1jCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBxczg2MHQgc25tYwogCiBxdWFudHVtX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggcXVhbnR1bQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggcXVhbnR1bQogCiBSMzYwTVBJX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggcjM2MG1waQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggcjM2MG1waQogCiBSQkM4MjNfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCByYmM4MjMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHJiYzgyMwogCiBSUFhDbGFzc2ljX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggUlBYQ2xhc3NpYworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggUlBYQ2xhc3NpYwogCiBSUFhsaXRlX2NvbmZpZzoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IFJQWGxpdGUKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IFJQWGxpdGUKIAogUlBYbGl0ZV9EV182NF9jb25maWcgIAkJXAogUlBYbGl0ZV9EV19MQ0RfY29uZmlnIAkJXApAQCAtNjc1LDUyICs4NjIsNTYgQEAKIFJQWGxpdGVfRFdfTlZSQU1fTENEX2NvbmZpZwlcCiBSUFhsaXRlX0RXX05WUkFNXzY0X0xDRF9jb25maWcgIFwKIFJQWGxpdGVfRFdfY29uZmlnOiAgICAgICAgIHVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgXzY0LCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBSUFhsaXRlXzY0TUh6IgkJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgUlBYbGl0ZV82NE1IeiIJCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gd2l0aCA2NE1IeiBzeXN0ZW0gY2xvY2sgLi4uIjsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBfTENELCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTENEIiAgICAgICAgICAJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAotCQkgIGVjaG8gIiNkZWZpbmUgQ09ORklHX05FQ19OTDY0NDhCQzIwIgk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTENEIiAgICAgICAgICAJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgIGVjaG8gIiNkZWZpbmUgQ09ORklHX05FQ19OTDY0NDhCQzIwIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIHdpdGggTENEIGRpc3BsYXkgLi4uIjsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBfTlZSQU0sJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lICBDRkdfRU5WX0lTX0lOX05WUkFNIiAJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgIENGR19FTlZfSVNfSU5fTlZSQU0iIAk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIHdpdGggRU5WIGluIE5WUkFNIC4uLiI7IFwKIAkJfQotCUAuL21rY29uZmlnIC1hIFJQWGxpdGVfRFcgcHBjIG1wYzh4eCBSUFhsaXRlX2R3CisJQCQoTUtDT05GSUcpIC1hIFJQWGxpdGVfRFcgcHBjIG1wYzh4eCBSUFhsaXRlX2R3CiAKIHJtdV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHJtdQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggcm11CiAKIFJSdmlzaW9uX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggUlJ2aXNpb24KKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IFJSdmlzaW9uCiAKIFJSdmlzaW9uX0xDRF9jb25maWc6CXVuY29uZmlnCi0JQGVjaG8gIiNkZWZpbmUgQ09ORklHX0xDRCIgPmluY2x1ZGUvY29uZmlnLmgKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfU0hBUlBfTFExMDRWN0RTMDEiID4+aW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hIFJSdmlzaW9uIHBwYyBtcGM4eHggUlJ2aXNpb24KKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBlY2hvICIjZGVmaW5lIENPTkZJR19MQ0QiID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX1NIQVJQX0xRMTA0VjdEUzAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAJChNS0NPTkZJRykgLWEgUlJ2aXNpb24gcHBjIG1wYzh4eCBSUnZpc2lvbgogCiBTTTg1MF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCB0cW04eHgKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHRxbTh4eAorCitzcGMxOTIwX2NvbmZpZzoKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHNwYzE5MjAKIAogU1BEODIzVFNfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBzcGQ4eHgKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHNwZDh4eAogCiBzdHh4dGNfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBzdHh4dGMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHN0eHh0YwogCiBzdm1fc2M4eHhfY29uZmlnOgl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggc3ZtX3NjOHh4CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBzdm1fc2M4eHgKIAogU1hOSTg1NVRfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBzaXhuZXQKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHNpeG5ldAogCiAjIEVNSyBNUEM4eHggYmFzZWQgbW9kdWxlcwogVE9QODYwX2NvbmZpZzoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHRvcDg2MCBlbWsKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHRvcDg2MCBlbWsKIAogIyBQbGF5IHNvbWUgdHJpY2tzIGZvciBjb25maWd1cmF0aW9uIHNlbGVjdGlvbgogIyBPbmx5IDg1NSBhbmQgODYwIGJvYXJkcyBtYXkgY29tZSB3aXRoIEZFQwpAQCAtNzQyLDMyICs5MzMsMzcgQEAKIFRRTTg2ME1fY29uZmlnCQlcCiBUUU04NjJNX2NvbmZpZwkJXAogVFFNODY2TV9jb25maWcJCVwKK1RRTTg4NURfY29uZmlnCQlcCiB2aXJ0bGFiMl9jb25maWc6CXVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgX0xDRCwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0xDRCIJCT4+aW5jbHVkZS9jb25maWcuaCA7IFwKLQkJICBlY2hvICIjZGVmaW5lIENPTkZJR19ORUNfTkw2NDQ4QkMyMCIJPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0xDRCIJCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJICBlY2hvICIjZGVmaW5lIENPTkZJR19ORUNfTkw2NDQ4QkMyMCIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiB3aXRoIExDRCBkaXNwbGF5IiA7IFwKIAkJfQotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfOHh4LCRAKSBwcGMgbXBjOHh4IHRxbTh4eAorCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0Xzh4eCwkQCkgcHBjIG1wYzh4eCB0cW04eHgKIAogVFRUZWNoX2NvbmZpZzoJdW5jb25maWcKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfTENEIiA+aW5jbHVkZS9jb25maWcuaAotCUBlY2hvICIjZGVmaW5lIENPTkZJR19TSEFSUF9MUTEwNFY3RFMwMSIgPj5pbmNsdWRlL2NvbmZpZy5oCi0JQC4vbWtjb25maWcgLWEgVFFNODIzTCBwcGMgbXBjOHh4IHRxbTh4eAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX0xDRCIgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfU0hBUlBfTFExMDRWN0RTMDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtYSBUUU04MjNMIHBwYyBtcGM4eHggdHFtOHh4CiAKIHVjMTAwX2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHVjMTAwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCB1YzEwMAogCiB2MzdfY29uZmlnOgl1bmNvbmZpZwotCUBlY2hvICIjZGVmaW5lIENPTkZJR19MQ0QiID5pbmNsdWRlL2NvbmZpZy5oCi0JQGVjaG8gIiNkZWZpbmUgQ09ORklHX1NIQVJQX0xRMDg0VjFERzIxIiA+PmluY2x1ZGUvY29uZmlnLmgKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggdjM3CisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfTENEIiA+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUBlY2hvICIjZGVmaW5lIENPTkZJR19TSEFSUF9MUTA4NFYxREcyMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCB2MzcKIAogd3RrX2NvbmZpZzoJdW5jb25maWcKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfTENEIiA+aW5jbHVkZS9jb25maWcuaAotCUBlY2hvICIjZGVmaW5lIENPTkZJR19TSEFSUF9MUTA2NVQ5RFI1MVUiID4+aW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hIFRRTTgyM0wgcHBjIG1wYzh4eCB0cW04eHgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBlY2hvICIjZGVmaW5lIENPTkZJR19MQ0QiID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX1NIQVJQX0xRMDY1VDlEUjUxVSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQCQoTUtDT05GSUcpIC1hIFRRTTgyM0wgcHBjIG1wYzh4eCB0cW04eHgKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgUFBDNHh4IFN5c3RlbXMKQEAgLTc3NSwxNDYgKzk3MSwxNDggQEAKIHh0cmFjdF80eHggPSAkKHN1YnN0IF8yNSwsJChzdWJzdCBfMzMsLCQoc3Vic3QgX0JBLCwkKHN1YnN0IF9NRSwsJChzdWJzdCBfSEksLCQoc3Vic3QgX2NvbmZpZywsJDEpKSkpKSkKIAogQURDSU9QX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYWRjaW9wIGVzZAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYWRjaW9wIGVzZAogCiBBUDEwMDBfY29uZmlnOnVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGFwMTAwMCBhbWlyaXgKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGFwMTAwMCBhbWlyaXgKIAogQVBDNDA1X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYXBjNDA1IGVzZAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYXBjNDA1IGVzZAogCiBBUjQwNV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGFyNDA1IGVzZAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYXI0MDUgZXNkCiAKIEFTSDQwNV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGFzaDQwNSBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGFzaDQwNSBlc2QKIAogYmFtYm9vX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYmFtYm9vIGFtY2MKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGJhbWJvbyBhbWNjCiAKIGJ1YmluZ2FfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBidWJpbmdhIGFtY2MKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGJ1YmluZ2EgYW1jYwogCiBDQU5CVF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGNhbmJ0IGVzZAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggY2FuYnQgZXNkCiAKIENBVGNlbnRlcl9jb25maWcJXAogQ0FUY2VudGVyXzI1X2NvbmZpZwlcCiBDQVRjZW50ZXJfMzNfY29uZmlnOgl1bmNvbmZpZwotCUAgZWNobyAiLyogQ0FUY2VudGVyIHVzZXMgUFBDaGFtZWxlb24gTW9kZWwgTUUgKi8iICA+IGluY2x1ZGUvY29uZmlnLmgKLQlAIGVjaG8gIiNkZWZpbmUgQ09ORklHX1BQQ0hBTUVMRU9OX01PRFVMRV9NT0RFTCAxIiA+PiBpbmNsdWRlL2NvbmZpZy5oCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAIGVjaG8gIi8qIENBVGNlbnRlciB1c2VzIFBQQ2hhbWVsZW9uIE1vZGVsIE1FICovIiAgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQCBlY2hvICIjZGVmaW5lIENPTkZJR19QUENIQU1FTEVPTl9NT0RVTEVfTU9ERUwgMSIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgXzI1LCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfUFBDSEFNRUxFT05fQ0xLXzI1IiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfUFBDSEFNRUxFT05fQ0xLXzI1IiA+PiAkKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIlN5c0NsayA9IDI1TUh6IiA7IFwKIAkJfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgXzMzLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfUFBDSEFNRUxFT05fQ0xLXzMzIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfUFBDSEFNRUxFT05fQ0xLXzMzIiA+PiAkKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIlN5c0NsayA9IDMzTUh6IiA7IFwKIAkJfQotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfNHh4LCRAKSBwcGMgcHBjNHh4IFBQQ2hhbWVsZW9uRVZCIGRhdmUKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF80eHgsJEApIHBwYyBwcGM0eHggUFBDaGFtZWxlb25FVkIgZGF2ZQogCiBDUENJMkRQX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggY3BjaTJkcCBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGNwY2kyZHAgZXNkCiAKIENQQ0k0MDVfY29uZmlnCVwKIENQQ0k0MDUyX2NvbmZpZwlcCiBDUENJNDA1RFRfY29uZmlnCVwKIENQQ0k0MDVBQl9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGNwY2k0MDUgZXNkCi0JQGVjaG8gIkJPQVJEX1JFVklTSU9OID0gJChAOl9jb25maWc9KSIJPj5pbmNsdWRlL2NvbmZpZy5taworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggY3BjaTQwNSBlc2QKKwlAZWNobyAiQk9BUkRfUkVWSVNJT04gPSAkKEA6X2NvbmZpZz0pIgk+PiAkKG9iailpbmNsdWRlL2NvbmZpZy5tawogCiBDUENJNDQwX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggY3BjaTQ0MCBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGNwY2k0NDAgZXNkCiAKIENQQ0lJU0VSNF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGNwY2lpc2VyNCBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGNwY2lpc2VyNCBlc2QKIAogQ1JBWUwxX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggTDEgY3JheQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggTDEgY3JheQogCiBjc2IyNzJfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBjc2IyNzIKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGNzYjI3MgogCiBjc2I0NzJfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBjc2I0NzIKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGNzYjQ3MgogCiBEQVNBX1NJTV9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGRhc2Ffc2ltIGVzZAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggZGFzYV9zaW0gZXNkCiAKIERQNDA1X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggZHA0MDUgZXNkCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBkcDQwNSBlc2QKIAogRFU0MDVfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBkdTQwNSBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGR1NDA1IGVzZAogCiBlYm9ueV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGVib255IGFtY2MKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGVib255IGFtY2MKIAogRVJJQ19jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGVyaWMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGVyaWMKIAogRVhCSVRHRU5fY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBleGJpdGdlbgorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggZXhiaXRnZW4KIAogRzIwMDBfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBnMjAwMAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggZzIwMDAKIAogSEg0MDVfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBoaDQwNSBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGhoNDA1IGVzZAogCiBIVUI0MDVfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBodWI0MDUgZXNkCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBodWI0MDUgZXNkCiAKIEpTRV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGpzZQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHgganNlCiAKIEtBUkVGX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHgga2FyZWYgc2FuZGJ1cnN0CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBrYXJlZiBzYW5kYnVyc3QKIAogbHVhbl9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IGx1YW4gYW1jYworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggbHVhbiBhbWNjCiAKIE1FVFJPQk9YX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggbWV0cm9ib3ggc2FuZGJ1cnN0CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBtZXRyb2JveCBzYW5kYnVyc3QKIAogTUlQNDA1X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggbWlwNDA1IG1wbAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggbWlwNDA1IG1wbAogCiBNSVA0MDVUX2NvbmZpZzoJdW5jb25maWcKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfTUlQNDA1VCIgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBlY2hvICIjZGVmaW5lIENPTkZJR19NSVA0MDVUIiA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBlY2hvICJFbmFibGUgc3Vic2V0IGNvbmZpZyBmb3IgTUlQNDA1VCIKLQlALi9ta2NvbmZpZyAtYSBNSVA0MDUgcHBjIHBwYzR4eCBtaXA0MDUgbXBsCisJQCQoTUtDT05GSUcpIC1hIE1JUDQwNSBwcGMgcHBjNHh4IG1pcDQwNSBtcGwKIAogTUwyX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggbWwyCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBtbDIKIAogbWwzMDBfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBtbDMwMCB4aWxpbngKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IG1sMzAwIHhpbGlueAogCiBvY290ZWFfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBvY290ZWEgYW1jYworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggb2NvdGVhIGFtY2MKIAogT0NSVENfY29uZmlnCQlcCiBPUlNHX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggb2NydGMgZXNkCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBvY3J0YyBlc2QKIAogcDNwNDQwX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggcDNwNDQwIHByb2RyaXZlCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBwM3A0NDAgcHJvZHJpdmUKIAogUENJNDA1X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggcGNpNDA1IGVzZAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggcGNpNDA1IGVzZAogCiBwY3M0NDBlcF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHBjczQ0MGVwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBwY3M0NDBlcAogCiBQSVA0MDVfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBwaXA0MDUgbXBsCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBwaXA0MDUgbXBsCiAKIFBMVTQwNV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHBsdTQwNSBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHBsdTQwNSBlc2QKIAogUE1DNDA1X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggcG1jNDA1IGVzZAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggcG1jNDA1IGVzZAogCiBQUENoYW1lbGVvbkVWQl9jb25maWcJCVwKIFBQQ2hhbWVsZW9uRVZCX0JBXzI1X2NvbmZpZwlcCkBAIC05MjMsNjMgKzExMjEsNzggQEAKIFBQQ2hhbWVsZW9uRVZCX0JBXzMzX2NvbmZpZwlcCiBQUENoYW1lbGVvbkVWQl9NRV8zM19jb25maWcJXAogUFBDaGFtZWxlb25FVkJfSElfMzNfY29uZmlnOgl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUAgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKIAlAWyAteiAiJChmaW5kc3RyaW5nIEVWQl9CQSwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX1BQQ0hBTUVMRU9OX01PRFVMRV9NT0RFTCAwIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfUFBDSEFNRUxFT05fTU9EVUxFX01PREVMIDAiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gQkFTSUMgbW9kZWwiIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBFVkJfTUUsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19QUENIQU1FTEVPTl9NT0RVTEVfTU9ERUwgMSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX1BQQ0hBTUVMRU9OX01PRFVMRV9NT0RFTCAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIE1FRElVTSBtb2RlbCIgOyBcCiAJCX0KIAlAWyAteiAiJChmaW5kc3RyaW5nIEVWQl9ISSwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX1BQQ0hBTUVMRU9OX01PRFVMRV9NT0RFTCAyIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfUFBDSEFNRUxFT05fTU9EVUxFX01PREVMIDIiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gSElHSC1FTkQgbW9kZWwiIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBfMjUsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19QUENIQU1FTEVPTl9DTEtfMjUiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19QUENIQU1FTEVPTl9DTEtfMjUiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICJTeXNDbGsgPSAyNU1IeiIgOyBcCiAJCX0KIAlAWyAteiAiJChmaW5kc3RyaW5nIF8zMywkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX1BQQ0hBTUVMRU9OX0NMS18zMyIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX1BQQ0hBTUVMRU9OX0NMS18zMyIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIlN5c0NsayA9IDMzTUh6IiA7IFwKIAkJfQotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3RfNHh4LCRAKSBwcGMgcHBjNHh4IFBQQ2hhbWVsZW9uRVZCIGRhdmUKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF80eHgsJEApIHBwYyBwcGM0eHggUFBDaGFtZWxlb25FVkIgZGF2ZQogCiBzYmM0MDVfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBzYmM0MDUKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHNiYzQwNQorCitzZXF1b2lhX2NvbmZpZzoJdW5jb25maWcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHNlcXVvaWEgYW1jYworCitzZXF1b2lhX25hbmRfY29uZmlnOgl1bmNvbmZpZworCUBsbiAtcyBib2FyZC9hbWNjL3NlcXVvaWEvTWFrZWZpbGUgbmFuZF9zcGwvTWFrZWZpbGUKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfTkFORF9VX0JPT1QiID5pbmNsdWRlL2NvbmZpZy5oCisJQGVjaG8gIkNvbXBpbGUgTkFORCBib290IGltYWdlIGZvciBzZXF1b2lhIgorCUAkKE1LQ09ORklHKSAtYSBzZXF1b2lhIHBwYyBwcGM0eHggc2VxdW9pYSBhbWNjCisJQGVjaG8gIlRFWFRfQkFTRSA9IDB4MDEwMDAwMDAiID5ib2FyZC9hbWNjL3NlcXVvaWEvY29uZmlnLnRtcAorCUBlY2hvICJDT05GSUdfTkFORF9VX0JPT1QgPSB5IiA+PiBpbmNsdWRlL2NvbmZpZy5tawogCiBzeWNhbW9yZV9jb25maWc6CXVuY29uZmlnCiAJQGVjaG8gIkNvbmZpZ3VyaW5nIGZvciBzeWNhbW9yZSBib2FyZCBhcyBzdWJzZXQgb2Ygd2FsbnV0Li4uIgotCUAuL21rY29uZmlnIC1hIHdhbG51dCBwcGMgcHBjNHh4IHdhbG51dCBhbWNjCisJQCQoTUtDT05GSUcpIC1hIHdhbG51dCBwcGMgcHBjNHh4IHdhbG51dCBhbWNjCiAKIFZPSDQwNV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHZvaDQwNSBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHZvaDQwNSBlc2QKIAogVk9NNDA1X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggdm9tNDA1IGVzZAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggdm9tNDA1IGVzZAogCiBDTVM3MDBfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBjbXM3MDAgZXNkCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBjbXM3MDAgZXNkCiAKIFc3T0xNQ19jb25maWcJXAogVzdPTE1HX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggdzdvCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCB3N28KIAogd2FsbnV0X2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggd2FsbnV0IGFtY2MKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHdhbG51dCBhbWNjCiAKIFdVSDQwNV9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHd1aDQwNSBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgcHBjNHh4IHd1aDQwNSBlc2QKIAogWFBFRElURTFLX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggeHBlZGl0ZTFrCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCB4cGVkaXRlMWsKIAogeW9zZW1pdGVfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCB5b3NlbWl0ZSBhbWNjCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCB5b3NlbWl0ZSBhbWNjCiAKIHllbGxvd3N0b25lX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggeWVsbG93c3RvbmUgYW1jYworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggeWVsbG93c3RvbmUgYW1jYworCit5dWNjYV9jb25maWc6CXVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCB5dWNjYSBhbWNjCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIE1QQzgyMjAgU3lzdGVtcwpAQCAtOTg3LDEwICsxMjAwLDEwIEBACiAKIEFsYXNrYTgyMjBfY29uZmlnCVwKIFl1a29uODIyMF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODIyMCBhbGFza2EKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODIyMCBhbGFza2EKIAogc29yY2VyeV9jb25maWc6CQl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyMjAgc29yY2VyeQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjIwIHNvcmNlcnkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTVBDODI0eCBTeXN0ZW1zCkBAIC05OTgsMTggKzEyMTEsMTggQEAKIHh0cmFjdF84Mnh4ID0gJChzdWJzdCBfQklHRkxBU0gsLCQoc3Vic3QgX1JPTUJPT1QsLCQoc3Vic3QgX0wyLCwkKHN1YnN0IF8yNjZNSHosLCQoc3Vic3QgXzMwME1IeiwsJChzdWJzdCBfY29uZmlnLCwkMSkpKSkpKQogCiBBMzAwMF9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBhMzAwMAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IGEzMDAwCiAKIGJhcmNvX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IGJhcmNvCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggYmFyY28KIAogQk1XX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IGJtdworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IGJtdwogCiBDUEM0NV9jb25maWcJXAogQ1BDNDVfUk9NQk9PVF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChjYWxsIHh0cmFjdF84Mnh4LCRAKSBwcGMgbXBjODI0eCBjcGM0NQotCUBjZCAuL2luY2x1ZGUgOwkJCQlcCisJQCQoTUtDT05GSUcpICQoY2FsbCB4dHJhY3RfODJ4eCwkQCkgcHBjIG1wYzgyNHggY3BjNDUKKwlAY2QgJChvYmopaW5jbHVkZSA7CQkJCVwKIAlpZiBbICIkKGZpbmRzdHJpbmcgX1JPTUJPT1RfLCRAKSIgXSA7IHRoZW4gXAogCQllY2hvICJDT05GSUdfQk9PVF9ST00gPSB5IiA+PiBjb25maWcubWsgOyBcCiAJCWVjaG8gIi4uLiBib290aW5nIGZyb20gOC1iaXQgZmxhc2giIDsgXApAQCAtMTAyMCw2MSArMTIzMyw2NCBAQAogCWVjaG8gImV4cG9ydCBDT05GSUdfQk9PVF9ST00iID4+IGNvbmZpZy5tazsKIAogQ1U4MjRfY29uZmlnOiB1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggY3U4MjQKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBjdTgyNAogCiBkZWJyaXNfY29uZmlnOiB1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggZGVicmlzIGV0aW4KKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBkZWJyaXMgZXRpbgogCiBlWGFsaW9uX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IGVYYWxpb24KKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBlWGFsaW9uCiAKIEhJRERFTl9EUkFHT05fY29uZmlnOiB1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggaGlkZGVuX2RyYWdvbgorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IGhpZGRlbl9kcmFnb24KKwora3ZtZTA4MF9jb25maWc6IHVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHgga3ZtZTA4MCBldGluCiAKIE1PVVNTRV9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBtb3Vzc2UKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBtb3Vzc2UKIAogTVVTRU5LSV9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBtdXNlbmtpCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggbXVzZW5raQogCiBNVkJMVUVfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggbXZibHVlCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggbXZibHVlCiAKIE9YQ19jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBveGMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBveGMKIAogUE42Ml9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBwbjYyCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggcG42MgogCiBTYW5kcG9pbnQ4MjQwX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IHNhbmRwb2ludAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IHNhbmRwb2ludAogCiBTYW5kcG9pbnQ4MjQ1X2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IHNhbmRwb2ludAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IHNhbmRwb2ludAogCiBzYmM4MjQwX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjR4IHNiYzgyNDAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBzYmM4MjQwCiAKIFNMODI0NV9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBzbDgyNDUKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCBzbDgyNDUKIAogdXR4ODI0NV9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI0eCB1dHg4MjQ1CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNHggdXR4ODI0NQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNUEM4MjYwIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogYXRjX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIGF0YworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIGF0YwogCiBjb2dlbnRfbXBjODI2MF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBjb2dlbnQKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBjb2dlbnQKIAogQ1BVODZfY29uZmlnCVwKIENQVTg2X1JPTUJPT1RfY29uZmlnOiB1bmNvbmZpZwotCUAuL21rY29uZmlnICQoY2FsbCB4dHJhY3RfODJ4eCwkQCkgcHBjIG1wYzgyNjAgY3B1ODYKLQlAY2QgLi9pbmNsdWRlIDsJCQkJXAorCUAkKE1LQ09ORklHKSAkKGNhbGwgeHRyYWN0XzgyeHgsJEApIHBwYyBtcGM4MjYwIGNwdTg2CisJQGNkICQob2JqKWluY2x1ZGUgOwkJCQlcCiAJaWYgWyAiJChmaW5kc3RyaW5nIF9ST01CT09UXywkQCkiIF0gOyB0aGVuIFwKIAkJZWNobyAiQ09ORklHX0JPT1RfUk9NID0geSIgPj4gY29uZmlnLm1rIDsgXAogCQllY2hvICIuLi4gYm9vdGluZyBmcm9tIDgtYml0IGZsYXNoIiA7IFwKQEAgLTEwODYsOCArMTMwMiw4IEBACiAKIENQVTg3X2NvbmZpZwlcCiBDUFU4N19ST01CT09UX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKGNhbGwgeHRyYWN0XzgyeHgsJEApIHBwYyBtcGM4MjYwIGNwdTg3Ci0JQGNkIC4vaW5jbHVkZSA7CQkJCVwKKwlAJChNS0NPTkZJRykgJChjYWxsIHh0cmFjdF84Mnh4LCRAKSBwcGMgbXBjODI2MCBjcHU4NworCUBjZCAkKG9iailpbmNsdWRlIDsJCQkJXAogCWlmIFsgIiQoZmluZHN0cmluZyBfUk9NQk9PVF8sJEApIiBdIDsgdGhlbiBcCiAJCWVjaG8gIkNPTkZJR19CT09UX1JPTSA9IHkiID4+IGNvbmZpZy5tayA7IFwKIAkJZWNobyAiLi4uIGJvb3RpbmcgZnJvbSA4LWJpdCBmbGFzaCIgOyBcCkBAIC0xMDk5LDI5ICsxMzE1LDMwIEBACiAKIGVwODI0OF9jb25maWcJXAogZXA4MjQ4RV9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnIGVwODI0OCBwcGMgbXBjODI2MCBlcDgyNDgKKwlAJChNS0NPTkZJRykgZXA4MjQ4IHBwYyBtcGM4MjYwIGVwODI0OAogCiBlcDgyNjBfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNjAgZXA4MjYwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNjAgZXA4MjYwCiAKIGd3ODI2MF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBndzgyNjAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBndzgyNjAKIAogaHltb2RfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNjAgaHltb2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBoeW1vZAogCiBJRFM4MjQ3X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIGlkczgyNDcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBpZHM4MjQ3CiAKIElQSEFTRTQ1MzlfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNjAgaXBoYXNlNDUzOQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIGlwaGFzZTQ1MzkKIAogSVNQQU5fY29uZmlnCQlcCiBJU1BBTl9SRVZCX2NvbmZpZzoJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBpZiBbICIkKGZpbmRzdHJpbmcgX1JFVkJfLCRAKSIgXSA7IHRoZW4gXAotCQllY2hvICIjZGVmaW5lIENGR19SRVZfQiIgPiBpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIjZGVmaW5lIENGR19SRVZfQiIgPiAkKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCWZpCi0JQC4vbWtjb25maWcgLWEgSVNQQU4gcHBjIG1wYzgyNjAgaXNwYW4KKwlAJChNS0NPTkZJRykgLWEgSVNQQU4gcHBjIG1wYzgyNjAgaXNwYW4KIAogTVBDODI2MEFEU19jb25maWcJXAogTVBDODI2MEFEU19sb3dib290X2NvbmZpZwlcCkBAIC0xMTQwLDIxICsxMzU3LDIzIEBACiBQUTJGQURTLVpVXzY2TUh6X2NvbmZpZwlcCiBQUTJGQURTLVpVXzY2TUh6X2xvd2Jvb3RfY29uZmlnCVwKIAk6CQl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQG1rZGlyIC1wICQob2JqKWJvYXJkL21wYzgyNjBhZHMKIAkkKGlmICQoZmluZHN0cmluZyBQUTJGQURTLCRAKSwgXAotCUBlY2hvICIjZGVmaW5lIENPTkZJR19BRFNUWVBFIENGR19QUTJGQURTIiA+IGluY2x1ZGUvY29uZmlnLmgsIFwKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfQURTVFlQRSBDRkdfIiQoc3Vic3QgTVBDLCwkKHdvcmQgMSwkKHN1YnN0IF8sICwkQCkpKSA+IGluY2x1ZGUvY29uZmlnLmgpCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX0FEU1RZUEUgQ0ZHX1BRMkZBRFMiID4gJChvYmopaW5jbHVkZS9jb25maWcuaCwgXAorCUBlY2hvICIjZGVmaW5lIENPTkZJR19BRFNUWVBFIENGR18iJChzdWJzdCBNUEMsLCQod29yZCAxLCQoc3Vic3QgXywgLCRAKSkpID4gJChvYmopaW5jbHVkZS9jb25maWcuaCkKIAkkKGlmICQoZmluZHN0cmluZyBNSHosJEApLCBcCi0JQGVjaG8gIiNkZWZpbmUgQ09ORklHXzgyNjBfQ0xLSU4iICQoc3Vic3QgTUh6LCwkKHdvcmQgMiwkKHN1YnN0IF8sICwkQCkpKSIwMDAwMDAiID4+IGluY2x1ZGUvY29uZmlnLmgsIFwKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfODI2MF9DTEtJTiIgJChzdWJzdCBNSHosLCQod29yZCAyLCQoc3Vic3QgXywgLCRAKSkpIjAwMDAwMCIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaCwgXAogCSQoaWYgJChmaW5kc3RyaW5nIFZSLCRAKSwgXAotCUBlY2hvICIjZGVmaW5lIENPTkZJR184MjYwX0NMS0lOIDY2MDAwMDAwIiA+PiBpbmNsdWRlL2NvbmZpZy5oKSkKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfODI2MF9DTEtJTiA2NjAwMDAwMCIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaCkpCiAJQFsgLXogIiQoZmluZHN0cmluZyBsb3dib290XywkQCkiIF0gfHwgXAotCQl7IGVjaG8gIlRFWFRfQkFTRSA9IDB4RkY4MDAwMDAiID5ib2FyZC9tcGM4MjYwYWRzL2NvbmZpZy50bXAgOyBcCisJCXsgZWNobyAiVEVYVF9CQVNFID0gMHhGRjgwMDAwMCIgPiQob2JqKWJvYXJkL21wYzgyNjBhZHMvY29uZmlnLnRtcCA7IFwKIAkJICBlY2hvICIuLi4gd2l0aCBsb3dib290IGNvbmZpZ3VyYXRpb24iIDsgXAogCQl9Ci0JQC4vbWtjb25maWcgLWEgTVBDODI2MEFEUyBwcGMgbXBjODI2MCBtcGM4MjYwYWRzCisJQCQoTUtDT05GSUcpIC1hIE1QQzgyNjBBRFMgcHBjIG1wYzgyNjAgbXBjODI2MGFkcwogCiBNUEM4MjY2QURTX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIG1wYzgyNjZhZHMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBtcGM4MjY2YWRzCiAKICMgUE04MjUvUE04MjYgZGVmYXVsdCBjb25maWd1cmF0aW9uOiAgc21hbGwgKD0gOCBNQikgRmxhc2ggLyBib290IGZyb20gNjQtYml0IGZsYXNoCiBQTTgyNV9jb25maWcJXApAQCAtMTE2NSw3MSArMTM4NCw3NiBAQAogUE04MjZfUk9NQk9PVF9jb25maWcJXAogUE04MjZfQklHRkxBU0hfY29uZmlnCVwKIFBNODI2X1JPTUJPT1RfQklHRkxBU0hfY29uZmlnOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQG1rZGlyIC1wICQob2JqKWJvYXJkL3BtODI2CiAJQGlmIFsgIiQoZmluZHN0cmluZyBQTTgyNV8sJEApIiBdIDsgdGhlbiBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX1BDSSIJPmluY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX1BDSSIJPiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJZWxzZSBcCi0JCT5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQk+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAlmaQogCUBpZiBbICIkKGZpbmRzdHJpbmcgX1JPTUJPT1RfLCRAKSIgXSA7IHRoZW4gXAogCQllY2hvICIuLi4gYm9vdGluZyBmcm9tIDgtYml0IGZsYXNoIiA7IFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfQk9PVF9ST00iID4+aW5jbHVkZS9jb25maWcuaCA7IFwKLQkJZWNobyAiVEVYVF9CQVNFID0gMHhGRjgwMDAwMCIgPmJvYXJkL3BtODI2L2NvbmZpZy50bXAgOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0JPT1RfUk9NIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIlRFWFRfQkFTRSA9IDB4RkY4MDAwMDAiID4kKG9iailib2FyZC9wbTgyNi9jb25maWcudG1wIDsgXAogCQlpZiBbICIkKGZpbmRzdHJpbmcgX0JJR0ZMQVNIXywkQCkiIF0gOyB0aGVuIFwKIAkJCWVjaG8gIi4uLiB3aXRoIDMyIE1CIEZsYXNoIiA7IFwKLQkJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0ZMQVNIXzMyTUIiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0ZMQVNIXzMyTUIiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJZmk7IFwKIAllbHNlIFwKIAkJZWNobyAiLi4uIGJvb3RpbmcgZnJvbSA2NC1iaXQgZmxhc2giIDsgXAogCQlpZiBbICIkKGZpbmRzdHJpbmcgX0JJR0ZMQVNIXywkQCkiIF0gOyB0aGVuIFwKIAkJCWVjaG8gIi4uLiB3aXRoIDMyIE1CIEZsYXNoIiA7IFwKLQkJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0ZMQVNIXzMyTUIiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKLQkJCWVjaG8gIlRFWFRfQkFTRSA9IDB4NDAwMDAwMDAiID5ib2FyZC9wbTgyNi9jb25maWcudG1wIDsgXAorCQkJZWNobyAiI2RlZmluZSBDT05GSUdfRkxBU0hfMzJNQiIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkJZWNobyAiVEVYVF9CQVNFID0gMHg0MDAwMDAwMCIgPiQob2JqKWJvYXJkL3BtODI2L2NvbmZpZy50bXAgOyBcCiAJCWVsc2UgXAotCQkJZWNobyAiVEVYVF9CQVNFID0gMHhGRjAwMDAwMCIgPmJvYXJkL3BtODI2L2NvbmZpZy50bXAgOyBcCisJCQllY2hvICJURVhUX0JBU0UgPSAweEZGMDAwMDAwIiA+JChvYmopYm9hcmQvcG04MjYvY29uZmlnLnRtcCA7IFwKIAkJZmk7IFwKIAlmaQotCUAuL21rY29uZmlnIC1hIFBNODI2IHBwYyBtcGM4MjYwIHBtODI2CisJQCQoTUtDT05GSUcpIC1hIFBNODI2IHBwYyBtcGM4MjYwIHBtODI2CiAKIFBNODI4X2NvbmZpZwlcCiBQTTgyOF9QQ0lfY29uZmlnCVwKIFBNODI4X1JPTUJPT1RfY29uZmlnCVwKIFBNODI4X1JPTUJPT1RfUENJX2NvbmZpZzoJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBta2RpciAtcCAkKG9iailib2FyZC9wbTgyNgogCUBpZiBbICIkKGZpbmRzdHJpbmcgX1BDSV8sJEApIiBdIDsgdGhlbiBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX1BDSSIgID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiI2RlZmluZSBDT05GSUdfUENJIiAgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQllY2hvICIuLi4gd2l0aCBQQ0kgZW5hYmxlZCIgOyBcCiAJZWxzZSBcCi0JCT5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQk+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAlmaQogCUBpZiBbICIkKGZpbmRzdHJpbmcgX1JPTUJPT1RfLCRAKSIgXSA7IHRoZW4gXAogCQllY2hvICIuLi4gYm9vdGluZyBmcm9tIDgtYml0IGZsYXNoIiA7IFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfQk9PVF9ST00iID4+aW5jbHVkZS9jb25maWcuaCA7IFwKLQkJZWNobyAiVEVYVF9CQVNFID0gMHhGRjgwMDAwMCIgPmJvYXJkL3BtODI2L2NvbmZpZy50bXAgOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0JPT1RfUk9NIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIlRFWFRfQkFTRSA9IDB4RkY4MDAwMDAiID4kKG9iailib2FyZC9wbTgyNi9jb25maWcudG1wIDsgXAogCWZpCi0JQC4vbWtjb25maWcgLWEgUE04MjggcHBjIG1wYzgyNjAgcG04MjgKKwlAJChNS0NPTkZJRykgLWEgUE04MjggcHBjIG1wYzgyNjAgcG04MjgKIAogcHBtYzgyNjBfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNjAgcHBtYzgyNjAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBwcG1jODI2MAogCiBSYXR0bGVyODI0OF9jb25maWcJXAogUmF0dGxlcl9jb25maWc6CQl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJJChpZiAkKGZpbmRzdHJpbmcgODI0OCwkQCksIFwKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfTVBDODI0OCIgPiBpbmNsdWRlL2NvbmZpZy5oKQotCUAuL21rY29uZmlnIC1hIFJhdHRsZXIgcHBjIG1wYzgyNjAgcmF0dGxlcgorCUBlY2hvICIjZGVmaW5lIENPTkZJR19NUEM4MjQ4IiA+ICQob2JqKWluY2x1ZGUvY29uZmlnLmgpCisJQCQoTUtDT05GSUcpIC1hIFJhdHRsZXIgcHBjIG1wYzgyNjAgcmF0dGxlcgogCiBSUFhzdXBlcl9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBycHhzdXBlcgorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIHJweHN1cGVyCiAKIHJzZHByb3RvX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIHJzZHByb3RvCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNjAgcnNkcHJvdG8KIAogc2Fjc25nX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIHNhY3NuZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIHNhY3NuZwogCiBzYmM4MjYwX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIHNiYzgyNjAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBzYmM4MjYwCiAKIFNDTV9jb25maWc6CQl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzgyNjAgU0NNIHNpZW1lbnMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCBTQ00gc2llbWVucwogCiBUUU04MjU1X0FBX2NvbmZpZyBcCiBUUU04MjYwX0FBX2NvbmZpZyBcCkBAIC0xMjQyLDYgKzE0NjYsNyBAQAogVFFNODI2MF9BSF9jb25maWcgXAogVFFNODI2MF9BSV9jb25maWcgXAogVFFNODI2NV9BQV9jb25maWc6ICB1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJQGNhc2UgIiRAIiBpbiBcCiAJVFFNODI1NV9BQV9jb25maWcpIENUWVBFPU1QQzgyNTU7IENGUkVRPTMwMDsgQ0FDSEU9bm87CUJNT0RFPTgyNjA7OyAgXAogCVRRTTgyNjBfQUFfY29uZmlnKSBDVFlQRT1NUEM4MjYwOyBDRlJFUT0yMDA7IENBQ0hFPW5vOwlCTU9ERT04MjYwOzsgXApAQCAtMTI1NSwyMDYgKzE0ODAsMjIzIEBACiAJVFFNODI2MF9BSV9jb25maWcpIENUWVBFPU1QQzgyNjA7IENGUkVRPTMwMDsgQ0FDSEU9bm87CUJNT0RFPTYweDs7ICBcCiAJVFFNODI2NV9BQV9jb25maWcpIENUWVBFPU1QQzgyNjU7IENGUkVRPTMwMDsgQ0FDSEU9bm87CUJNT0RFPTYweDs7ICBcCiAJZXNhYzsgXAotCT5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCT4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCWlmIFsgIiQke0NUWVBFfSIgIT0gIk1QQzgyNjAiIF0gOyB0aGVuIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfJCR7Q1RZUEV9Igk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHXyQke0NUWVBFfSIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCWZpOyBcCi0JZWNobyAiI2RlZmluZSBDT05GSUdfJCR7Q0ZSRVF9TUh6Igk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJZWNobyAiI2RlZmluZSBDT05GSUdfJCR7Q0ZSRVF9TUh6Igk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJZWNobyAiLi4uIHdpdGggJCR7Q0ZSRVF9TUh6IHN5c3RlbSBjbG9jayIgOyBcCiAJaWYgWyAiJCR7Q0FDSEV9IiA9PSAieWVzIiBdIDsgdGhlbiBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX0wyX0NBQ0hFIgk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0wyX0NBQ0hFIgk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCWVjaG8gIi4uLiB3aXRoIEwyIENhY2hlIHN1cHBvcnQiIDsgXAogCWVsc2UgXAotCQllY2hvICIjdW5kZWYgQ09ORklHX0wyX0NBQ0hFIgk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIiN1bmRlZiBDT05GSUdfTDJfQ0FDSEUiCT4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJZWNobyAiLi4uIHdpdGhvdXQgTDIgQ2FjaGUgc3VwcG9ydCIgOyBcCiAJZmk7IFwKIAlpZiBbICIkJHtCTU9ERX0iID09ICI2MHgiIF0gOyB0aGVuIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfQlVTTU9ERV82MHgiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiI2RlZmluZSBDT05GSUdfQlVTTU9ERV82MHgiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJZWNobyAiLi4uIHdpdGggNjB4IEJ1cyBNb2RlIiA7IFwKIAllbHNlIFwKLQkJZWNobyAiI3VuZGVmIENPTkZJR19CVVNNT0RFXzYweCIgID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiI3VuZGVmIENPTkZJR19CVVNNT0RFXzYweCIgID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJZWNobyAiLi4uIHdpdGhvdXQgNjB4IEJ1cyBNb2RlIiA7IFwKIAlmaQotCUAuL21rY29uZmlnIC1hIFRRTTgyNjAgcHBjIG1wYzgyNjAgdHFtODI2MAorCUAkKE1LQ09ORklHKSAtYSBUUU04MjYwIHBwYyBtcGM4MjYwIHRxbTgyNjAKIAogVm9WUE4tR1dfNjZNSHpfY29uZmlnCVwKIFZvVlBOLUdXXzEwME1Iel9jb25maWc6CQl1bmNvbmZpZwotCUBlY2hvICIjZGVmaW5lIENPTkZJR19DTEtJTl8kKHdvcmQgMiwkKHN1YnN0IF8sICwkQCkpIiA+IGluY2x1ZGUvY29uZmlnLmgKLQlALi9ta2NvbmZpZyAtYSBWb1ZQTi1HVyBwcGMgbXBjODI2MCB2b3Zwbi1ndyBmdW5rd2VyaworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX0NMS0lOXyQod29yZCAyLCQoc3Vic3QgXywgLCRAKSkiID4gJChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtYSBWb1ZQTi1HVyBwcGMgbXBjODI2MCB2b3Zwbi1ndyBmdW5rd2VyawogCiBaUEMxOTAwX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4MjYwIHpwYzE5MDAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODI2MCB6cGMxOTAwCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIENvbGRmaXJlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGNvYnJhNTI3Ml9jb25maWcgOgkJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIG02OGsgbWNmNTJ4MiBjb2JyYTUyNzIKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBtNjhrIG1jZjUyeDIgY29icmE1MjcyCiAKIEVCK01DRi1FVjEyM19jb25maWcgOgkJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCi0JQGVjaG8gIlRFWFRfQkFTRSA9IDB4RkZFMDAwMDAifHRlZSBib2FyZC9CdVMvRUIrTUNGLUVWMTIzL3RleHRiYXNlLm1rCi0JQC4vbWtjb25maWcgRUIrTUNGLUVWMTIzIG02OGsgbWNmNTJ4MiBFQitNQ0YtRVYxMjMgQnVTCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAbWtkaXIgLXAgJChvYmopYm9hcmQvQnVTL0VCK01DRi1FVjEyMworCUAgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAZWNobyAiVEVYVF9CQVNFID0gMHhGRkUwMDAwMCJ8dGVlICQob2JqKWJvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvdGV4dGJhc2UubWsKKwlAJChNS0NPTkZJRykgRUIrTUNGLUVWMTIzIG02OGsgbWNmNTJ4MiBFQitNQ0YtRVYxMjMgQnVTCiAKIEVCK01DRi1FVjEyM19pbnRlcm5hbF9jb25maWcgOgl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKLQlAZWNobyAiVEVYVF9CQVNFID0gMHhGMDAwMDAwMCJ8dGVlIGJvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvdGV4dGJhc2UubWsKLQlALi9ta2NvbmZpZyBFQitNQ0YtRVYxMjMgbTY4ayBtY2Y1MngyIEVCK01DRi1FVjEyMyBCdVMKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBta2RpciAtcCAkKG9iailib2FyZC9CdVMvRUIrTUNGLUVWMTIzCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUBlY2hvICJURVhUX0JBU0UgPSAweEYwMDAwMDAwInx0ZWUgJChvYmopYm9hcmQvQnVTL0VCK01DRi1FVjEyMy90ZXh0YmFzZS5taworCUAkKE1LQ09ORklHKSBFQitNQ0YtRVYxMjMgbTY4ayBtY2Y1MngyIEVCK01DRi1FVjEyMyBCdVMKIAogTTUyNzFFVkJfY29uZmlnIDoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBtNjhrIG1jZjUyeDIgbTUyNzFldmIKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBtNjhrIG1jZjUyeDIgbTUyNzFldmIKIAogTTUyNzJDM19jb25maWcgOgkJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIG02OGsgbWNmNTJ4MiBtNTI3MmMzCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgbTY4ayBtY2Y1MngyIG01MjcyYzMKIAogTTUyODJFVkJfY29uZmlnIDoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBtNjhrIG1jZjUyeDIgbTUyODJldmIKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBtNjhrIG1jZjUyeDIgbTUyODJldmIKIAogVEFTUkVHX2NvbmZpZyA6CQl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgbTY4ayBtY2Y1MngyIHRhc3JlZyBlc2QKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBtNjhrIG1jZjUyeDIgdGFzcmVnIGVzZAogCiByNTIwMF9jb25maWcgOgkJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIG02OGsgbWNmNTJ4MiByNTIwMAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIG02OGsgbWNmNTJ4MiByNTIwMAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNUEM4M3h4IFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogTVBDODM0OUFEU19jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODN4eCBtcGM4MzQ5YWRzCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgzeHggbXBjODM0OWFkcwogCiBUUU04MzR4X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4M3h4IHRxbTgzNHgKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODN4eCB0cW04MzR4CiAKIE1QQzgzNDlFTURTX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4M3h4IG1wYzgzNDllbWRzCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzgzeHggbXBjODM0OWVtZHMKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTVBDODV4eCBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIE1QQzg1NDBBRFNfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggbXBjODU0MGFkcworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NDBhZHMKIAogTVBDODU0MEVWQUxfY29uZmlnIFwKIE1QQzg1NDBFVkFMXzMzX2NvbmZpZyBcCiBNUEM4NTQwRVZBTF82Nl9jb25maWcgXAogTVBDODU0MEVWQUxfMzNfc2xhdmVfY29uZmlnIFwKIE1QQzg1NDBFVkFMXzY2X3NsYXZlX2NvbmZpZzogICAgICB1bmNvbmZpZwotCUBlY2hvICIiID5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGVjaG8gIiIgPiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJaWYgWyAiJChmaW5kc3RyaW5nIF8zM18sJEApIiBdIDsgdGhlbiBcCiAJCWVjaG8gLW4gIi4uLiAzMyBNSHogUENJIiA7IFwKIAllbHNlIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfU1lTQ0xLXzY2TSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIjZGVmaW5lIENPTkZJR19TWVNDTEtfNjZNIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCWVjaG8gLW4gIi4uLiA2NiBNSHogUENJIiA7IFwKIAlmaSA7IFwKIAlpZiBbICIkKGZpbmRzdHJpbmcgX3NsYXZlXywkQCkiIF0gOyB0aGVuIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfUENJX1NMQVZFIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX1BDSV9TTEFWRSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQllY2hvICIgc2xhdmUiIDsgXAogCWVsc2UgXAogCQllY2hvICIgaG9zdCIgOyBcCiAJZmkKLQlALi9ta2NvbmZpZyAtYSBNUEM4NTQwRVZBTCBwcGMgbXBjODV4eCBtcGM4NTQwZXZhbAorCUAkKE1LQ09ORklHKSAtYSBNUEM4NTQwRVZBTCBwcGMgbXBjODV4eCBtcGM4NTQwZXZhbAogCiBNUEM4NTYwQURTX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NjBhZHMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTYwYWRzCiAKIE1QQzg1NDFDRFNfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggbXBjODU0MWNkcyBjZHMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTQxY2RzIGNkcwogCiBNUEM4NTQ4Q0RTX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NDhjZHMgY2RzCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggbXBjODU0OGNkcyBjZHMKIAogTVBDODU1NUNEU19jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTU1Y2RzIGNkcworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NTVjZHMgY2RzCiAKIFBNODU0X2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IHBtODU0CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggcG04NTQKIAogUE04NTZfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggcG04NTYKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBwbTg1NgogCiBzYmM4NTQwX2NvbmZpZyBcCiBzYmM4NTQwXzMzX2NvbmZpZyBcCiBzYmM4NTQwXzY2X2NvbmZpZzoJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBpZiBbICIkKGZpbmRzdHJpbmcgXzY2XywkQCkiIF0gOyB0aGVuIFwKLQkJZWNobyAiI2RlZmluZSBDT05GSUdfUENJXzY2Igk+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX1BDSV82NiIJPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQllY2hvICIuLi4gNjYgTUh6IFBDSSIgOyBcCiAJZWxzZSBcCi0JCT5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQk+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJZWNobyAiLi4uIDMzIE1IeiBQQ0kiIDsgXAogCWZpCi0JQC4vbWtjb25maWcgLWEgU0JDODU0MCBwcGMgbXBjODV4eCBzYmM4NTYwCisJQCQoTUtDT05GSUcpIC1hIFNCQzg1NDAgcHBjIG1wYzg1eHggc2JjODU2MAogCiBzYmM4NTYwX2NvbmZpZyBcCiBzYmM4NTYwXzMzX2NvbmZpZyBcCiBzYmM4NTYwXzY2X2NvbmZpZzogICAgICB1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJQGlmIFsgIiQoZmluZHN0cmluZyBfNjZfLCRAKSIgXSA7IHRoZW4gXAotCQllY2hvICIjZGVmaW5lIENPTkZJR19QQ0lfNjYiCT4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiI2RlZmluZSBDT05GSUdfUENJXzY2Igk+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCWVjaG8gIi4uLiA2NiBNSHogUENJIiA7IFwKIAllbHNlIFwKLQkJPmluY2x1ZGUvY29uZmlnLmggOyBcCisJCT4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQllY2hvICIuLi4gMzMgTUh6IFBDSSIgOyBcCiAJZmkKLQlALi9ta2NvbmZpZyAtYSBzYmM4NTYwIHBwYyBtcGM4NXh4IHNiYzg1NjAKKwlAJChNS0NPTkZJRykgLWEgc2JjODU2MCBwcGMgbXBjODV4eCBzYmM4NTYwCiAKIHN0eGdwM19jb25maWc6CQl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggc3R4Z3AzCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggc3R4Z3AzCiAKIFRRTTg1NDBfY29uZmlnCQlcCiBUUU04NTQxX2NvbmZpZwkJXAogVFFNODU1NV9jb25maWcJCVwKIFRRTTg1NjBfY29uZmlnOgkJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQogCUBDVFlQRT0kKHN1YnN0IFRRTSwsJChAOl9jb25maWc9KSk7IFwKLQk+aW5jbHVkZS9jb25maWcuaCA7IFwKKwk+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAllY2hvICIuLi4gVFFNIiQke0NUWVBFfTsgXAotCWVjaG8gIiNkZWZpbmUgQ09ORklHX01QQyQke0NUWVBFfSI+PmluY2x1ZGUvY29uZmlnLmg7IFwKLQllY2hvICIjZGVmaW5lIENPTkZJR19UUU0kJHtDVFlQRX0iPj5pbmNsdWRlL2NvbmZpZy5oOyBcCi0JZWNobyAiI2RlZmluZSBDT05GSUdfSE9TVE5BTUUgdHFtJCR7Q1RZUEV9Ij4+aW5jbHVkZS9jb25maWcuaDsgXAotCWVjaG8gIiNkZWZpbmUgQ09ORklHX0JPQVJETkFNRSBcIlRRTSQke0NUWVBFfVwiIj4+aW5jbHVkZS9jb25maWcuaDsgXAotCWVjaG8gIiNkZWZpbmUgQ0ZHX0JPT1RGSUxFIFwiYm9vdGZpbGU9L3RmdHBib290L3RxbSQke0NUWVBFfS91SW1hZ2VcMFwiIj4+aW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hIFRRTTg1eHggcHBjIG1wYzg1eHggdHFtODV4eAorCWVjaG8gIiNkZWZpbmUgQ09ORklHX01QQyQke0NUWVBFfSI+PiQob2JqKWluY2x1ZGUvY29uZmlnLmg7IFwKKwllY2hvICIjZGVmaW5lIENPTkZJR19UUU0kJHtDVFlQRX0iPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oOyBcCisJZWNobyAiI2RlZmluZSBDT05GSUdfSE9TVE5BTUUgdHFtJCR7Q1RZUEV9Ij4+JChvYmopaW5jbHVkZS9jb25maWcuaDsgXAorCWVjaG8gIiNkZWZpbmUgQ09ORklHX0JPQVJETkFNRSBcIlRRTSQke0NUWVBFfVwiIj4+JChvYmopaW5jbHVkZS9jb25maWcuaDsgXAorCWVjaG8gIiNkZWZpbmUgQ0ZHX0JPT1RGSUxFIFwiYm9vdGZpbGU9L3RmdHBib290L3RxbSQke0NUWVBFfS91SW1hZ2VcMFwiIj4+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtYSBUUU04NXh4IHBwYyBtcGM4NXh4IHRxbTg1eHgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgTVBDODZ4eCBTeXN0ZW1zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK01QQzg2NDFIUENOX2NvbmZpZzogICAgdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4Nnh4IG1wYzg2NDFocGNuCisKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgNzR4eC83eHggU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBBbWlnYU9uZUczU0VfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIDc0eHhfN3h4IEFtaWdhT25lRzNTRSBNQUkKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgNzR4eF83eHggQW1pZ2FPbmVHM1NFIE1BSQogCiBCQUI3eHhfY29uZmlnOiB1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIDc0eHhfN3h4IGJhYjd4eCBlbHRlYworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBiYWI3eHggZWx0ZWMKIAogQ1BDSTc1MF9jb25maWc6ICAgICAgICB1bmNvbmZpZwotCUAuL21rY29uZmlnIENQQ0k3NTAgcHBjIDc0eHhfN3h4IGNwY2k3NTAgZXNkCisJQCQoTUtDT05GSUcpIENQQ0k3NTAgcHBjIDc0eHhfN3h4IGNwY2k3NTAgZXNkCiAKIERCNjQzNjBfY29uZmlnOiAgdW5jb25maWcKLQlALi9ta2NvbmZpZyBEQjY0MzYwIHBwYyA3NHh4Xzd4eCBkYjY0MzYwIE1hcnZlbGwKKwlAJChNS0NPTkZJRykgREI2NDM2MCBwcGMgNzR4eF83eHggZGI2NDM2MCBNYXJ2ZWxsCiAKIERCNjQ0NjBfY29uZmlnOiAgdW5jb25maWcKLQlALi9ta2NvbmZpZyBEQjY0NDYwIHBwYyA3NHh4Xzd4eCBkYjY0NDYwIE1hcnZlbGwKKwlAJChNS0NPTkZJRykgREI2NDQ2MCBwcGMgNzR4eF83eHggZGI2NDQ2MCBNYXJ2ZWxsCiAKIEVMUFBDX2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBlbHBwYyBlbHRlYworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBlbHBwYyBlbHRlYwogCiBFVkI2NDI2MF9jb25maWcJXAogRVZCNjQyNjBfNzUwQ1hfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnIEVWQjY0MjYwIHBwYyA3NHh4Xzd4eCBldmI2NDI2MAorCUAkKE1LQ09ORklHKSBFVkI2NDI2MCBwcGMgNzR4eF83eHggZXZiNjQyNjAKIAogUDNHNF9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgNzR4eF83eHggZXZiNjQyNjAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgNzR4eF83eHggZXZiNjQyNjAKIAogUENJUFBDMl9jb25maWcgXAogUENJUFBDNl9jb25maWc6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgNzR4eF83eHggcGNpcHBjMgorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBwY2lwcGMyCiAKIFpVTUFfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIDc0eHhfN3h4IGV2YjY0MjYwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIDc0eHhfN3h4IGV2YjY0MjYwCiAKIHBwbWM3eHhfY29uZmlnOiB1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIDc0eHhfN3h4IHBwbWM3eHgKLQkKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgNzR4eF83eHggcHBtYzd4eAorCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIEFSTQogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTQ2MywxOSArMTcwNSwxOSBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBhc3NhYmV0X2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gc2ExMTAwIGFzc2FiZXQKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gc2ExMTAwIGFzc2FiZXQKIAogZG5wMTExMF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHNhMTEwMCBkbnAxMTEwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIHNhMTEwMCBkbnAxMTEwCiAKIGdjcGx1c19jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHNhMTEwMCBnY3BsdXMKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gc2ExMTAwIGdjcGx1cwogCiBsYXJ0X2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gc2ExMTAwIGxhcnQKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gc2ExMTAwIGxhcnQKIAogc2hhbm5vbl9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHNhMTEwMCBzaGFubm9uCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIHNhMTEwMCBzaGFubm9uCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIEFSTTkyeFQgU3lzdGVtcwpAQCAtMTQ4OCwxNiArMTczMCwxNiBAQAogeHRyYWN0X29tYXA3MzBwMiA9ICQoc3Vic3QgX2NzMGJvb3QsLCQoc3Vic3QgX2NzM2Jvb3QsLCAkKHN1YnN0IF9jb25maWcsLCQxKSkpCiAKIGF0OTFybTkyMDBka19jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgYXQ5MXJtOTIwMGRrIE5VTEwgYXQ5MXJtOTIwMAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IGF0OTFybTkyMDBkayBOVUxMIGF0OTFybTkyMDAKIAogY21jX3B1Ml9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgY21jX3B1MiBOVUxMIGF0OTFybTkyMDAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBjbWNfcHUyIE5VTEwgYXQ5MXJtOTIwMAogCiBjc2I2MzdfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IGNzYjYzNyBOVUxMIGF0OTFybTkyMDAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBjc2I2MzcgTlVMTCBhdDkxcm05MjAwCiAKIG1wMnVzYl9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgbXAydXNiIE5VTEwgYXQ5MXJtOTIwMAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG1wMnVzYiBOVUxMIGF0OTFybTkyMDAKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE1MjcsMzQgKzE3NjksMzUgQEAKIAlAYm9hcmQvaW50ZWdyYXRvcmNwL3NwbGl0X2J5X3ZhcmlhbnQuc2ggJEAKIAoga2I5MjAyX2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBrYjkyMDIgTlVMTCBhdDkxcm05MjAwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQga2I5MjAyIE5VTEwgYXQ5MXJtOTIwMAogCiBscGQ3YTQwMF9jb25maWcgXAogbHBkN2E0MDRfY29uZmlnOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGxoN2E0MHggbHBkN2E0MHgKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gbGg3YTQweCBscGQ3YTQweAogCiBteDFhZHNfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG14MWFkcyBOVUxMIGlteAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG14MWFkcyBOVUxMIGlteAogCiBteDFmczJfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG14MWZzMiBOVUxMIGlteAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG14MWZzMiBOVUxMIGlteAogCiBuZXRzdGFyXzMyX2NvbmZpZwlcCiBuZXRzdGFyX2NvbmZpZzoJCXVuY29uZmlnCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKIAlAaWYgWyAiJChmaW5kc3RyaW5nIF8zMl8sJEApIiBdIDsgdGhlbiBcCiAJCWVjaG8gIi4uLiAzMk1CIFNEUkFNIiA7IFwKLQkJZWNobyAiI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRSBTWl8zMk0iID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiI2RlZmluZSBQSFlTX1NEUkFNXzFfU0laRSBTWl8zMk0iID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAllbHNlIFwKIAkJZWNobyAiLi4uIDY0TUIgU0RSQU0iIDsgXAotCQllY2hvICIjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFIFNaXzY0TSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFIFNaXzY0TSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCWZpCi0JQC4vbWtjb25maWcgLWEgbmV0c3RhciBhcm0gYXJtOTI1dCBuZXRzdGFyCisJQCQoTUtDT05GSUcpIC1hIG5ldHN0YXIgYXJtIGFybTkyNXQgbmV0c3RhcgogCiBvbWFwMTUxMGlubl9jb25maWcgOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNXQgb21hcDE1MTBpbm4KKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTI1dCBvbWFwMTUxMGlubgogCiBvbWFwNTkxMm9za19jb25maWcgOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBvbWFwNTkxMm9zayBOVUxMIG9tYXAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTI2ZWpzIG9tYXA1OTEyb3NrIE5VTEwgb21hcAogCiBvbWFwMTYxMGlubl9jb25maWcgXAogb21hcDE2MTBpbm5fY3MwYm9vdF9jb25maWcgXApAQCAtMTU2NCw2OSArMTgwNyw3NiBAQAogb21hcDE2MTBoMl9jczBib290X2NvbmZpZyBcCiBvbWFwMTYxMGgyX2NzM2Jvb3RfY29uZmlnIFwKIG9tYXAxNjEwaDJfY3NfYXV0b2Jvb3RfY29uZmlnOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJQGlmIFsgIiQoZmluZHN0cmluZyBfY3MwYm9vdF8sICRAKSIgXSA7IHRoZW4gXAotCQllY2hvICIjZGVmaW5lIENPTkZJR19DUzBfQk9PVCIgPj4gLi9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIjZGVmaW5lIENPTkZJR19DUzBfQk9PVCIgPj4gLiQob2JqKS9pbmNsdWRlL2NvbmZpZy5oIDsgXAogCQllY2hvICIuLi4gY29uZmlndXJlZCBmb3IgQ1MwIGJvb3QiOyBcCiAJZWxpZiBbICIkKGZpbmRzdHJpbmcgX2NzX2F1dG9ib290XywgJEApIiBdIDsgdGhlbiBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX0NTX0FVVE9CT09UIiA+PiAuL2luY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0NTX0FVVE9CT09UIiA+PiAkKG9iaikuL2luY2x1ZGUvY29uZmlnLmggOyBcCiAJCWVjaG8gIi4uLiBjb25maWd1cmVkIGZvciBDU19BVVRPIGJvb3QiOyBcCiAJZWxzZSBcCi0JCWVjaG8gIiNkZWZpbmUgQ09ORklHX0NTM19CT09UIiA+PiAuL2luY2x1ZGUvY29uZmlnLmggOyBcCisJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0NTM19CT09UIiA+PiAkKG9iaikuL2luY2x1ZGUvY29uZmlnLmggOyBcCiAJCWVjaG8gIi4uLiBjb25maWd1cmVkIGZvciBDUzMgYm9vdCI7IFwKIAlmaTsKLQlALi9ta2NvbmZpZyAtYSAkKGNhbGwgeHRyYWN0X29tYXAxNjEweHh4LCRAKSBhcm0gYXJtOTI2ZWpzIG9tYXAxNjEwaW5uIE5VTEwgb21hcAorCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0X29tYXAxNjEweHh4LCRAKSBhcm0gYXJtOTI2ZWpzIG9tYXAxNjEwaW5uIE5VTEwgb21hcAogCiBvbWFwNzMwcDJfY29uZmlnIFwKIG9tYXA3MzBwMl9jczBib290X2NvbmZpZyBcCiBvbWFwNzMwcDJfY3MzYm9vdF9jb25maWcgOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCiAJQGlmIFsgIiQoZmluZHN0cmluZyBfY3MwYm9vdF8sICRAKSIgXSA7IHRoZW4gXAotCQllY2hvICIjZGVmaW5lIENPTkZJR19DUzBfQk9PVCIgPj4gLi9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIjZGVmaW5lIENPTkZJR19DUzBfQk9PVCIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJZWNobyAiLi4uIGNvbmZpZ3VyZWQgZm9yIENTMCBib290IjsgXAogCWVsc2UgXAotCQllY2hvICIjZGVmaW5lIENPTkZJR19DUzNfQk9PVCIgPj4gLi9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIjZGVmaW5lIENPTkZJR19DUzNfQk9PVCIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJZWNobyAiLi4uIGNvbmZpZ3VyZWQgZm9yIENTMyBib290IjsgXAogCWZpOwotCUAuL21rY29uZmlnIC1hICQoY2FsbCB4dHJhY3Rfb21hcDczMHAyLCRAKSBhcm0gYXJtOTI2ZWpzIG9tYXA3MzBwMiBOVUxMIG9tYXAKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF9vbWFwNzMwcDIsJEApIGFybSBhcm05MjZlanMgb21hcDczMHAyIE5VTEwgb21hcAorCitzYmMyNDEweF9jb25maWc6IHVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgc2JjMjQxMHggTlVMTCBzM2MyNHgwCiAKIHNjYjkzMjhfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IHNjYjkzMjggTlVMTCBpbXgKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBzY2I5MzI4IE5VTEwgaW14CiAKIHNtZGsyNDAwX2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBzbWRrMjQwMCBOVUxMIHMzYzI0eDAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBzbWRrMjQwMCBOVUxMIHMzYzI0eDAKIAogc21kazI0MTBfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IHNtZGsyNDEwIE5VTEwgczNjMjR4MAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IHNtZGsyNDEwIE5VTEwgczNjMjR4MAogCiBTWDFfY29uZmlnIDoJCXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTI1dCBzeDEKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTI1dCBzeDEKIAogIyBUUkFCIGRlZmF1bHQgY29uZmlndXJhdGlvbjoJOCBNQiBGbGFzaCwgMzIgTUIgUkFNCiB0cmFiX2NvbmZpZyBcCiB0cmFiX2JpZ3JhbV9jb25maWcgXAogdHJhYl9iaWdmbGFzaF9jb25maWcgXAogdHJhYl9vbGRfY29uZmlnOgl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBta2RpciAtcCAkKG9iailib2FyZC90cmFiCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgX2JpZ3JhbSwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0ZMQVNIXzhNQiIgID4+aW5jbHVkZS9jb25maWcuaCA7IFwKLQkJICBlY2hvICIjZGVmaW5lIENPTkZJR19SQU1fMzJNQiIgICA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfRkxBU0hfOE1CIiAgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQkgIGVjaG8gIiNkZWZpbmUgQ09ORklHX1JBTV8zMk1CIiAgID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gd2l0aCA4IE1CIEZsYXNoLCAzMiBNQiBSQU0iIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBfYmlnZmxhc2gsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19GTEFTSF8xNk1CIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCi0JCSAgZWNobyAiI2RlZmluZSBDT05GSUdfUkFNXzE2TUIiICAgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX0ZMQVNIXzE2TUIiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJICBlY2hvICIjZGVmaW5lIENPTkZJR19SQU1fMTZNQiIgICA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIHdpdGggMTYgTUIgRmxhc2gsIDE2IE1CIFJBTSIgOyBcCi0JCSAgZWNobyAiVEVYVF9CQVNFID0gMHgwQ0Y0MDAwMCIgPmJvYXJkL3RyYWIvY29uZmlnLnRtcCA7IFwKKwkJICBlY2hvICJURVhUX0JBU0UgPSAweDBDRjQwMDAwIiA+JChvYmopYm9hcmQvdHJhYi9jb25maWcudG1wIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBfb2xkLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfRkxBU0hfOE1CIiAgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAotCQkgIGVjaG8gIiNkZWZpbmUgQ09ORklHX1JBTV8xNk1CIiAgID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19GTEFTSF84TUIiICA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCisJCSAgZWNobyAiI2RlZmluZSBDT05GSUdfUkFNXzE2TUIiICAgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiB3aXRoIDggTUIgRmxhc2gsIDE2IE1CIFJBTSIgOyBcCi0JCSAgZWNobyAiVEVYVF9CQVNFID0gMHgwQ0Y0MDAwMCIgPmJvYXJkL3RyYWIvY29uZmlnLnRtcCA7IFwKKwkJICBlY2hvICJURVhUX0JBU0UgPSAweDBDRjQwMDAwIiA+JChvYmopYm9hcmQvdHJhYi9jb25maWcudG1wIDsgXAogCQl9Ci0JQC4vbWtjb25maWcgLWEgJChjYWxsIHh0cmFjdF90cmFiLCRAKSBhcm0gYXJtOTIwdCB0cmFiIE5VTEwgczNjMjR4MAorCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0X3RyYWIsJEApIGFybSBhcm05MjB0IHRyYWIgTlVMTCBzM2MyNHgwCiAKIFZDTUE5X2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCB2Y21hOSBtcGwgczNjMjR4MAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IHZjbWE5IG1wbCBzM2MyNHgwCiAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgQVJNIHN1cHBsaWVkIFZlcnNhdGlsZSBkZXZlbG9wbWVudCBib2FyZHMKQEAgLTE2MzgsMTE3ICsxODg4LDEyMCBAQAogCiB2b2ljZWJsdWVfc21hbGxmbGFzaF9jb25maWcJXAogdm9pY2VibHVlX2NvbmZpZzoJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBta2RpciAtcCAkKG9iailib2FyZC92b2ljZWJsdWUKIAlAaWYgWyAiJChmaW5kc3RyaW5nIF9zbWFsbGZsYXNoXywkQCkiIF0gOyB0aGVuIFwKIAkJZWNobyAiLi4uIGJvb3QgZnJvbSBsb3dlciBmbGFzaCBiYW5rIiA7IFwKLQkJZWNobyAiI2RlZmluZSBWT0lDRUJMVUVfU01BTExfRkxBU0giID4+aW5jbHVkZS9jb25maWcuaCA7IFwKLQkJZWNobyAiVk9JQ0VCTFVFX1NNQUxMX0ZMQVNIPXkiID5ib2FyZC92b2ljZWJsdWUvY29uZmlnLnRtcCA7IFwKKwkJZWNobyAiI2RlZmluZSBWT0lDRUJMVUVfU01BTExfRkxBU0giID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiVk9JQ0VCTFVFX1NNQUxMX0ZMQVNIPXkiID4kKG9iailib2FyZC92b2ljZWJsdWUvY29uZmlnLnRtcCA7IFwKIAllbHNlIFwKIAkJZWNobyAiLi4uIGJvb3QgZnJvbSB1cHBlciBmbGFzaCBiYW5rIiA7IFwKLQkJPmluY2x1ZGUvY29uZmlnLmggOyBcCi0JCWVjaG8gIlZPSUNFQkxVRV9TTUFMTF9GTEFTSD1uIiA+Ym9hcmQvdm9pY2VibHVlL2NvbmZpZy50bXAgOyBcCisJCT4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICJWT0lDRUJMVUVfU01BTExfRkxBU0g9biIgPiQob2JqKWJvYXJkL3ZvaWNlYmx1ZS9jb25maWcudG1wIDsgXAogCWZpCi0JQC4vbWtjb25maWcgLWEgdm9pY2VibHVlIGFybSBhcm05MjV0IHZvaWNlYmx1ZQorCUAkKE1LQ09ORklHKSAtYSB2b2ljZWJsdWUgYXJtIGFybTkyNXQgdm9pY2VibHVlCiAKIGNtNDAwOF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgY200MDA4IE5VTEwga3M4Njk1CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgY200MDA4IE5VTEwga3M4Njk1CiAKIGNtNDF4eF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgY200MXh4IE5VTEwga3M4Njk1CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgY200MXh4IE5VTEwga3M4Njk1CiAKIGd0aDJfY29uZmlnCQk6IAl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfR1RIMiAxIiA+PmluY2x1ZGUvY29uZmlnLmgKLQlALi9ta2NvbmZpZyAtYSBndGgyIG1pcHMgbWlwcyBndGgyCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX0dUSDIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQCQoTUtDT05GSUcpIC1hIGd0aDIgbWlwcyBtaXBzIGd0aDIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgUzNDNDRCMCBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIEIyX2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gczNjNDRiMCBCMiBkYXZlCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIHMzYzQ0YjAgQjIgZGF2ZQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBBUk03MjBUIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogYXJtYWRpbGxvX2NvbmZpZzoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm03MjB0IGFybWFkaWxsbworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm03MjB0IGFybWFkaWxsbwogCiBlcDczMTJfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm03MjB0IGVwNzMxMgorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm03MjB0IGVwNzMxMgogCiBpbXBhN19jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTcyMHQgaW1wYTcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtNzIwdCBpbXBhNwogCiBtb2RuZXQ1MF9jb25maWcgOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTcyMHQgbW9kbmV0NTAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtNzIwdCBtb2RuZXQ1MAogCiBldmI0NTEwX2NvbmZpZyA6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtNzIwdCBldmI0NTEwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTcyMHQgZXZiNDUxMAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBYU2NhbGUgU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBhZHN2aXhfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgYWRzdml4CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIHB4YSBhZHN2aXgKIAogY2VyZjI1MF9jb25maWcgOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHB4YSBjZXJmMjUwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIHB4YSBjZXJmMjUwCiAKIGNyYWRsZV9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHB4YSBjcmFkbGUKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gcHhhIGNyYWRsZQogCiBjc2IyMjZfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgY3NiMjI2CisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIHB4YSBjc2IyMjYKIAogZGVsdGFfY29uZmlnIDoKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgZGVsdGEKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gcHhhIGRlbHRhCiAKIGlubm9rb21fY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgaW5ub2tvbQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBweGEgaW5ub2tvbQogCiBpeGRwNDI1X2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gaXhwIGl4ZHA0MjUKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gaXhwIGl4ZHA0MjUKIAogaXhkcGc0MjVfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBpeHAgaXhkcDQyNQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBpeHAgaXhkcDQyNQogCiBsdWJib2NrX2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gcHhhIGx1YmJvY2sKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gcHhhIGx1YmJvY2sKIAogcGxlYjJfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgcGxlYjIKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gcHhhIHBsZWIyCiAKIGxvZ29kbF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHB4YSBsb2dvZGwKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gcHhhIGxvZ29kbAogCiBwZG5iM19jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGl4cCBwZG5iMyBwcm9kcml2ZQorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBpeHAgcGRuYjMgcHJvZHJpdmUKIAogcHhhMjU1X2lkcF9jb25maWc6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gcHhhIHB4YTI1NV9pZHAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gcHhhIHB4YTI1NV9pZHAKIAogd2VwZXAyNTBfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgd2VwZXAyNTAKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gcHhhIHdlcGVwMjUwCiAKIHhhZW5pYXhfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgeGFlbmlheAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBweGEgeGFlbmlheAogCiB4bTI1MF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHB4YSB4bTI1MAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBweGEgeG0yNTAKIAogeHNlbmdpbmVfY29uZmlnIDoJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgeHNlbmdpbmUKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gcHhhIHhzZW5naW5lCiAKIHp5bG9uaXRlX2NvbmZpZyA6Ci0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gcHhhIHp5bG9uaXRlCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIHB4YSB6eWxvbml0ZQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBBUk0xMTM2IFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIG9tYXAyNDIwaDRfY29uZmlnIDogICAgdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm0xMTM2IG9tYXAyNDIwaDQKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtMTEzNiBvbWFwMjQyMGg0CiAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgaTM4NgpAQCAtMTc1NywxMyArMjAxMCwxMyBAQAogIyMgQU1EIFNDNTIwIENEUAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogc2M1MjBfY2RwX2NvbmZpZwk6CXVuY29uZmlnCi0JQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBpMzg2IGkzODYgc2M1MjBfY2RwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgaTM4NiBpMzg2IHNjNTIwX2NkcAogCiBzYzUyMF9zcHVua19jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgaTM4NiBpMzg2IHNjNTIwX3NwdW5rCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgaTM4NiBpMzg2IHNjNTIwX3NwdW5rCiAKIHNjNTIwX3NwdW5rX3JlbF9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgaTM4NiBpMzg2IHNjNTIwX3NwdW5rCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgaTM4NiBpMzg2IHNjNTIwX3NwdW5rCiAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgTUlQUwpAQCAtMTc3OCw2MyArMjAzMSw3MCBAQAogaW5jYWlwXzEzM01Iel9jb25maWcJXAogaW5jYWlwXzE1ME1Iel9jb25maWcJXAogaW5jYWlwX2NvbmZpZzogdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCiAJQFsgLXogIiQoZmluZHN0cmluZyBfMTAwTUh6LCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDUFVfQ0xPQ0tfUkFURSAxMDAwMDAwMDAiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENQVV9DTE9DS19SQVRFIDEwMDAwMDAwMCIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiB3aXRoIDEwME1IeiBzeXN0ZW0gY2xvY2siIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBfMTMzTUh6LCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDUFVfQ0xPQ0tfUkFURSAxMzMwMDAwMDAiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENQVV9DTE9DS19SQVRFIDEzMzAwMDAwMCIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiB3aXRoIDEzM01IeiBzeXN0ZW0gY2xvY2siIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBfMTUwTUh6LCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDUFVfQ0xPQ0tfUkFURSAxNTAwMDAwMDAiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENQVV9DTE9DS19SQVRFIDE1MDAwMDAwMCIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiB3aXRoIDE1ME1IeiBzeXN0ZW0gY2xvY2siIDsgXAogCQl9Ci0JQC4vbWtjb25maWcgLWEgJChjYWxsIHh0cmFjdF9pbmNhaXAsJEApIG1pcHMgbWlwcyBpbmNhaXAKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF9pbmNhaXAsJEApIG1pcHMgbWlwcyBpbmNhaXAKIAogdGIwMjI5X2NvbmZpZzogdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIG1pcHMgbWlwcyB0YjAyMjkKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBtaXBzIG1pcHMgdGIwMjI5CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIE1JUFMzMiBBVTFYMDAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGRiYXUxMDAwX2NvbmZpZwkJOiAJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCi0JQGVjaG8gIiNkZWZpbmUgQ09ORklHX0RCQVUxMDAwIDEiID4+aW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hIGRiYXUxeDAwIG1pcHMgbWlwcyBkYmF1MXgwMAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUBlY2hvICIjZGVmaW5lIENPTkZJR19EQkFVMTAwMCAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAJChNS0NPTkZJRykgLWEgZGJhdTF4MDAgbWlwcyBtaXBzIGRiYXUxeDAwCiAKIGRiYXUxMTAwX2NvbmZpZwkJOiAJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCi0JQGVjaG8gIiNkZWZpbmUgQ09ORklHX0RCQVUxMTAwIDEiID4+aW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hIGRiYXUxeDAwIG1pcHMgbWlwcyBkYmF1MXgwMAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUBlY2hvICIjZGVmaW5lIENPTkZJR19EQkFVMTEwMCAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAJChNS0NPTkZJRykgLWEgZGJhdTF4MDAgbWlwcyBtaXBzIGRiYXUxeDAwCiAKIGRiYXUxNTAwX2NvbmZpZwkJOiAJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCi0JQGVjaG8gIiNkZWZpbmUgQ09ORklHX0RCQVUxNTAwIDEiID4+aW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hIGRiYXUxeDAwIG1pcHMgbWlwcyBkYmF1MXgwMAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUBlY2hvICIjZGVmaW5lIENPTkZJR19EQkFVMTUwMCAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAJChNS0NPTkZJRykgLWEgZGJhdTF4MDAgbWlwcyBtaXBzIGRiYXUxeDAwCiAKIGRiYXUxNTUwX2NvbmZpZwkJOgl1bmNvbmZpZwotCUAgPmluY2x1ZGUvY29uZmlnLmgKLQlAZWNobyAiI2RlZmluZSBDT05GSUdfREJBVTE1NTAgMSIgPj5pbmNsdWRlL2NvbmZpZy5oCi0JQC4vbWtjb25maWcgLWEgZGJhdTF4MDAgbWlwcyBtaXBzIGRiYXUxeDAwCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCisJQGVjaG8gIiNkZWZpbmUgQ09ORklHX0RCQVUxNTUwIDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtYSBkYmF1MXgwMCBtaXBzIG1pcHMgZGJhdTF4MDAKIAogZGJhdTE1NTBfZWxfY29uZmlnCToJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCi0JQGVjaG8gIiNkZWZpbmUgQ09ORklHX0RCQVUxNTUwIDEiID4+aW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hIGRiYXUxeDAwIG1pcHMgbWlwcyBkYmF1MXgwMAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUBlY2hvICIjZGVmaW5lIENPTkZJR19EQkFVMTU1MCAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAJChNS0NPTkZJRykgLWEgZGJhdTF4MDAgbWlwcyBtaXBzIGRiYXUxeDAwCiAKIHBiMTAwMF9jb25maWcJCTogCXVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAotCUBlY2hvICIjZGVmaW5lIENPTkZJR19QQjEwMDAgMSIgPj5pbmNsdWRlL2NvbmZpZy5oCi0JQC4vbWtjb25maWcgLWEgcGIxeDAwIG1pcHMgbWlwcyBwYjF4MDAKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUAgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfUEIxMDAwIDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaAorCUAkKE1LQ09ORklHKSAtYSBwYjF4MDAgbWlwcyBtaXBzIHBiMXgwMAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNSVBTNjQgNUtjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHB1cnBsZV9jb25maWcgOgkJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIG1pcHMgbWlwcyBwdXJwbGUKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBtaXBzIG1pcHMgcHVycGxlCiAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgTmlvcwpAQCAtMTg0Niw4MCArMjEwNiw4MyBAQAogREsxQzIwX3NhZmVfMzJfY29uZmlnCQlcCiBESzFDMjBfc3RhbmRhcmRfMzJfY29uZmlnCVwKIERLMUMyMF9jb25maWc6CXVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgX3NhZmVfMzIsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19OSU9TX1NBRkVfMzIgMSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05JT1NfU0FGRV8zMiAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIE5JT1MgJ3NhZmVfMzInIGNvbmZpZ3VyYXRpb24iIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBfc3RhbmRhcmRfMzIsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19OSU9TX1NUQU5EQVJEXzMyIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19OSU9TX1NUQU5EQVJEXzMyIDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gTklPUyAnc3RhbmRhcmRfMzInIGNvbmZpZ3VyYXRpb24iIDsgXAogCQl9CiAJQFsgLXogIiQoZmluZHN0cmluZyBESzFDMjBfY29uZmlnLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTklPU19TVEFOREFSRF8zMiAxIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTklPU19TVEFOREFSRF8zMiAxIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCSAgZWNobyAiLi4uIE5JT1MgJ3N0YW5kYXJkXzMyJyBjb25maWd1cmF0aW9uIChERUZBVUxUKSIgOyBcCiAJCX0KLQlALi9ta2NvbmZpZyAtYSBESzFDMjAgbmlvcyBuaW9zIGRrMWMyMCBhbHRlcmEKKwlAJChNS0NPTkZJRykgLWEgREsxQzIwIG5pb3MgbmlvcyBkazFjMjAgYWx0ZXJhCiAKIERLMVMxMF9zYWZlXzMyX2NvbmZpZwkJXAogREsxUzEwX3N0YW5kYXJkXzMyX2NvbmZpZwlcCiBESzFTMTBfbXR4X2xka18yMF9jb25maWcJXAogREsxUzEwX2NvbmZpZzoJdW5jb25maWcKLQlAID5pbmNsdWRlL2NvbmZpZy5oCisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAID4kKG9iailpbmNsdWRlL2NvbmZpZy5oCiAJQFsgLXogIiQoZmluZHN0cmluZyBfc2FmZV8zMiwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05JT1NfU0FGRV8zMiAxIiA+PmluY2x1ZGUvY29uZmlnLmggOyBcCisJCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTklPU19TQUZFXzMyIDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gTklPUyAnc2FmZV8zMicgY29uZmlndXJhdGlvbiIgOyBcCiAJCX0KIAlAWyAteiAiJChmaW5kc3RyaW5nIF9zdGFuZGFyZF8zMiwkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05JT1NfU1RBTkRBUkRfMzIgMSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05JT1NfU1RBTkRBUkRfMzIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiBOSU9TICdzdGFuZGFyZF8zMicgY29uZmlndXJhdGlvbiIgOyBcCiAJCX0KIAlAWyAteiAiJChmaW5kc3RyaW5nIF9tdHhfbGRrXzIwLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTklPU19NVFhfTERLXzIwIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19OSU9TX01UWF9MREtfMjAgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiBOSU9TICdtdHhfbGRrXzIwJyBjb25maWd1cmF0aW9uIiA7IFwKIAkJfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgREsxUzEwX2NvbmZpZywkQCkiIF0gfHwgXAotCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05JT1NfU1RBTkRBUkRfMzIgMSIgPj5pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQl7IGVjaG8gIiNkZWZpbmUgQ09ORklHX05JT1NfU1RBTkRBUkRfMzIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiBOSU9TICdzdGFuZGFyZF8zMicgY29uZmlndXJhdGlvbiAoREVGQVVMVCkiIDsgXAogCQl9Ci0JQC4vbWtjb25maWcgLWEgREsxUzEwIG5pb3MgbmlvcyBkazFzMTAgYWx0ZXJhCisJQCQoTUtDT05GSUcpIC1hIERLMVMxMCBuaW9zIG5pb3MgZGsxczEwIGFsdGVyYQogCiBBRE5QRVNDMV9ETlBFVkEyX2Jhc2VfMzJfY29uZmlnCVwKIEFETlBFU0MxX2Jhc2VfMzJfY29uZmlnCQlcCiBBRE5QRVNDMV9jb25maWc6IHVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAorCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQCA+JChvYmopaW5jbHVkZS9jb25maWcuaAogCUBbIC16ICIkKGZpbmRzdHJpbmcgX0ROUEVWQTIsJEApIiBdIHx8IFwKLQkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19ETlBFVkEyIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19ETlBFVkEyIDEiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJICBlY2hvICIuLi4gRE5QL0VWQTIgY29uZmlndXJhdGlvbiIgOyBcCiAJCX0KIAlAWyAteiAiJChmaW5kc3RyaW5nIF9iYXNlXzMyLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTklPU19CQVNFXzMyIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19OSU9TX0JBU0VfMzIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiBOSU9TICdiYXNlXzMyJyBjb25maWd1cmF0aW9uIiA7IFwKIAkJfQogCUBbIC16ICIkKGZpbmRzdHJpbmcgQUROUEVTQzFfY29uZmlnLCRAKSIgXSB8fCBcCi0JCXsgZWNobyAiI2RlZmluZSBDT05GSUdfTklPU19CQVNFXzMyIDEiID4+aW5jbHVkZS9jb25maWcuaCA7IFwKKwkJeyBlY2hvICIjZGVmaW5lIENPTkZJR19OSU9TX0JBU0VfMzIgMSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQkgIGVjaG8gIi4uLiBOSU9TICdiYXNlXzMyJyBjb25maWd1cmF0aW9uIChERUZBVUxUKSIgOyBcCiAJCX0KLQlALi9ta2NvbmZpZyAtYSBBRE5QRVNDMSBuaW9zIG5pb3MgYWRucGVzYzEgc3N2CisJQCQoTUtDT05GSUcpIC1hIEFETlBFU0MxIG5pb3MgbmlvcyBhZG5wZXNjMSBzc3YKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTmlvcy1JSQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBFUDFDMjBfY29uZmlnIDogdW5jb25maWcKLQlALi9ta2NvbmZpZyAgRVAxQzIwIG5pb3MyIG5pb3MyIGVwMWMyMCBhbHRlcmEKKwlAJChNS0NPTkZJRykgIEVQMUMyMCBuaW9zMiBuaW9zMiBlcDFjMjAgYWx0ZXJhCiAKIEVQMVMxMF9jb25maWcgOiB1bmNvbmZpZwotCUAuL21rY29uZmlnICBFUDFTMTAgbmlvczIgbmlvczIgZXAxczEwIGFsdGVyYQorCUAkKE1LQ09ORklHKSAgRVAxUzEwIG5pb3MyIG5pb3MyIGVwMXMxMCBhbHRlcmEKIAogRVAxUzQwX2NvbmZpZyA6IHVuY29uZmlnCi0JQC4vbWtjb25maWcgIEVQMVM0MCBuaW9zMiBuaW9zMiBlcDFzNDAgYWx0ZXJhCisJQCQoTUtDT05GSUcpICBFUDFTNDAgbmlvczIgbmlvczIgZXAxczQwIGFsdGVyYQogCiBQSzFDMjBfY29uZmlnIDogdW5jb25maWcKLQlALi9ta2NvbmZpZyAgUEsxQzIwIG5pb3MyIG5pb3MyIHBrMWMyMCBwc3llbnQKKwlAJChNS0NPTkZJRykgIFBLMUMyMCBuaW9zMiBuaW9zMiBwazFjMjAgcHN5ZW50CiAKIFBDSTU0NDFfY29uZmlnIDogdW5jb25maWcKLQlALi9ta2NvbmZpZyAgUENJNTQ0MSBuaW9zMiBuaW9zMiBwY2k1NDQxIHBzeWVudAorCUAkKE1LQ09ORklHKSAgUENJNTQ0MSBuaW9zMiBuaW9zMiBwY2k1NDQxIHBzeWVudAogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIE1pY3JvQmxhemUKQEAgLTE5MjgsNjEgKzIxOTEsNzIgQEAKICMjIE1pY3JvYmxhemUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIHN1emFrdV9jb25maWc6CXVuY29uZmlnCi0JQCA+aW5jbHVkZS9jb25maWcuaAotCUBlY2hvICIjZGVmaW5lIENPTkZJR19TVVpBS1UgMSIgPj4gaW5jbHVkZS9jb25maWcuaAotCUAuL21rY29uZmlnIC1hICQoQDpfY29uZmlnPSkgbWljcm9ibGF6ZSBtaWNyb2JsYXplIHN1emFrdSBBdG1hcmtUZWNobm8KKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUAgPiQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfU1VaQUtVIDEiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmgKKwlAJChNS0NPTkZJRykgLWEgJChAOl9jb25maWc9KSBtaWNyb2JsYXplIG1pY3JvYmxhemUgc3V6YWt1IEF0bWFya1RlY2hubwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBCbGFja2ZpbgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogZXpraXQ1MzNfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGJsYWNrZmluIGJmNTMzIGV6a2l0NTMzCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYmxhY2tmaW4gYmY1MzMgZXpraXQ1MzMKIAogc3RhbXBfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGJsYWNrZmluIGJmNTMzIHN0YW1wCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYmxhY2tmaW4gYmY1MzMgc3RhbXAKIAogZHNwc3RhbXBfY29uZmlnCToJdW5jb25maWcKLQlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGJsYWNrZmluIGJmNTMzIGRzcF9zdGFtcAorCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGJsYWNrZmluIGJmNTMzIGRzcF9zdGFtcAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGNsZWFuOgotCWZpbmQgLiAtdHlwZSBmIFwKKwlmaW5kICQoT0JKVFJFRSkgLXR5cGUgZiBcCiAJCVwoIC1uYW1lICdjb3JlJyAtbyAtbmFtZSAnKi5iYWsnIC1vIC1uYW1lICcqficgXAogCQktbyAtbmFtZSAnKi5vJyAgLW8gLW5hbWUgJyouYScgIFwpIC1wcmludCBcCiAJCXwgeGFyZ3Mgcm0gLWYKLQlybSAtZiBleGFtcGxlcy9oZWxsb193b3JsZCBleGFtcGxlcy90aW1lciBcCi0JICAgICAgZXhhbXBsZXMvZWVwcm8xMDBfZWVwcm9tIGV4YW1wbGVzL3NjaGVkIFwKLQkgICAgICBleGFtcGxlcy9tZW1fdG9fbWVtX2lkbWEyaW50ciBleGFtcGxlcy84MjU1OV9lZXByb20gXAotCSAgICAgIGV4YW1wbGVzL3NtYzkxMTExX2VlcHJvbSBcCi0JICAgICAgZXhhbXBsZXMvdGVzdF9idXJzdAotCXJtIC1mIHRvb2xzL2ltZzJzcmVjIHRvb2xzL21raW1hZ2UgdG9vbHMvZW52Y3JjIHRvb2xzL2dlbl9ldGhfYWRkcgotCXJtIC1mIHRvb2xzL21wYzg2eF9jbGsgdG9vbHMvbmNiCi0Jcm0gLWYgdG9vbHMvZWFzeWxvZ28vZWFzeWxvZ28gdG9vbHMvYm1wX2xvZ28KLQlybSAtZiB0b29scy9nZGIvYXN0ZXN0IHRvb2xzL2dkYi9nZGJjb250IHRvb2xzL2dkYi9nZGJzZW5kCi0Jcm0gLWYgdG9vbHMvZW52L2Z3X3ByaW50ZW52IHRvb2xzL2Vudi9md19zZXRlbnYKLQlybSAtZiBib2FyZC9jcmF5L0wxL2Jvb3RzY3JpcHQuYyBib2FyZC9jcmF5L0wxL2Jvb3RzY3JpcHQuaW1hZ2UKLQlybSAtZiBib2FyZC9uZXRzdGFyL2VlcHJvbSBib2FyZC9uZXRzdGFyL2NyY2VrCi0Jcm0gLWYgYm9hcmQvbmV0c3Rhci8qLnNyZWMgYm9hcmQvbmV0c3Rhci8qLmJpbgotCXJtIC1mIGJvYXJkL3RyYWIvdHJhYl9ma3QgYm9hcmQvdm9pY2VibHVlL2VlcHJvbQotCXJtIC1mIGJvYXJkL2ludGVncmF0b3JhcC91LWJvb3QubGRzIGJvYXJkL2ludGVncmF0b3JjcC91LWJvb3QubGRzCisJcm0gLWYgJChvYmopZXhhbXBsZXMvaGVsbG9fd29ybGQgJChvYmopZXhhbXBsZXMvdGltZXIgXAorCSAgICAgICQob2JqKWV4YW1wbGVzL2VlcHJvMTAwX2VlcHJvbSAkKG9iailleGFtcGxlcy9zY2hlZCBcCisJICAgICAgJChvYmopZXhhbXBsZXMvbWVtX3RvX21lbV9pZG1hMmludHIgJChvYmopZXhhbXBsZXMvODI1NTlfZWVwcm9tIFwKKwkgICAgICAkKG9iailleGFtcGxlcy9zbWM5MTExMV9lZXByb20gJChvYmopZXhhbXBsZXMvaW50ZXJydXB0IFwKKwkgICAgICAkKG9iailleGFtcGxlcy90ZXN0X2J1cnN0CisJcm0gLWYgJChvYmopdG9vbHMvaW1nMnNyZWMgJChvYmopdG9vbHMvbWtpbWFnZSAkKG9iail0b29scy9lbnZjcmMgXAorCQkkKG9iail0b29scy9nZW5fZXRoX2FkZHIKKwlybSAtZiAkKG9iail0b29scy9tcGM4NnhfY2xrICQob2JqKXRvb2xzL25jYgorCXJtIC1mICQob2JqKXRvb2xzL2Vhc3lsb2dvL2Vhc3lsb2dvICQob2JqKXRvb2xzL2JtcF9sb2dvCisJcm0gLWYgJChvYmopdG9vbHMvZ2RiL2FzdGVzdCAkKG9iail0b29scy9nZGIvZ2RiY29udCAkKG9iail0b29scy9nZGIvZ2Ric2VuZAorCXJtIC1mICQob2JqKXRvb2xzL2Vudi9md19wcmludGVudiAkKG9iail0b29scy9lbnYvZndfc2V0ZW52CisJcm0gLWYgJChvYmopYm9hcmQvY3JheS9MMS9ib290c2NyaXB0LmMgJChvYmopYm9hcmQvY3JheS9MMS9ib290c2NyaXB0LmltYWdlCisJcm0gLWYgJChvYmopYm9hcmQvbmV0c3Rhci9lZXByb20gJChvYmopYm9hcmQvbmV0c3Rhci9jcmNlayAkKG9iailib2FyZC9uZXRzdGFyL2NyY2l0CisJcm0gLWYgJChvYmopYm9hcmQvbmV0c3Rhci8qLnNyZWMgJChvYmopYm9hcmQvbmV0c3Rhci8qLmJpbgorCXJtIC1mICQob2JqKWJvYXJkL3RyYWIvdHJhYl9ma3QgJChvYmopYm9hcmQvdm9pY2VibHVlL2VlcHJvbQorCXJtIC1mICQob2JqKWJvYXJkL2ludGVncmF0b3JhcC91LWJvb3QubGRzICQob2JqKWJvYXJkL2ludGVncmF0b3JjcC91LWJvb3QubGRzCisJcm0gLWYgJChvYmopaW5jbHVkZS9ibXBfbG9nby5oCisJZmluZCBuYW5kX3NwbCAtbG5hbWUgIioiIC1wcmludCB8IHhhcmdzIHJtIC1mCisJcm0gLWYgbmFuZF9zcGwvdS1ib290LXNwbCBuYW5kX3NwbC91LWJvb3Qtc3BsLm1hcAogCiBjbG9iYmVyOgljbGVhbgotCWZpbmQgLiAtdHlwZSBmIFwoIC1uYW1lIC5kZXBlbmQgXAorCWZpbmQgJChPQkpUUkVFKSAtdHlwZSBmIFwoIC1uYW1lIC5kZXBlbmQgXAogCQktbyAtbmFtZSAnKi5zcmVjJyAtbyAtbmFtZSAnKi5iaW4nIC1vIC1uYW1lIHUtYm9vdC5pbWcgXCkgXAogCQktcHJpbnQwIFwKIAkJfCB4YXJncyAtMCBybSAtZgotCXJtIC1mICQoT0JKUykgKi5iYWsgdGFncyBUQUdTIGluY2x1ZGUvdmVyc2lvbl9hdXRvZ2VuZXJhdGVkLmgKLQlybSAtZnIgKi4qfgotCXJtIC1mIHUtYm9vdCB1LWJvb3QubWFwIHUtYm9vdC5oZXggJChBTEwpCi0Jcm0gLWYgdG9vbHMvY3JjMzIuYyB0b29scy9lbnZpcm9ubWVudC5jIHRvb2xzL2Vudi9jcmMzMi5jCi0Jcm0gLWYgdG9vbHMvaW5jYS1zd2FwLWJ5dGVzIGNwdS9tcGM4MjR4L2JlZGJ1Z182MDNlLmMKLQlybSAtZiBpbmNsdWRlL2FzbS9wcm9jIGluY2x1ZGUvYXNtL2FyY2ggaW5jbHVkZS9hc20KKwlybSAtZiAkKE9CSlMpICQob2JqKSouYmFrICQob2JqKWN0YWdzICQob2JqKWV0YWdzICQob2JqKVRBR1MgJChvYmopaW5jbHVkZS92ZXJzaW9uX2F1dG9nZW5lcmF0ZWQuaAorCXJtIC1mciAkKG9iaikqLip+CisJcm0gLWYgJChvYmopdS1ib290ICQob2JqKXUtYm9vdC5tYXAgJChvYmopdS1ib290LmhleCAkKEFMTCkKKwlybSAtZiAkKG9iail0b29scy9jcmMzMi5jICQob2JqKXRvb2xzL2Vudmlyb25tZW50LmMgJChvYmopdG9vbHMvZW52L2NyYzMyLmMKKwlybSAtZiAkKG9iail0b29scy9pbmNhLXN3YXAtYnl0ZXMgJChvYmopY3B1L21wYzgyNHgvYmVkYnVnXzYwM2UuYworCXJtIC1mICQob2JqKWluY2x1ZGUvYXNtL3Byb2MgJChvYmopaW5jbHVkZS9hc20vYXJjaCAkKG9iailpbmNsdWRlL2FzbQogCitpZmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiBtcnByb3BlciBcCiBkaXN0Y2xlYW46CWNsb2JiZXIgdW5jb25maWcKK2Vsc2UKK21ycHJvcGVyIFwKK2Rpc3RjbGVhbjoJY2xvYmJlciB1bmNvbmZpZworCXJtIC1yZiAkKE9CSlRSRUUpLyoKK2VuZGlmCiAKIGJhY2t1cDoKIAlGPWBiYXNlbmFtZSAkKFRPUERJUilgIDsgY2QgLi4gOyBcCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggMGZkYTAzZi4uMzJhNWQ2OCAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMzA2LDcgKzMwNiw3IEBACiAKIAkJQ09ORklHX0FSTUFESUxMTywJQ09ORklHX0FUOTFSTTkyMDBESywJQ09ORklHX0NFUkYyNTAsCiAJCUNPTkZJR19DU0I2MzcsCQlDT05GSUdfREVMVEEsCQlDT05GSUdfRE5QMTExMCwKLQkgCUNPTkZJR19FUDczMTIsCQlDT05GSUdfSDJfT01BUDE2MTAsCUNPTkZJR19ISFBfQ1JBRExFLAorCQlDT05GSUdfRVA3MzEyLAkJQ09ORklHX0gyX09NQVAxNjEwLAlDT05GSUdfSEhQX0NSQURMRSwKIAkJQ09ORklHX0lNUEE3LAkgICAgQ09ORklHX0lOTk9WQVRPUk9NQVAxNTEwLAlDT05GSUdfSU5OT1ZBVE9ST01BUDE2MTAsCiAJCUNPTkZJR19LQjkyMDIsCQlDT05GSUdfTEFSVCwJCUNPTkZJR19MUEQ3QTQwMCwKIAkJQ09ORklHX0xVQkJPQ0ssCQlDT05GSUdfT1NLX09NQVA1OTEyLAlDT05GSUdfT01BUDI0MjBINCwKQEAgLTE0OTUsNiArMTQ5NSwxMiBAQAogCQlvZiB0aGUgYmFja3NsYXNoZXMgYmVmb3JlIHNlbWljb2xvbnMgYW5kIHNwZWNpYWwKIAkJc3ltYm9scy4KIAorLSBDb21tYW5kbGluZSBFZGl0aW5nIGFuZCBIaXN0b3J5OgorCQlDT05GSUdfQ01ETElORV9FRElUSU5HCisKKwkJRW5hYmxlIGVkaXRpb25nIGFuZCBIaXN0b3J5IGZ1bmN0aW9ucyBmb3IgaW50ZXJhY3RpdmUKKwkJY29tbWFuZGxpbmUgaW5wdXQgb3BlcmF0aW9ucworCiAtIERlZmF1bHQgRW52aXJvbm1lbnQ6CiAJCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MKIApAQCAtMjMyMiw2ICsyMzI4LDI2IEBACiAtICJ1LWJvb3QiIGlzIGFuIGltYWdlIGluIEVMRiBiaW5hcnkgZm9ybWF0CiAtICJ1LWJvb3Quc3JlYyIgaXMgaW4gTW90b3JvbGEgUy1SZWNvcmQgZm9ybWF0CiAKK0J5IGRlZmF1bHQgdGhlIGJ1aWxkIGlzIHBlcmZvcm1lZCBsb2NhbGx5IGFuZCB0aGUgb2JqZWN0cyBhcmUgc2F2ZWQKK2luIHRoZSBzb3VyY2UgZGlyZWN0b3J5LiBPbmUgb2YgdGhlIHR3byBtZXRob2RzIGNhbiBiZSB1c2VkIHRvIGNoYW5nZQordGhpcyBiZWhhdmlvciBhbmQgYnVpbGQgVS1Cb290IHRvIHNvbWUgZXh0ZXJuYWwgZGlyZWN0b3J5OgorCisxLiBBZGQgTz0gdG8gdGhlIG1ha2UgY29tbWFuZCBsaW5lIGludm9jYXRpb25zOgorCisJbWFrZSBPPS90bXAvYnVpbGQgZGlzdGNsZWFuCisJbWFrZSBPPS90bXAvYnVpbGQgTkFNRV9jb25maWcKKwltYWtlIE89L3RtcC9idWlsZCBhbGwKKworMi4gU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIEJVSUxEX0RJUiB0byBwb2ludCB0byB0aGUgZGVzaXJlZCBsb2NhdGlvbjoKKworCWV4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZAorCW1ha2UgZGlzdGNsZWFuCisJbWFrZSBOQU1FX2NvbmZpZworCW1ha2UgYWxsCisKK05vdGUgdGhhdCB0aGUgY29tbWFuZCBsaW5lICJPPSIgc2V0dGluZyBvdmVycmlkZXMgdGhlIEJVSUxEX0RJUiBlbnZpcm9ubWVudAordmFyaWFibGUuCisKIAogUGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIE1ha2VmaWxlcyBhc3N1bWUgeW91IGFyZSB1c2luZyBHTlUgbWFrZSwgc28KIGZvciBpbnN0YW5jZSBvbiBOZXRCU0QgeW91IG1pZ2h0IG5lZWQgdG8gdXNlICJnbWFrZSIgaW5zdGVhZCBvZgpAQCAtMjM3NSw2ICsyNDAxLDIyIEBACiAKIAlDUk9TU19DT01QSUxFPScgJyBNQUtFQUxMCiAKK1doZW4gdXNpbmcgdGhlIE1BS0VBTEwgc2NyaXB0LCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gYnVpbGQgVS1Cb290CitpbiB0aGUgc291cmNlIGRpcmVjdG9yeS4gVGhpcyBsb2NhdGlvbiBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZQorQlVJTERfRElSIGVudmlyb25tZW50IHZhcmlhYmxlLiBBbHNvLCBmb3IgZWFjaCB0YXJnZXQgYnVpbHQsIHRoZSBNQUtFQUxMCitzY3JpcHQgc2F2ZXMgdHdvIGxvZyBmaWxlcyAoPHRhcmdldD4uRVJSIGFuZCA8dGFyZ2V0Pi5NQUtFQUxMKSBpbiB0aGUKKzxzb3VyY2UgZGlyPi9MT0cgZGlyZWN0b3J5LiBUaGlzIGRlZmF1bHQgbG9jYXRpb24gY2FuIGJlIGNoYW5nZWQgYnkKK3NldHRpbmcgdGhlIE1BS0VBTExfTE9HRElSIGVudmlyb25tZW50IHZhcmlhYmxlLiBGb3IgZXhhbXBsZToKKworCWV4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZAorCWV4cG9ydCBNQUtFQUxMX0xPR0RJUj0vdG1wL2xvZworCUNST1NTX0NPTVBJTEU9cHBjXzh4eC0gTUFLRUFMTAorCitXaXRoIHRoZSBhYm92ZSBzZXR0aW5ncyBidWlsZCBvYmplY3RzIGFyZSBzYXZlZCBpbiB0aGUgL3RtcC9idWlsZCwgbG9nCitmaWxlcyBhcmUgc2F2ZWQgaW4gdGhlIC90bXAvbG9nIGFuZCB0aGUgc291cmNlIHRyZWUgcmVtYWlucyBjbGVhbiBkdXJpbmcKK3RoZSB3aG9sZSBidWlsZCBwcm9jZXNzLgorCisKIFNlZSBhbHNvICJVLUJvb3QgUG9ydGluZyBHdWlkZSIgYmVsb3cuCiAKIApAQCAtMzUxNywxMiArMzU1OSwxOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogQWxsIGNvbnRyaWJ1dGlvbnMgdG8gVS1Cb290IHNob3VsZCBjb25mb3JtIHRvIHRoZSBMaW51eCBrZXJuZWwKLWNvZGluZyBzdHlsZTsgc2VlIHRoZSBmaWxlICJEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlIiBpbiB5b3VyIExpbnV4Ci1rZXJuZWwgc291cmNlIGRpcmVjdG9yeS4KK2NvZGluZyBzdHlsZTsgc2VlIHRoZSBmaWxlICJEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlIiBhbmQgdGhlIHNjcmlwdAorInNjcmlwdHMvTGluZGVudCIgaW4geW91ciBMaW51eCBrZXJuZWwgc291cmNlIGRpcmVjdG9yeS4gIEluIHNvdXJjZXMKK29yaWdpbmF0aW5nIGZyb20gVS1Cb290IGEgc3R5bGUgY29ycmVzcG9uZGluZyB0byAiTGluZGVudCAtcGNzIiAoYWRkaW5nCitzcGFjZXMgYmVmb3JlIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24gY2FsbHMpIGlzIGFjdHVhbGx5IHVzZWQuCiAKLVBsZWFzZSBub3RlIHRoYXQgVS1Cb290IGlzIGltcGxlbWVudGVkIGluIEMgKGFuZCB0byBzb21lIHNtYWxsIHBhcnRzCi1pbiBBc3NlbWJsZXIpOyBubyBDKysgaXMgdXNlZCwgc28gcGxlYXNlIGRvIG5vdCB1c2UgQysrIHN0eWxlCi1jb21tZW50cyAoLy8pIGluIHlvdXIgY29kZS4KK1NvdXJjZSBmaWxlcyBvcmlnaW5hdGluZyBmcm9tIGEgZGlmZmVyZW50IHByb2plY3QgKGZvciBleGFtcGxlIHRoZQorTVREIHN1YnN5c3RlbSkgYXJlIGdlbmVyYWxseSBleGVtcHQgZnJvbSB0aGVzZSBndWlkZWxpbmVzIGFuZCBhcmUgbm90CityZWZvcm1hdGVkIHRvIGVhc2Ugc3Vic2VxdWVudCBtaWdyYXRpb24gdG8gbmV3ZXIgdmVyc2lvbnMgb2YgdGhvc2UKK3NvdXJjZXMuCisKK1BsZWFzZSBub3RlIHRoYXQgVS1Cb290IGlzIGltcGxlbWVudGVkIGluIEMgKGFuZCB0byBzb21lIHNtYWxsIHBhcnRzIGluCitBc3NlbWJsZXIpOyBubyBDKysgaXMgdXNlZCwgc28gcGxlYXNlIGRvIG5vdCB1c2UgQysrIHN0eWxlIGNvbW1lbnRzICgvLykKK2luIHlvdXIgY29kZS4KIAogUGxlYXNlIGFsc28gc3RpY2sgdG8gdGhlIGZvbGxvd2luZyBmb3JtYXR0aW5nIHJ1bGVzOgogLSByZW1vdmUgYW55IHRyYWlsaW5nIHdoaXRlIHNwYWNlCmRpZmYgLS1naXQgYS9ib2FyZC9BdG1hcmtUZWNobm8vc3V6YWt1L01ha2VmaWxlIGIvYm9hcmQvQXRtYXJrVGVjaG5vL3N1emFrdS9NYWtlZmlsZQppbmRleCA3YTE3MDY3Li5iNDIwMjY5IDEwMDY0NAotLS0gYS9ib2FyZC9BdG1hcmtUZWNobm8vc3V6YWt1L01ha2VmaWxlCisrKyBiL2JvYXJkL0F0bWFya1RlY2huby9zdXpha3UvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL01ha2VmaWxlIGIvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy9NYWtlZmlsZQppbmRleCAwNTk2NTcyLi41NzM2M2JjIDEwMDY0NAotLS0gYS9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL01ha2VmaWxlCisrKyBiL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gY2ZtX2ZsYXNoLm8gZmxhc2gubyBWQ3hLLm8KK0NPQkpTCT0gJChCT0FSRCkubyBjZm1fZmxhc2gubyBmbGFzaC5vIFZDeEsubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy90ZXh0YmFzZS5tayBiL2JvYXJkL0J1Uy9FQitNQ0YtRVYxMjMvdGV4dGJhc2UubWsKaW5kZXggMTAxMDZmNC4uZWNkZTZlZCAxMDA2NDQKLS0tIGEvYm9hcmQvQnVTL0VCK01DRi1FVjEyMy90ZXh0YmFzZS5taworKysgYi9ib2FyZC9CdVMvRUIrTUNGLUVWMTIzL3RleHRiYXNlLm1rCkBAIC0xICsxIEBACi1URVhUX0JBU0UgPSAweEYwMDAwMDAwCitURVhUX0JBU0UgPSAweEZGRTAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9MRU9YL2VscHQ4NjAvTWFrZWZpbGUgYi9ib2FyZC9MRU9YL2VscHQ4NjAvTWFrZWZpbGUKaW5kZXggM2U3MzE2My4uNDMwNDQ5NCAxMDA2NDQKLS0tIGEvYm9hcmQvTEVPWC9lbHB0ODYwL01ha2VmaWxlCisrKyBiL2JvYXJkL0xFT1gvZWxwdDg2MC9NYWtlZmlsZQpAQCAtNCw2ICs0LDkgQEAKICMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCiAjIFRoZSBMRU9YIHRlYW0gPHRlYW1AbGVveC5vcmc+LCBodHRwOi8vd3d3Lmxlb3gub3JnCiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIwogIyBMRU9YLm9yZyBpcyBhYm91dCB0aGUgZGV2ZWxvcG1lbnQgb2YgZnJlZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgcmVzb3VyY2VzCiAjICAgZm9yIHN5c3RlbSBvbiBjaGlwLgogIwpAQCAtMzEsMTggKzM0LDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL01ha2VmaWxlIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9NYWtlZmlsZQppbmRleCBiMTI0N2ZlLi5lOTIwNDgyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL01ha2VmaWxlCisrKyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsOCArMjIsMTIgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9tZW51KQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9iaW9zX2VtdWxhdG9yKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCiBDT0JKUwk9ICQoQk9BUkQpLm8gYXJ0aWNpYVMubyBmbGFzaC5vIHNlcmlhbC5vIHNtYnVzLm8gYXJ0aWNpYVNfcGNpLm8gXAogCQl2aWE2ODYubyBpODI1OS5vIC4uL2Jpb3NfZW11bGF0b3IveDg2aW50ZXJmYWNlLm8gCVwKQEAgLTMxLDI2ICszNSwyOSBAQAogCQlpbnRlcnJ1cHRzLm8gcHMya2JkLm8gdmlkZW8ubyB1c2JfdWhjaS5vIGVuZXQubwkgICAgICAgIFwKIAkJLi4vbWVudS9jbWRfbWVudS5vIGNtZF9ib290YS5vIG52cmFtLm8KIAotQU9CSlMJPSBib2FyZF9hc21faW5pdC5vIG1lbWlvLm8KLQotT0JKUwk9ICQoQ09CSlMpICQoQU9CSlMpCitTT0JKUwk9IGJvYXJkX2FzbV9pbml0Lm8gbWVtaW8ubwogCiBFTVVESVIgID0gLi4vYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUvCiBFTVVPQkogID0gJChFTVVESVIpZGVjb2RlLm8gJChFTVVESVIpb3BzMi5vICQoRU1VRElSKWZwdS5vICQoRU1VRElSKXByaW1fb3BzLm8gXAogCQkkKEVNVURJUilvcHMubyAkKEVNVURJUilzeXMubwotRU1VU1JDID0gJChFTVVPQko6Lm89LmMpCitFTVVTUkMgID0gJChFTVVPQko6Lm89LmMpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoRU1VU1JDKQotCW1ha2UgbGlieDg2ZW11LmEgLUMgLi4vYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUgLWYgbWFrZWZpbGUudWJvb3QgQ1JPU1NfQ09NUElMRT0kKENST1NTX0NPTVBJTEUpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKK0VNVU9CSiAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoRU1VT0JKKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykgJChFTVVTUkMpCisJbWFrZSAkKG9iailsaWJ4ODZlbXUuYSAtQyAuLi9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdSAtZiBtYWtlZmlsZS51Ym9vdCBDUk9TU19DT01QSUxFPSQoQ1JPU1NfQ09NUElMRSkKIAktcm0gJChMSUIpCi0JJChBUikgY3J2ICRAICQoT0JKUykgJChFTVVPQkopCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykgJChFTVVPQkopCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOiBNYWtlZmlsZSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL2V2ZW50LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS93aW4zMi9ldmVudC5jCmluZGV4IDg2NDQ4ZTMuLjYzODgwNTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL2V2ZW50LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvZXZlbnQuYwpAQCAtMTQ3LDE0ICsxNDcsMTQgQEAKIAkJaWYgKEVWVC5vbGRNb3ZlICE9IC0xKSB7CiAJCSAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeCA9IGV2dC53aGVyZV94Oy8qIE1vZGlmeSBleGlzdGluZyBvbmUgICovCiAJCSAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeSA9IGV2dC53aGVyZV95OwotLyogICAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ucmVsYXRpdmVfeCArPSBtaWNrZXlYOyAgICAvLyBUT0RPISAqLwotLyogICAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ucmVsYXRpdmVfeSArPSBtaWNrZXlZOyAgICAvLyBUT0RPISAqLworLyogICAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ucmVsYXRpdmVfeCArPSBtaWNrZXlYOyAgICAvIC8gVE9ETyEgKi8KKy8qICAgICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3kgKz0gbWlja2V5WTsgICAgLyAvIFRPRE8hICovCiAJCSAgICBldnQud2hhdCA9IDA7CiAJCSAgICB9CiAJCWVsc2UgewogCQkgICAgRVZULm9sZE1vdmUgPSBFVlQuZnJlZUhlYWQ7IC8qIFNhdmUgaWQgb2YgdGhpcyBtb3ZlIGV2ZW50ICAgKi8KLS8qICAgICAgICAgICAgICAgICAgZXZ0LnJlbGF0aXZlX3ggPSBtaWNrZXlYOyAgICAvLyBUT0RPISAqLwotLyogICAgICAgICAgICAgICAgICBldnQucmVsYXRpdmVfeSA9IG1pY2tleVk7ICAgIC8vIFRPRE8hICovCisvKiAgICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV94ID0gbWlja2V5WDsgICAgLyAvIFRPRE8hICovCisvKiAgICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV95ID0gbWlja2V5WTsgICAgLyAvIFRPRE8hICovCiAJCSAgICB9CiAJCX0KIAkgICAgZWxzZQpkaWZmIC0tZ2l0IGEvYm9hcmQvTWFydmVsbC9kYjY0MzYwL01ha2VmaWxlIGIvYm9hcmQvTWFydmVsbC9kYjY0MzYwL01ha2VmaWxlCmluZGV4IDc2OGNjZGQuLmEwODRjODkgMTAwNjQ0Ci0tLSBhL2JvYXJkL01hcnZlbGwvZGI2NDM2MC9NYWtlZmlsZQorKysgYi9ib2FyZC9NYXJ2ZWxsL2RiNjQzNjAvTWFrZWZpbGUKQEAgLTEsNCArMSw3IEBACiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIyAKICMgKEMpIENvcHlyaWdodCAyMDAxCiAjIEpvc2ggSHViZXIgPGh1YmVyQG1jbHguY29tPiwgTWlzc2lvbiBDcml0aWNhbCBMaW51eCwgSW5jLgogIwpAQCAtMjIsMjMgKzI1LDMwIEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCiBTT0JKUwk9IC4uL2NvbW1vbi9taXNjLm8KIAotT0JKUwk9ICQoQk9BUkQpLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL3NlcmlhbC5vIC4uL2NvbW1vbi9tZW1vcnkubyBwY2kubyBcCitDT0JKUwk9ICQoQk9BUkQpLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL3NlcmlhbC5vIC4uL2NvbW1vbi9tZW1vcnkubyBwY2kubyBcCiAJICBtdl9ldGgubyAuLi9jb21tb24vbnMxNjU1MC5vIG1wc2MubyAuLi9jb21tb24vaTJjLm8gXAogCSAgc2RyYW1faW5pdC5vIC4uL2NvbW1vbi9pbnRlbF9mbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9NYXJ2ZWxsL2RiNjQ0NjAvTWFrZWZpbGUgYi9ib2FyZC9NYXJ2ZWxsL2RiNjQ0NjAvTWFrZWZpbGUKaW5kZXggNzY4Y2NkZC4uYTA4NGM4OSAxMDA2NDQKLS0tIGEvYm9hcmQvTWFydmVsbC9kYjY0NDYwL01ha2VmaWxlCisrKyBiL2JvYXJkL01hcnZlbGwvZGI2NDQ2MC9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjIAogIyAoQykgQ29weXJpZ2h0IDIwMDEKICMgSm9zaCBIdWJlciA8aHViZXJAbWNseC5jb20+LCBNaXNzaW9uIENyaXRpY2FsIExpbnV4LCBJbmMuCiAjCkBAIC0yMiwyMyArMjUsMzAgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKIFNPQkpTCT0gLi4vY29tbW9uL21pc2MubwogCi1PQkpTCT0gJChCT0FSRCkubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vc2VyaWFsLm8gLi4vY29tbW9uL21lbW9yeS5vIHBjaS5vIFwKK0NPQkpTCT0gJChCT0FSRCkubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vc2VyaWFsLm8gLi4vY29tbW9uL21lbW9yeS5vIHBjaS5vIFwKIAkgIG12X2V0aC5vIC4uL2NvbW1vbi9uczE2NTUwLm8gbXBzYy5vIC4uL2NvbW1vbi9pMmMubyBcCiAJICBzZHJhbV9pbml0Lm8gLi4vY29tbW9uL2ludGVsX2ZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL01hcnZlbGwvaW5jbHVkZS9jb3JlLmggYi9ib2FyZC9NYXJ2ZWxsL2luY2x1ZGUvY29yZS5oCmluZGV4IDA4MWQ1ZmQuLmM0MTM0MzkgMTAwNjQ0Ci0tLSBhL2JvYXJkL01hcnZlbGwvaW5jbHVkZS9jb3JlLmgKKysrIGIvYm9hcmQvTWFydmVsbC9pbmNsdWRlL2NvcmUuaApAQCAtOTEsNyArOTEsMTAgQEAKICNkZWZpbmUgXzFHCQkweDQwMDAwMDAwCiAjZGVmaW5lIF8yRwkJMHg4MDAwMDAwMAogCisjaWZuZGVmCUJPT0xfV0FTX0RFRklORUQKKyNkZWZpbmUgQk9PTF9XQVNfREVGSU5FRAogdHlwZWRlZiBlbnVtIF9ib29se2ZhbHNlLHRydWV9IGJvb2w7CisjZW5kaWYKIAogLyogTGl0dGxlIHRvIEJpZyBlbmRpYW4gY29udmVyc2lvbiBtYWNyb3MgKi8KIApkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYQ2xhc3NpYy9NYWtlZmlsZSBiL2JvYXJkL1JQWENsYXNzaWMvTWFrZWZpbGUKaW5kZXggOTM5MDdiYS4uZDg4MzJhYyAxMDA2NDQKLS0tIGEvYm9hcmQvUlBYQ2xhc3NpYy9NYWtlZmlsZQorKysgYi9ib2FyZC9SUFhDbGFzc2ljL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGVjY3gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gZWNjeC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9SUFhsaXRlL01ha2VmaWxlIGIvYm9hcmQvUlBYbGl0ZS9NYWtlZmlsZQppbmRleCAxM2NlOWZjLi5lM2QyNGIzIDEwMDY0NAotLS0gYS9ib2FyZC9SUFhsaXRlL01ha2VmaWxlCisrKyBiL2JvYXJkL1JQWGxpdGUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9SUFhsaXRlX2R3L01ha2VmaWxlIGIvYm9hcmQvUlBYbGl0ZV9kdy9NYWtlZmlsZQppbmRleCBkNDU3MDIwLi5lM2QyNGIzIDEwMDY0NAotLS0gYS9ib2FyZC9SUFhsaXRlX2R3L01ha2VmaWxlCisrKyBiL2JvYXJkL1JQWGxpdGVfZHcvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL1JSdmlzaW9uL01ha2VmaWxlIGIvYm9hcmQvUlJ2aXNpb24vTWFrZWZpbGUKaW5kZXggZmRjNmZkNS4uZTNkMjRiMyAxMDA2NDQKLS0tIGEvYm9hcmQvUlJ2aXNpb24vTWFrZWZpbGUKKysrIGIvYm9hcmQvUlJ2aXNpb24vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2EzMDAwL01ha2VmaWxlIGIvYm9hcmQvYTMwMDAvTWFrZWZpbGUKaW5kZXggNWZkZTM2Mi4uNDNjMjdlOSAxMDA2NDQKLS0tIGEvYm9hcmQvYTMwMDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvYTMwMDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMgCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUyAJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2FkZGVyL01ha2VmaWxlIGIvYm9hcmQvYWRkZXIvTWFrZWZpbGUKaW5kZXggOTEyM2E4MC4uZDAyMjNiNSAxMDA2NDQKLS0tIGEvYm9hcmQvYWRkZXIvTWFrZWZpbGUKKysrIGIvYm9hcmQvYWRkZXIvTWFrZWZpbGUKQEAgLTEsNCArMSw3IEBACiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIwogIyBDb3B5cmlnaHQgKEMpIDIwMDQgQXJhYmVsbGEgU29mdHdhcmUgTHRkLgogIyBZdWxpIEJhcmNvaGVuIDx5dWxpQGFyYWJlbGxhc3cuY29tPgogIwpAQCAtMjMsMTEgKzI2LDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubworQ09CSlMJOj0gJChCT0FSRCkubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDUsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2Fkc3ZpeC9NYWtlZmlsZSBiL2JvYXJkL2Fkc3ZpeC9NYWtlZmlsZQppbmRleCAyNGQ1ZDA2Li4wZGFhMzgzIDEwMDY0NAotLS0gYS9ib2FyZC9hZHN2aXgvTWFrZWZpbGUKKysrIGIvYm9hcmQvYWRzdml4L01ha2VmaWxlCkBAIC0xLDYgKzEsNSBAQAotCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjQsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gYWRzdml4Lm8gcGNtY2lhLm8KK0NPQkpTCTo9IGFkc3ZpeC5vIHBjbWNpYS5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8gcHhhdm9sdGFnZS5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC00MCw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYWxhc2thL01ha2VmaWxlIGIvYm9hcmQvYWxhc2thL01ha2VmaWxlCmluZGV4IGE0YzFkMmUuLjk2OTU4MGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FsYXNrYS9NYWtlZmlsZQorKysgYi9ib2FyZC9hbGFza2EvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACi0jIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA1CisjCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM3LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9hbHRlcmEvZGsxYzIwL01ha2VmaWxlIGIvYm9hcmQvYWx0ZXJhL2RrMWMyMC9NYWtlZmlsZQppbmRleCA5MTgyYTRlLi4yNmM3MjRjIDEwMDY0NAotLS0gYS9ib2FyZC9hbHRlcmEvZGsxYzIwL01ha2VmaWxlCisrKyBiL2JvYXJkL2FsdGVyYS9kazFjMjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxNCArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8gbWlzYy5vCi0KK0NPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubyBtaXNjLm8KIFNPQkpTICA9IHZlY3RvcnMubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTQwLDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9hbHRlcmEvZGsxczEwL01ha2VmaWxlIGIvYm9hcmQvYWx0ZXJhL2RrMXMxMC9NYWtlZmlsZQppbmRleCA5MTgyYTRlLi4yNmM3MjRjIDEwMDY0NAotLS0gYS9ib2FyZC9hbHRlcmEvZGsxczEwL01ha2VmaWxlCisrKyBiL2JvYXJkL2FsdGVyYS9kazFzMTAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxNCArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8gbWlzYy5vCi0KK0NPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubyBtaXNjLm8KIFNPQkpTICA9IHZlY3RvcnMubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTQwLDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9hbHRlcmEvZXAxYzIwL01ha2VmaWxlIGIvYm9hcmQvYWx0ZXJhL2VwMWMyMC9NYWtlZmlsZQppbmRleCBhOTJiMjU4Li4yNjg3M2I2IDEwMDY0NAotLS0gYS9ib2FyZC9hbHRlcmEvZXAxYzIwL01ha2VmaWxlCisrKyBiL2JvYXJkL2FsdGVyYS9lcDFjMjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjIsMTcgKzIyLDIyIEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCiBDT01PQkpTIDo9IC4uL2NvbW1vbi9BTURMVjA2NUQubyAuLi9jb21tb24vZXBsZWQubwogCi1PQkpTCTo9ICQoQk9BUkQpLm8gJChDT01PQkpTKQorQ09CSlMJOj0gJChCT0FSRCkubyAkKENPTU9CSlMpCiAKLVNPQkpTCT0KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCi0kKExJQik6ICQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtNDIsOSArNDcsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2FsdGVyYS9lcDFzMTAvTWFrZWZpbGUgYi9ib2FyZC9hbHRlcmEvZXAxczEwL01ha2VmaWxlCmluZGV4IGE5MmIyNTguLjI2ODczYjYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FsdGVyYS9lcDFzMTAvTWFrZWZpbGUKKysrIGIvYm9hcmQvYWx0ZXJhL2VwMXMxMC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yMiwxNyArMjIsMjIgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKIENPTU9CSlMgOj0gLi4vY29tbW9uL0FNRExWMDY1RC5vIC4uL2NvbW1vbi9lcGxlZC5vCiAKLU9CSlMJOj0gJChCT0FSRCkubyAkKENPTU9CSlMpCitDT0JKUwk6PSAkKEJPQVJEKS5vICQoQ09NT0JKUykKIAotU09CSlMJPQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKLSQoTElCKTogJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC00Miw5ICs0Nyw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYWx0ZXJhL2VwMXM0MC9NYWtlZmlsZSBiL2JvYXJkL2FsdGVyYS9lcDFzNDAvTWFrZWZpbGUKaW5kZXggYTkyYjI1OC4uMjY4NzNiNiAxMDA2NDQKLS0tIGEvYm9hcmQvYWx0ZXJhL2VwMXM0MC9NYWtlZmlsZQorKysgYi9ib2FyZC9hbHRlcmEvZXAxczQwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTIyLDE3ICsyMiwyMiBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAogQ09NT0JKUyA6PSAuLi9jb21tb24vQU1ETFYwNjVELm8gLi4vY29tbW9uL2VwbGVkLm8KIAotT0JKUwk6PSAkKEJPQVJEKS5vICQoQ09NT0JKUykKK0NPQkpTCTo9ICQoQk9BUkQpLm8gJChDT01PQkpTKQogCi1TT0JKUwk9CitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAotJChMSUIpOiAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTQyLDkgKzQ3LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2JhbWJvby9NYWtlZmlsZSBiL2JvYXJkL2FtY2MvYmFtYm9vL01ha2VmaWxlCmluZGV4IDU2NTRmOTEuLjVmM2UzNGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvYmFtYm9vL01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2MvYmFtYm9vL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAyLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEyICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubwotT0JKUyAgICs9IGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiBTT0JKUwk9IGluaXQubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKwogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIApAQCAtNDAsOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2JhbWJvby9iYW1ib28uYyBiL2JvYXJkL2FtY2MvYmFtYm9vL2JhbWJvby5jCmluZGV4IDdjOTg5MjAuLmM5M2JhNmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvYmFtYm9vL2JhbWJvby5jCisrKyBiL2JvYXJkL2FtY2MvYmFtYm9vL2JhbWJvby5jCkBAIC00MzUsNyArNDM1LDcgQEAKIAkgKi8KIAlpbml0X3NwZF9hcnJheSgpOwogCi0JZHJhbV9zaXplID0gc3BkX3NkcmFtICgwKTsKKwlkcmFtX3NpemUgPSBzcGRfc2RyYW0oKTsKIAogCXJldHVybiBkcmFtX3NpemU7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2JhbWJvby9iYW1ib28uaCBiL2JvYXJkL2FtY2MvYmFtYm9vL2JhbWJvby5oCmluZGV4IDVmNWZjZGUuLjFjZTYzNjYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvYmFtYm9vL2JhbWJvby5oCisrKyBiL2JvYXJkL2FtY2MvYmFtYm9vL2JhbWJvby5oCkBAIC0yODMsMTAgKzI4Myw4IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgIHwgUFBDNDQwRVAgR1BJT3MgYWRkcmVzc2VzLgogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lIEdQSU8wX0JBU0UJIDB4RUY2MDBCMDAKICNkZWZpbmUgR1BJTzBfUkVBTAkgMHhFRjYwMEIwMAogCi0jZGVmaW5lIEdQSU8xX0JBU0UJIDB4RUY2MDBDMDAKICNkZWZpbmUgR1BJTzFfUkVBTAkgMHhFRjYwMEMwMAogCiAvKiBPZmZzZXRzICovCkBAIC0zMzIsMTcgKzMzMCw2IEBACiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICB8IERlY2xhcmUgQ29uZmlndXJhdGlvbiB2YWx1ZXMKLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBlbnVtIGdwaW9fc2VsZWN0IHsgR1BJT19TRUwsIEdQSU9fQUxUMSwgR1BJT19BTFQyLCBHUElPX0FMVDMgfSBncGlvX3NlbGVjdF90OwotdHlwZWRlZiBlbnVtIGdwaW9fZHJpdmVyIHsgR1BJT19ESVMsIEdQSU9fSU4sIEdQSU9fT1VULCBHUElPX0JJIH0gZ3Bpb19kcml2ZXJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nCWFkZDsJLyogZ3BpbyBjb3JlIGJhc2UgYWRkcmVzcyAqLwotCWdwaW9fZHJpdmVyX3QgIGluX291dDsgLyogRHJpdmVyIFNldHRpbmcgKi8KLQlncGlvX3NlbGVjdF90ICBhbHRfbmI7IC8qIFNlbGVjdGVkIEFsdGVybmF0ZSAqLwotfSBncGlvX3BhcmFtX3M7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgfAkJCVhYICAgICBYWAogICB8CiAgIHwgWFhYWFhYICAgWFhYIFhYICAgIFhYWCAgICBYWFgKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvYmFtYm9vL2NvbmZpZy5tayBiL2JvYXJkL2FtY2MvYmFtYm9vL2NvbmZpZy5tawppbmRleCAzNWNiNjU1Li45ZDdmNGMzIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2JhbWJvby9jb25maWcubWsKKysrIGIvYm9hcmQvYW1jYy9iYW1ib28vY29uZmlnLm1rCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAyLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIxLDcgKzIxLDcgQEAKICMgTUEgMDIxMTEtMTMwNyBVU0EKICMKIAotVEVYVF9CQVNFID0gMHhGRkY4MDAwMAorVEVYVF9CQVNFID0gMHhGRkZBMDAwMAogCiBQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR180NDA9MQogCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2J1YmluZ2EvTWFrZWZpbGUgYi9ib2FyZC9hbWNjL2J1YmluZ2EvTWFrZWZpbGUKaW5kZXggZjViZGE1NS4uZTc4ZWQ1ZiAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9idWJpbmdhL01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2MvYnViaW5nYS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMyw5ICsyMywxMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9jb21tb24vZmxhc2guYyBiL2JvYXJkL2FtY2MvY29tbW9uL2ZsYXNoLmMKaW5kZXggM2E1MGIwOS4uZTY0MjllYyAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9jb21tb24vZmxhc2guYworKysgYi9ib2FyZC9hbWNjL2NvbW1vbi9mbGFzaC5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8cHBjNHh4Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCi1mbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsJLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMgICAgICAgICovCitmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsJLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb25zCkBAIC03Niw2ICs3Niw5IEBACiAJY2FzZSBGTEFTSF9NQU5fU1NUOgogCQlwcmludGYoIlNTVCAiKTsKIAkJYnJlYWs7CisJY2FzZSBGTEFTSF9NQU5fTVg6CisJCXByaW50ZiAoIk1BQ1JPTklYICIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGYoIlVua25vd24gVmVuZG9yICIpOwogCQlicmVhazsKQEAgLTEyNCw2ICsxMjcsOSBAQAogCWNhc2UgRkxBU0hfU1RNVzMyMERUOgogCQlwcmludGYgKCJNMjlXMzIwRFQgKDMyIE0sIHRvcCBzZWN0b3IpXG4iKTsKIAkJYnJlYWs7CisJY2FzZSBGTEFTSF9NWExWMzIwVDoKKwkJcHJpbnRmICgiTVhMVjMyMFQgKDMyIE1iaXQsIHRvcCBzZWN0b3IpXG4iKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRmKCJVbmtub3duIENoaXAgVHlwZVxuIik7CiAJCWJyZWFrOwpAQCAtMjE3LDc1ICsyMjMsNzUgQEAKIAkJcmV0dXJuICgwKTsJLyogbm8gb3IgdW5rbm93biBmbGFzaCAgKi8KIAl9CiAKLQl2YWx1ZSA9IGFkZHIyWzFdOwkvKiBkZXZpY2UgSUQgICAgICAgICAgICAqLworCXZhbHVlID0gYWRkcjJbMV07CS8qIGRldmljZSBJRCAqLwogCURFQlVHRigiXG5GTEFTSCBERVZJQ0VJRDogJXhcbiIsIHZhbHVlKTsKIAogCXN3aXRjaCAodmFsdWUpIHsKIAljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKSBBTURfSURfTFYwNDBCOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gODsKLQkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDsJLyogPT4gNTEyIGtvICovCisJCWluZm8tPnNpemUgPSAweDAwODAwMDA7CQkvKiA9PiA1MTIgS2lCICovCiAJCWJyZWFrOwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgQU1EX0lEX0YwNDBCOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gODsKLQkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDsJLyogPT4gNTEyIGtvICovCisJCWluZm8tPnNpemUgPSAweDAwODAwMDA7CQkvKiA9PiA1MTIgS2lCICovCiAJCWJyZWFrOwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgU1RNX0lEX00yOVcwNDBCOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gODsKLQkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDsJLyogPT4gNTEyIGtvICovCisJCWluZm8tPnNpemUgPSAweDAwODAwMDA7CQkvKiA9PiA1MTIgS2lCICovCiAJCWJyZWFrOwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgQU1EX0lEX0YwMTZEOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTUQwMTY7CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDMyOwotCQlpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKLQkJYnJlYWs7CQkvKiA9PiAyIE1CICAgICAgICAgICAgICAqLworCQlpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsJLyogPT4gMiBNaUIgKi8KKwkJYnJlYWs7CiAKIAljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKSBBTURfSURfTFYwMzNDOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTURMVjAzM0M7CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDY0OwotCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsKLQkJYnJlYWs7CQkvKiA9PiA0IE1CICAgICAgICAgICAgICAqLworCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsJLyogPT4gNCBNaUIgKi8KKwkJYnJlYWs7CiAKIAljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKSBBTURfSURfTFY0MDBUOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTQwMFQ7CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDExOwotCQlpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKLQkJYnJlYWs7CQkvKiA9PiAwLjUgTUIgICAgICAgICAgICAqLworCQlpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsJLyogPT4gNTEyIEtpQiAqLworCQlicmVhazsKIAogCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjQwMEI6CiAJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNNDAwQjsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTE7Ci0JCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOwotCQlicmVhazsJCS8qID0+IDAuNSBNQiAgICAgICAgICAgICovCisJCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOwkvKiA9PiA1MTIgS2lCICovCisJCWJyZWFrOwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgQU1EX0lEX0xWODAwVDoKIAkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU04MDBUOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKLQkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7Ci0JCWJyZWFrOwkJLyogPT4gMSBNQiAgICAgICAgICAgICAgKi8KKwkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7CS8qID0+IDEgTWlCICovCisJCWJyZWFrOwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgQU1EX0lEX0xWODAwQjoKIAkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU04MDBCOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKLQkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7Ci0JCWJyZWFrOwkJLyogPT4gMSBNQiAgICAgICAgICAgICAgKi8KKwkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7CS8qID0+IDEgTWlCICovCisJCWJyZWFrOwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgQU1EX0lEX0xWMTYwVDoKIAkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0xNjBUOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzNTsKLQkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7Ci0JCWJyZWFrOwkJLyogPT4gMiBNQiAgICAgICAgICAgICAgKi8KKwkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7CS8qID0+IDIgTWlCICovCisJCWJyZWFrOwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgQU1EX0lEX0xWMTYwQjoKIAkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0xNjBCOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzNTsKLQkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7Ci0JCWJyZWFrOwkJLyogPT4gMiBNQiAgICAgICAgICAgICAgKi8KKwkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7CS8qID0+IDIgTWlCICovCisJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwpAQCAtMzAwLDcgKzMwNiw3IEBACiAJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApOwogCX0gZWxzZSB7CiAJCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7Ci0JCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUgICAgICAgICovCisJCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUgKi8KIAkJCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CiAJCQlpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA0MDAwOwogCQkJaW5mby0+c3RhcnRbMl0gPSBiYXNlICsgMHgwMDAwNjAwMDsKQEAgLTMxMCw3ICszMTYsNyBAQAogCQkJCSAgICBiYXNlICsgKGkgKiAweDAwMDEwMDAwKSAtIDB4MDAwMzAwMDA7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUgICAgICAgICAgICovCisJCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUgKi8KIAkJCWkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOwogCQkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNDAwMDsKIAkJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDYwMDA7CkBAIC0zNzUsNiArMzgxLDcgQEAKIHsKIAlpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTTMyMEIpIHx8CiAJICAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0zMjBUKSB8fAorCSAgICAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX01YTFYzMjBUKSB8fAogCSAgICAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX1NUTVczMjBEVCkpIHsKIAkJcmV0dXJuIGZsYXNoX2VyYXNlXzIoaW5mbywgc19maXJzdCwgc19sYXN0KTsKIAl9IGVsc2UgewpAQCAtNTU1LDYgKzU2Miw3IEBACiB7CiAJaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0zMjBCKSB8fAogCSAgICAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNMzIwVCkgfHwKKwkgICAgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9NWExWMzIwVCkgfHwKIAkgICAgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9TVE1XMzIwRFQpKSB7CiAJCXJldHVybiB3cml0ZV93b3JkXzIoaW5mbywgZGVzdCwgZGF0YSk7CiAJfSBlbHNlIHsKQEAgLTY0OCw2ICs2NTYsOSBAQAogCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIFNUTV9NQU5VRkFDVDoKIAkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fU1RNOwogCQlicmVhazsKKwljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKSBNWF9NQU5VRkFDVDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fTVg7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKQEAgLTY1NSw3ICs2NjYsNyBAQAogCQlyZXR1cm4gKDApOwkvKiBubyBvciB1bmtub3duIGZsYXNoICAqLwogCX0KIAotCXZhbHVlID0gYWRkcjJbMV07CS8qIGRldmljZSBJRCAgICAgICAgICAgICovCisJdmFsdWUgPSBhZGRyMlsxXTsJLyogZGV2aWNlIElEICovCiAKIAlERUJVR0YoIlxuRkxBU0ggREVWSUNFSUQ6ICV4XG4iLCB2YWx1ZSk7CiAKQEAgLTY2NCwxNyArNjc1LDIzIEBACiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfTFYzMjBUOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTMyMFQ7CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOwotCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsgIGJyZWFrOwkvKiA9PiA0IE1CCSovCisJCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOyAgYnJlYWs7CS8qID0+IDQgTWlCCSovCiAKIAljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjMyMEI6CiAJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMzIwQjsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7Ci0JCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOyAgYnJlYWs7CS8qID0+IDQgTUIJKi8KKwkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7ICBicmVhazsJLyogPT4gNCBNaUIJKi8KIAogCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpU1RNX0lEXzI5VzMyMERUOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9TVE1XMzIwRFQ7CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDY3OwotCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsgIGJyZWFrOwkvKiA9PiA0IE1CCSovCisJCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOyAgYnJlYWs7CS8qID0+IDQgTWlCCSovCisKKwljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKU1YX0lEX0xWMzIwVDoKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfTVhMVjMyMFQ7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOworCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsKKwkJYnJlYWs7CS8qID0+IDQgTUIJKi8KIAogCWRlZmF1bHQ6CiAJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKQEAgLTcxMSw5ICs3MjgsMjIgQEAKIAkJCS0taTsKIAkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZTsKIAkJfQorCX0gZWxzZSBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX01YTFYzMjBUKSB7CisJCWkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOworCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDAyMDAwOworCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA0MDAwOworCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA2MDAwOworCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA4MDAwOworCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDBhMDAwOworCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDBjMDAwOworCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDBlMDAwOworCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDEwMDAwOworCisJCWZvciAoOyBpID49IDA7IGktLSkKKwkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIGkgKiAweDAwMDEwMDAwOwogCX0gZWxzZSB7CiAJCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7Ci0JCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUgICAgICAgICovCisJCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUgKi8KIAkJCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CiAJCQlpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA0MDAwOwogCQkJaW5mby0+c3RhcnRbMl0gPSBiYXNlICsgMHgwMDAwNjAwMDsKQEAgLTcyMyw3ICs3NTMsNyBAQAogCQkJCSAgICBiYXNlICsgKGkgKiAweDAwMDEwMDAwKSAtIDB4MDAwMzAwMDA7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUgICAgICAgICAgICovCisJCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUgKi8KIAkJCWkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOwogCQkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNDAwMDsKIAkJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDYwMDA7CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2Vib255L01ha2VmaWxlIGIvYm9hcmQvYW1jYy9lYm9ueS9NYWtlZmlsZQppbmRleCA0YTM5MjdiLi41ZjNlMzRlIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2Vib255L01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2MvZWJvbnkvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiBTT0JKUwk9IGluaXQubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKwogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIApAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2x1YW4vTWFrZWZpbGUgYi9ib2FyZC9hbWNjL2x1YW4vTWFrZWZpbGUKaW5kZXggNTY1NGY5MS4uNWYzZTM0ZSAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9sdWFuL01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2MvbHVhbi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMiArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8KLU9CSlMgICArPSBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogU09CSlMJPSBpbml0Lm8KIAorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKQEAgLTQwLDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9vY290ZWEvTWFrZWZpbGUgYi9ib2FyZC9hbWNjL29jb3RlYS9NYWtlZmlsZQppbmRleCBhZjIyM2QyLi40ZGVmN2ZkIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL29jb3RlYS9NYWtlZmlsZQorKysgYi9ib2FyZC9hbWNjL29jb3RlYS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIFNPQkpTCT0gaW5pdC5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9NYWtlZmlsZSBiL2JvYXJkL2FtY2Mvc2VxdW9pYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjljMDRhCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYW1jYy9zZXF1b2lhL01ha2VmaWxlCkBAIC0wLDAgKzEsNTIgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyLTIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpbmNsdWRlICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCT0gJChCT0FSRCkubyBzZHJhbS5vCitTT0JKUwk9IGluaXQubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9zZXF1b2lhL2NvbmZpZy5tayBiL2JvYXJkL2FtY2Mvc2VxdW9pYS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxM2E3MgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FtY2Mvc2VxdW9pYS9jb25maWcubWsKQEAgLTAsMCArMSw0MSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKyMKKyMgQU1DQyA0NDBFUHggUmVmZXJlbmNlIFBsYXRmb3JtIChTZXF1b2lhKSBib2FyZAorIworCitzaW5jbHVkZSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLnRtcAorCitpZm5kZWYgVEVYVF9CQVNFCitURVhUX0JBU0UgPSAweEZGRkEwMDAwCitlbmRpZgorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR180NDA9MQorCitpZmVxICgkKGRlYnVnKSwxKQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURERUJVRworZW5kaWYKKworaWZlcSAoJChkYmNyKSwxKQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDRkdfSU5JVF9EQkNSPTB4OGNmZjAwMDAKK2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3NlcXVvaWEvaW5pdC5TIGIvYm9hcmQvYW1jYy9zZXF1b2lhL2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDRhYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYW1jYy9zZXF1b2lhL2luaXQuUwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8cHBjX2FzbS50bXBsPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBHZW5lcmFsICovCisjZGVmaW5lIFRMQl9WQUxJRCAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgXzI1Nk0gICAgICAgMHgxMDAwMDAwMAorCisvKiBTdXBwb3J0ZWQgcGFnZSBzaXplcyAqLworCisjZGVmaW5lIFNaXzFLCSAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNaXzRLCSAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNaXzE2SwkgICAgMHgwMDAwMDAyMAorI2RlZmluZSBTWl82NEsJICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgU1pfMjU2SwkgICAgMHgwMDAwMDA0MAorI2RlZmluZSBTWl8xTQkgICAgMHgwMDAwMDA1MAorI2RlZmluZSBTWl84TSAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIFNaXzE2TQkgICAgMHgwMDAwMDA3MAorI2RlZmluZSBTWl8yNTZNCSAgICAweDAwMDAwMDkwCisKKy8qIFN0b3JhZ2UgYXR0cmlidXRlcyAqLworI2RlZmluZSBTQV9XCSAgICAweDAwMDAwODAwCSAgICAvKiBXcml0ZS10aHJvdWdoICovCisjZGVmaW5lIFNBX0kJICAgIDB4MDAwMDA0MDAJICAgIC8qIENhY2hpbmcgaW5oaWJpdGVkICovCisjZGVmaW5lIFNBX00JICAgIDB4MDAwMDAyMDAJICAgIC8qIE1lbW9yeSBjb2hlcmVuY2UgKi8KKyNkZWZpbmUgU0FfRwkgICAgMHgwMDAwMDEwMAkgICAgLyogR3VhcmRlZCAqLworI2RlZmluZSBTQV9FCSAgICAweDAwMDAwMDgwCSAgICAvKiBFbmRpYW4gKi8KKworLyogQWNjZXNzIGNvbnRyb2wgKi8KKyNkZWZpbmUgQUNfWAkgICAgMHgwMDAwMDAyNAkgICAgLyogRXhlY3V0ZSAqLworI2RlZmluZSBBQ19XCSAgICAweDAwMDAwMDEyCSAgICAvKiBXcml0ZSAqLworI2RlZmluZSBBQ19SCSAgICAweDAwMDAwMDA5CSAgICAvKiBSZWFkICovCisKKy8qIFNvbWUgaGFuZHkgbWFjcm9zICovCisKKyNkZWZpbmUgRVBOKGUpCQkoKGUpICYgMHhmZmZmZmMwMCkKKyNkZWZpbmUgVExCMChlcG4sc3opCSggKEVQTigoZXBuKSkgfCAoc3opIHwgVExCX1ZBTElEICkgKQorI2RlZmluZSBUTEIxKHJwbixlcnBuKQkoICgocnBuKSYweGZmZmZmYzAwKSB8IChlcnBuKSApCisjZGVmaW5lIFRMQjIoYSkJCSggKGEpJjB4MDAwMDBmYmYgKQorCisjZGVmaW5lIHRsYnRhYl9zdGFydFwKKwltZmxyICAgIHIxICA7XAorCWJsIDBmCSAgICA7CisKKyNkZWZpbmUgdGxidGFiX2VuZFwKKwkubG9uZyAwLCAwLCAwCTsgICBcCiswOgltZmxyICAgIHIwCTsgICBcCisJbXRsciAgICByMQk7ICAgXAorCWJscgkJOworCisjZGVmaW5lIHRsYmVudHJ5KGVwbixzeixycG4sZXJwbixhdHRyKVwKKwkubG9uZyBUTEIwKGVwbixzeiksVExCMShycG4sZXJwbiksVExCMihhdHRyKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVExCIFRBQkxFCisgKgorICogVGhpcyB0YWJsZSBpcyB1c2VkIGJ5IHRoZSBjcHUgYm9vdCBjb2RlIHRvIHNldHVwIHRoZSBpbml0aWFsIHRsYgorICogZW50cmllcy4gUmF0aGVyIHRoYW4gbWFrZSBicm9hZCBhc3N1bXB0aW9ucyBpbiB0aGUgY3B1IHNvdXJjZSB0cmVlLAorICogdGhpcyB0YWJsZSBsZXRzIGVhY2ggYm9hcmQgc2V0IHRoaW5ncyB1cCBob3dldmVyIHRoZXkgbGlrZS4KKyAqCisgKiAgUG9pbnRlciB0byB0aGUgdGFibGUgaXMgcmV0dXJuZWQgaW4gcjEKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAuc2VjdGlvbiAuYm9vdHBnLCJheCIKKyAgICAuZ2xvYmwgdGxidGFiCisKK3RsYnRhYjoKKwl0bGJ0YWJfc3RhcnQKKworCS8qCisJICogQk9PVF9DUyAoRkxBU0gpIG11c3QgYmUgZmlyc3QuIEJlZm9yZSByZWxvY2F0aW9uIFNBX0kgY2FuIGJlIG9mZiB0byB1c2UgdGhlCisJICogc3BlZWQgdXAgYm9vdCBwcm9jZXNzLiBJdCBpcyBwYXRjaGVkIGFmdGVyIHJlbG9jYXRpb24gdG8gZW5hYmxlIFNBX0kKKwkqLworI2lmbmRlZiBDT05GSUdfTkFORF9TUEwKKwl0bGJlbnRyeSggQ0ZHX0JPT1RfQkFTRV9BRERSLCBTWl8yNTZNLCBDRkdfQk9PVF9CQVNFX0FERFIsIDEsIEFDX1J8QUNfV3xBQ19YfFNBX0cgKQorI2Vsc2UKKwl0bGJlbnRyeSggQ0ZHX05BTkRfQk9PVF9TUExfU1JDLCBTWl80SywgQ0ZHX05BTkRfQk9PVF9TUExfU1JDLCAxLCBBQ19SfEFDX1d8QUNfWHxTQV9HICkKKyNlbmRpZgorCisJLyogVExCLWVudHJ5IGZvciBERFIgU0RSQU0gKFVwIHRvIDJHQikgKi8KKwl0bGJlbnRyeSggQ0ZHX1NEUkFNX0JBU0UsIFNaXzI1Nk0sIENGR19TRFJBTV9CQVNFLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kgKQorCisjaWZkZWYgQ0ZHX0lOSVRfUkFNX0RDQUNIRQorCS8qIFRMQi1lbnRyeSBmb3IgaW5pdC1yYW0gaW4gZGNhY2hlIChTQV9JIG11c3QgYmUgdHVybmVkIG9mZiEpICovCisJdGxiZW50cnkoIENGR19JTklUX1JBTV9BRERSLCBTWl82NEssIENGR19JTklUX1JBTV9BRERSLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HICkKKyNlbmRpZgorCisJLyogVExCLWVudHJ5IGZvciBQQ0kgTWVtb3J5ICovCisJdGxiZW50cnkoIENGR19QQ0lfTUVNQkFTRSwgU1pfMjU2TSwgQ0ZHX1BDSV9NRU1CQVNFLCAxLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKKwl0bGJlbnRyeSggQ0ZHX1BDSV9NRU1CQVNFMSwgU1pfMjU2TSwgQ0ZHX1BDSV9NRU1CQVNFMSwgMSwgQUNfUnxBQ19XfFNBX0d8U0FfSSApCisJdGxiZW50cnkoIENGR19QQ0lfTUVNQkFTRTIsIFNaXzI1Nk0sIENGR19QQ0lfTUVNQkFTRTIsIDEsIEFDX1J8QUNfV3xTQV9HfFNBX0kgKQorCXRsYmVudHJ5KCBDRkdfUENJX01FTUJBU0UzLCBTWl8yNTZNLCBDRkdfUENJX01FTUJBU0UzLCAxLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKKworCS8qIFRMQi1lbnRyeSBmb3IgRUJDICovCisJdGxiZW50cnkoIENGR19CQ1NSX0JBU0UsIFNaXzFLLCBDRkdfQkNTUl9CQVNFLCAxLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kgKQorCisJLyogVExCLWVudHJ5IGZvciBOQU5EICovCisJdGxiZW50cnkoIENGR19OQU5EX0FERFIsIFNaXzFLLCBDRkdfTkFORF9BRERSLCAxLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kgKQorCisJLyogVExCLWVudHJ5IGZvciBJbnRlcm5hbCBSZWdpc3RlcnMgJiBPQ00gKi8KKwl0bGJlbnRyeSggMHhlMDAwMDAwMCwgU1pfMTZNLCAweGUwMDAwMDAwLCAwLCAgQUNfUnxBQ19XfEFDX1h8U0FfSSApCisKKwkvKlRMQi1lbnRyeSBQQ0kgcmVnaXN0ZXJzKi8KKwl0bGJlbnRyeSggMHhFRUMwMDAwMCwgU1pfMUssIDB4RUVDMDAwMDAsIDEsICBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kgKQorCisJLyogVExCLWVudHJ5IGZvciBwZXJpcGhlcmFscyAqLworCXRsYmVudHJ5KCAweEVGMDAwMDAwLCBTWl8xNk0sIDB4RUYwMDAwMDAsIDEsIEFDX1J8QUNfV3xBQ19YfFNBX0d8U0FfSSkKKworCXRsYnRhYl9lbmQKKworI2lmIGRlZmluZWQoQ09ORklHX05BTkRfVV9CT09UKSAmJiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisJLyoKKwkgKiBGb3IgTkFORCBib290aW5nIHRoZSBmaXJzdCBUTEIgaGFzIHRvIGJlIHJlY29uZmlndXJlZCB0byBmdWxsIHNpemUKKwkgKiBhbmQgd2l0aCBjYWNoaW5nIGRpc2FibGVkIGFmdGVyIHJ1bm5pbmcgZnJvbSBSQU0hCisJICovCisjZGVmaW5lIFRMQjAwCVRMQjAoQ0ZHX0JPT1RfQkFTRV9BRERSLCBTWl8yNTZNKQorI2RlZmluZSBUTEIwMQlUTEIxKENGR19CT09UX0JBU0VfQUREUiwgMSkKKyNkZWZpbmUgVExCMDIJVExCMihBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisKKwkuZ2xvYmwJcmVjb25maWdfdGxiMAorcmVjb25maWdfdGxiMDoKKwlzeW5jCisJaXN5bmMKKwlhZGRpCXI0LHIwLDB4MDAwMAkJLyogVExCIGVudHJ5ICMwICovCisJbGlzCXI1LFRMQjAwQGgKKwlvcmkJcjUscjUsVExCMDBAbAorCXRsYndlCXI1LHI0LDB4MDAwMAkJLyogU2F2ZSBpdCBvdXQgKi8KKwlsaXMJcjUsVExCMDFAaAorCW9yaQlyNSxyNSxUTEIwMUBsCisJdGxid2UJcjUscjQsMHgwMDAxCQkvKiBTYXZlIGl0IG91dCAqLworCWxpcwlyNSxUTEIwMkBoCisJb3JpCXI1LHI1LFRMQjAyQGwKKwl0bGJ3ZQlyNSxyNCwweDAwMDIJCS8qIFNhdmUgaXQgb3V0ICovCisJc3luYworCWlzeW5jCisJYmxyCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZHJhbS5jIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3NkcmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyNjQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZHJhbS5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHBwYzQ0MC5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGluaXRkcmFtIC0tIDQ0MEVQeCdzIEREUiBjb250cm9sbGVyIGlzIGEgREVOQUxJIENvcmUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQoreworI2lmICFkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgfHwgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisJdm9sYXRpbGUgdWxvbmcgdmFsOworCisJbXRzZHJhbShERFIwXzAyLCAweDAwMDAwMDAwKTsKKworCS8qCisJICogU29mdC1yZXNldCBTRFJBTSBjb250cm9sbGVyCisJICovCisJbXRzZHIoc2RyX3Nyc3QsIFNEUjBfU1JTVDBfRE1DKTsKKwltdHNkcihzZHJfc3JzdCwgMHgwMDAwMDAwMCk7CisKKwltdHNkcmFtKEREUjBfMDAsIDB4MDAwMDE5MEEpOworCW10c2RyYW0oRERSMF8wMSwgMHgwMTAwMDAwMCk7CisJbXRzZHJhbShERFIwXzAzLCAweDAyMDMwNjAyKTsKKwltdHNkcmFtKEREUjBfMDQsIDB4MTMwMzAzMDApOworCW10c2RyYW0oRERSMF8wNSwgMHgwMjAyMDUwRSk7CisJbXRzZHJhbShERFIwXzA2LCAweDAxMDRDODIzKTsKKwltdHNkcmFtKEREUjBfMDcsIDB4MDAwRDAxMDApOworCW10c2RyYW0oRERSMF8wOCwgMHgwMjM2MDAwMSk7CisJbXRzZHJhbShERFIwXzA5LCAweDAwMDExRDVGKTsKKwltdHNkcmFtKEREUjBfMTAsIDB4MDAwMDAzMDApOworCW10c2RyYW0oRERSMF8xMSwgMHgwMDI3QzgwMCk7CisJbXRzZHJhbShERFIwXzEyLCAweDAwMDAwMDAzKTsKKwltdHNkcmFtKEREUjBfMTQsIDB4MDAwMDAwMDApOworCW10c2RyYW0oRERSMF8xNywgMHgxOTAwMDAwMCk7CisJbXRzZHJhbShERFIwXzE4LCAweDE5MTkxOTE5KTsKKwltdHNkcmFtKEREUjBfMTksIDB4MTkxOTE5MTkpOworCW10c2RyYW0oRERSMF8yMCwgMHgwQjBCMEIwQik7CisJbXRzZHJhbShERFIwXzIxLCAweDBCMEIwQjBCKTsKKwltdHNkcmFtKEREUjBfMjIsIDB4MDAyNjdGMEIpOworCW10c2RyYW0oRERSMF8yMywgMHgwMDAwMDAwMCk7CisJbXRzZHJhbShERFIwXzI0LCAweDAxMDEwMDAyKTsKKwltdHNkcmFtKEREUjBfMjYsIDB4NUIyNjAxODEpOworCW10c2RyYW0oRERSMF8yNywgMHgwMDAwNjgyQik7CisJbXRzZHJhbShERFIwXzI4LCAweDAwMDAwMDAwKTsKKwltdHNkcmFtKEREUjBfMzEsIDB4MDAwMDAwMDApOworCW10c2RyYW0oRERSMF80MiwgMHgwMTAwMDAwNik7CisJbXRzZHJhbShERFIwXzQzLCAweDA1MEEwMjAwKTsKKwltdHNkcmFtKEREUjBfNDQsIDB4MDAwMDAwMDUpOworCW10c2RyYW0oRERSMF8wMiwgMHgwMDAwMDAwMSk7CisKKwkvKgorCSAqIFdhaXQgZm9yIERDQyBtYXN0ZXIgZGVsYXkgbGluZSB0byBmaW5pc2ggY2FsaWJyYXRpb24KKwkgKi8KKwltZnNkcmFtKEREUjBfMTcsIHZhbCk7CisJd2hpbGUgKCgodmFsID4+IDgpICYgMHgwMDAwMDdmKSA9PSAwKSB7CisJCW1mc2RyYW0oRERSMF8xNywgdmFsKTsKKwl9CisjZW5kaWYgLyogI2lmbmRlZiBDT05GSUdfTkFORF9VX0JPT1QgKi8KKworCXJldHVybiAoQ0ZHX01CWVRFU19TRFJBTSA8PCAyMCk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3NlcXVvaWEvc2VxdW9pYS5jIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3NlcXVvaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTczNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3NlcXVvaWEuYwpAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogSmFjcXVlbGluZSBQaXJhLUZlcnJpb2wsIEFNQ0MvSUJNLCBqcGlyYS1mZXJyaW9sQGZyLmlibS5jb20KKyAqIEFsYWluIFNhdXJlbCwgICAgICAgICAgICBBTUNDL0lCTSwgYWxhaW4uc2F1cmVsQGZyLmlibS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHBwYzQ0MC5oPgorI2luY2x1ZGUgInNlcXVvaWEuaCIKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK2V4dGVybiBmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsgLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMJKi8KKworaW50IGJvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2RyMF9jdXN0MDsKKwl1bnNpZ25lZCBsb25nIHNkcjBfcGZjMSwgc2RyMF9wZmMyOworCXJlZ2lzdGVyIHVpbnQgcmVnOworCisJbXRkY3IoZWJjY2ZnYSwgeGJjZmcpOworCW10ZGNyKGViY2NmZ2QsIDB4Yjg0MDAwMDApOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFNldHVwIHRoZSBHUElPIHBpbnMKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCS8qIHRlc3Qtb25seTogdGFrZSBHUElPIGluaXQgZnJvbSBwY3M0NDBlcCA/Pz8/IGluIGNvbmZpZyBmaWxlICovCisJb3V0MzIoR1BJTzBfT1IsIDB4MDAwMDAwMDApOworCW91dDMyKEdQSU8wX1RDUiwgMHgwMDAwMDAwZik7CisJb3V0MzIoR1BJTzBfT1NSTCwgMHg1MDAxNTQwMCk7CisJb3V0MzIoR1BJTzBfT1NSSCwgMHg1NTAwNTBhYSk7CisJb3V0MzIoR1BJTzBfVFNSTCwgMHg1MDAxNTQwMCk7CisJb3V0MzIoR1BJTzBfVFNSSCwgMHg1NTAwNTAwMCk7CisJb3V0MzIoR1BJTzBfSVNSMUwsIDB4NTAwMDAwMDApOworCW91dDMyKEdQSU8wX0lTUjFILCAweDAwMDAwMDAwKTsKKwlvdXQzMihHUElPMF9JU1IyTCwgMHgwMDAwMDAwMCk7CisJb3V0MzIoR1BJTzBfSVNSMkgsIDB4MDAwMDAxMDApOworCW91dDMyKEdQSU8wX0lTUjNMLCAweDAwMDAwMDAwKTsKKwlvdXQzMihHUElPMF9JU1IzSCwgMHgwMDAwMDAwMCk7CisKKwlvdXQzMihHUElPMV9PUiwgMHgwMDAwMDAwMCk7CisJb3V0MzIoR1BJTzFfVENSLCAweGMyMDAwMDAwKTsKKwlvdXQzMihHUElPMV9PU1JMLCAweDVjMjgwMDAwKTsKKwlvdXQzMihHUElPMV9PU1JILCAweDAwMDAwMDAwKTsKKwlvdXQzMihHUElPMV9UU1JMLCAweDBjMDAwMDAwKTsKKwlvdXQzMihHUElPMV9UU1JILCAweDAwMDAwMDAwKTsKKwlvdXQzMihHUElPMV9JU1IxTCwgMHgwMDAwNTU1MCk7CisJb3V0MzIoR1BJTzFfSVNSMUgsIDB4MDAwMDAwMDApOworCW91dDMyKEdQSU8xX0lTUjJMLCAweDAwMDUwMDAwKTsKKwlvdXQzMihHUElPMV9JU1IySCwgMHgwMDAwMDAwMCk7CisJb3V0MzIoR1BJTzFfSVNSM0wsIDB4MDE0MDAwMDApOworCW91dDMyKEdQSU8xX0lTUjNILCAweDAwMDAwMDAwKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBTZXR1cCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgcG9sYXJpdGllcywgdHJpZ2dlcnMsIGV0Yy4KKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW10ZGNyKHVpYzBzciwgMHhmZmZmZmZmZik7CS8qIGNsZWFyIGFsbCAqLworCW10ZGNyKHVpYzBlciwgMHgwMDAwMDAwMCk7CS8qIGRpc2FibGUgYWxsICovCisJbXRkY3IodWljMGNyLCAweDAwMDAwMDA1KTsJLyogQVRJICYgVUlDMSBjcml0IGFyZSBjcml0aWNhbCAqLworCW10ZGNyKHVpYzBwciwgMHhmZmZmZjdmZik7CS8qIHBlciByZWYtYm9hcmQgbWFudWFsICovCisJbXRkY3IodWljMHRyLCAweDAwMDAwMDAwKTsJLyogcGVyIHJlZi1ib2FyZCBtYW51YWwgKi8KKwltdGRjcih1aWMwdnIsIDB4MDAwMDAwMDApOwkvKiBpbnQzMSBoaWdoZXN0LCBiYXNlPTB4MDAwICovCisJbXRkY3IodWljMHNyLCAweGZmZmZmZmZmKTsJLyogY2xlYXIgYWxsICovCisKKwltdGRjcih1aWMxc3IsIDB4ZmZmZmZmZmYpOwkvKiBjbGVhciBhbGwgKi8KKwltdGRjcih1aWMxZXIsIDB4MDAwMDAwMDApOwkvKiBkaXNhYmxlIGFsbCAqLworCW10ZGNyKHVpYzFjciwgMHgwMDAwMDAwMCk7CS8qIGFsbCBub24tY3JpdGljYWwgKi8KKwltdGRjcih1aWMxcHIsIDB4ZmZmZmZmZmYpOwkvKiBwZXIgcmVmLWJvYXJkIG1hbnVhbCAqLworCW10ZGNyKHVpYzF0ciwgMHgwMDAwMDAwMCk7CS8qIHBlciByZWYtYm9hcmQgbWFudWFsICovCisJbXRkY3IodWljMXZyLCAweDAwMDAwMDAwKTsJLyogaW50MzEgaGlnaGVzdCwgYmFzZT0weDAwMCAqLworCW10ZGNyKHVpYzFzciwgMHhmZmZmZmZmZik7CS8qIGNsZWFyIGFsbCAqLworCisJbXRkY3IodWljMnNyLCAweGZmZmZmZmZmKTsJLyogY2xlYXIgYWxsICovCisJbXRkY3IodWljMmVyLCAweDAwMDAwMDAwKTsJLyogZGlzYWJsZSBhbGwgKi8KKwltdGRjcih1aWMyY3IsIDB4MDAwMDAwMDApOwkvKiBhbGwgbm9uLWNyaXRpY2FsICovCisJbXRkY3IodWljMnByLCAweGZmZmZmZmZmKTsJLyogcGVyIHJlZi1ib2FyZCBtYW51YWwgKi8KKwltdGRjcih1aWMydHIsIDB4MDAwMDAwMDApOwkvKiBwZXIgcmVmLWJvYXJkIG1hbnVhbCAqLworCW10ZGNyKHVpYzJ2ciwgMHgwMDAwMDAwMCk7CS8qIGludDMxIGhpZ2hlc3QsIGJhc2U9MHgwMDAgKi8KKwltdGRjcih1aWMyc3IsIDB4ZmZmZmZmZmYpOwkvKiBjbGVhciBhbGwgKi8KKworCS8qIDUwTUh6IHRtcmNsayAqLworCSoodW5zaWduZWQgY2hhciAqKShDRkdfQkNTUl9CQVNFIHwgMHgwNCkgPSAweDAwOworCisJLyogY2xlYXIgd3JpdGUgcHJvdGVjdHMgKi8KKwkqKHVuc2lnbmVkIGNoYXIgKikoQ0ZHX0JDU1JfQkFTRSB8IDB4MDcpID0gMHgwMDsKKworCS8qIGVuYWJsZSBFdGhlcm5ldCAqLworCSoodW5zaWduZWQgY2hhciAqKShDRkdfQkNTUl9CQVNFIHwgMHgwOCkgPSAweDAwOworCisJLyogZW5hYmxlIFVTQiBkZXZpY2UgKi8KKwkqKHVuc2lnbmVkIGNoYXIgKikoQ0ZHX0JDU1JfQkFTRSB8IDB4MDkpID0gMHgyMDsKKworCS8qIHNlbGVjdCBFdGhlcm5ldCBwaW5zICovCisJbWZzZHIoU0RSMF9QRkMxLCBzZHIwX3BmYzEpOworCXNkcjBfcGZjMSA9IChzZHIwX3BmYzEgJiB+U0RSMF9QRkMxX1NFTEVDVF9NQVNLKSB8IFNEUjBfUEZDMV9TRUxFQ1RfQ09ORklHXzQ7CisJbWZzZHIoU0RSMF9QRkMyLCBzZHIwX3BmYzIpOworCXNkcjBfcGZjMiA9IChzZHIwX3BmYzIgJiB+U0RSMF9QRkMyX1NFTEVDVF9NQVNLKSB8IFNEUjBfUEZDMl9TRUxFQ1RfQ09ORklHXzQ7CisJbXRzZHIoU0RSMF9QRkMyLCBzZHIwX3BmYzIpOworCW10c2RyKFNEUjBfUEZDMSwgc2RyMF9wZmMxKTsKKworCS8qIFBDSSBhcmJpdGVyIGVuYWJsZWQgKi8KKwltZnNkcihzZHJfcGNpMCwgcmVnKTsKKwltdHNkcihzZHJfcGNpMCwgMHg4MDAwMDAwMCB8IHJlZyk7CisKKwkvKiBzZXR1cCBOQU5EIEZMQVNIICovCisJbWZzZHIoU0RSMF9DVVNUMCwgc2RyMF9jdXN0MCk7CisgICAgICAgIHNkcjBfY3VzdDAgPSBTRFIwX0NVU1QwX01VWF9OREZDX1NFTAl8CisJCVNEUjBfQ1VTVDBfTkRGQ19FTkFCTEUJCXwKKwkJU0RSMF9DVVNUMF9OREZDX0JXXzhfQklUCXwKKwkJU0RSMF9DVVNUMF9OREZDX0FSRV9NQVNLCXwKKwkJKDB4ODAwMDAwMDAgPj4gKDI4ICsgQ0ZHX05BTkRfQ1MpKTsKKyAgICAgICAgbXRzZHIoU0RSMF9DVVNUMCwgc2RyMF9jdXN0MCk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgbWlzY19pbml0X3IuCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJdWludCBwYmNyOworCWludCBzaXplX3ZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyB1c2IyZDBjciA9IDA7CisJdW5zaWduZWQgbG9uZyB1c2IycGh5MGNyLCB1c2IyaDBjciA9IDA7CisJdW5zaWduZWQgbG9uZyBzZHIwX3BmYzE7CisJY2hhciAqYWN0ID0gZ2V0ZW52KCJ1c2JhY3QiKTsKKworCS8qCisJICogRkxBU0ggc3R1ZmYuLi4KKwkgKi8KKworCS8qIFJlLWRvIHNpemluZyB0byBnZXQgZnVsbCBjb3JyZWN0IGluZm8gKi8KKyNpZiBkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgfHwgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisJbXRkY3IoZWJjY2ZnYSwgcGIzY3IpOworI2Vsc2UKKwltdGRjcihlYmNjZmdhLCBwYjBjcik7CisjZW5kaWYKKwlwYmNyID0gbWZkY3IoZWJjY2ZnZCk7CisJc3dpdGNoIChnZC0+YmQtPmJpX2ZsYXNoc2l6ZSkgeworCWNhc2UgMSA8PCAyMDoKKwkJc2l6ZV92YWwgPSAwOworCQlicmVhazsKKwljYXNlIDIgPDwgMjA6CisJCXNpemVfdmFsID0gMTsKKwkJYnJlYWs7CisJY2FzZSA0IDw8IDIwOgorCQlzaXplX3ZhbCA9IDI7CisJCWJyZWFrOworCWNhc2UgOCA8PCAyMDoKKwkJc2l6ZV92YWwgPSAzOworCQlicmVhazsKKwljYXNlIDE2IDw8IDIwOgorCQlzaXplX3ZhbCA9IDQ7CisJCWJyZWFrOworCWNhc2UgMzIgPDwgMjA6CisJCXNpemVfdmFsID0gNTsKKwkJYnJlYWs7CisJY2FzZSA2NCA8PCAyMDoKKwkJc2l6ZV92YWwgPSA2OworCQlicmVhazsKKwljYXNlIDEyOCA8PCAyMDoKKwkJc2l6ZV92YWwgPSA3OworCQlicmVhazsKKwl9CisJcGJjciA9IChwYmNyICYgMHgwMDAxZmZmZikgfCBnZC0+YmQtPmJpX2ZsYXNoc3RhcnQgfCAoc2l6ZV92YWwgPDwgMTcpOworI2lmIGRlZmluZWQoQ09ORklHX05BTkRfVV9CT09UKSB8fCBkZWZpbmVkKENPTkZJR19OQU5EX1NQTCkKKwltdGRjcihlYmNjZmdhLCBwYjNjcik7CisjZWxzZQorCW10ZGNyKGViY2NmZ2EsIHBiMGNyKTsKKyNlbmRpZgorCW10ZGNyKGViY2NmZ2QsIHBiY3IpOworCisJLyogYWRqdXN0IGZsYXNoIHN0YXJ0IGFuZCBvZmZzZXQgKi8KKwlnZC0+YmQtPmJpX2ZsYXNoc3RhcnQgPSAwIC0gZ2QtPmJkLT5iaV9mbGFzaHNpemU7CisJZ2QtPmJkLT5iaV9mbGFzaG9mZnNldCA9IDA7CisKKyNpZmRlZiBDRkdfRU5WX0lTX0lOX0ZMQVNICisJLyogTW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwkodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCQkgICAgLUNGR19NT05JVE9SX0xFTiwKKwkJCSAgICAweGZmZmZmZmZmLAorCQkJICAgICZmbGFzaF9pbmZvWzBdKTsKKworCS8qIEVudiBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwkodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCQkgICAgQ0ZHX0VOVl9BRERSX1JFRFVORCwKKwkJCSAgICBDRkdfRU5WX0FERFJfUkVEVU5EICsgMipDRkdfRU5WX1NFQ1RfU0laRSAtIDEsCisJCQkgICAgJmZsYXNoX2luZm9bMF0pOworI2VuZGlmCisKKwkvKgorCSAqIFVTQiBzdWZmLi4uCisJICovCisJaWYgKGFjdCA9PSBOVUxMIHx8IHN0cmNtcChhY3QsICJob3N0ZGV2IikgPT0gMCkJeworCQkvKiBTRFIgU2V0dGluZyAqLworICAgICAgICAJbWZzZHIoU0RSMF9QRkMxLCBzZHIwX3BmYzEpOworICAgICAgICAJbWZzZHIoU0RSMF9VU0IwLCB1c2IyZDBjcik7CisgICAgICAgIAltZnNkcihTRFIwX1VTQjJQSFkwQ1IsIHVzYjJwaHkwY3IpOworICAgICAgICAJbWZzZHIoU0RSMF9VU0IySDBDUiwgdXNiMmgwY3IpOworCisJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyICZ+U0RSMF9VU0IyUEhZMENSX1hPQ0xLX01BU0s7CisJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyIHwgU0RSMF9VU0IyUEhZMENSX1hPQ0xLX0VYVEVSTkFMOwkvKjAqLworICAgICAgICAJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgJn5TRFIwX1VTQjJQSFkwQ1JfV0RJTlRfTUFTSzsKKyAgICAgICAgCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyIHwgU0RSMF9VU0IyUEhZMENSX1dESU5UXzE2QklUXzMwTUhaOwkvKjEqLworCQl1c2IycGh5MGNyID0gdXNiMnBoeTBjciAmflNEUjBfVVNCMlBIWTBDUl9EVkJVU19NQVNLOworICAgICAgICAJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgfCBTRFIwX1VTQjJQSFkwQ1JfRFZCVVNfUFVSRElTOwkJLyowKi8KKwkJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgJn5TRFIwX1VTQjJQSFkwQ1JfRFdOU1RSX01BU0s7CisgICAgICAgIAl1c2IycGh5MGNyID0gdXNiMnBoeTBjciB8IFNEUjBfVVNCMlBIWTBDUl9EV05TVFJfSE9TVDsJCS8qMSovCisJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyICZ+U0RSMF9VU0IyUEhZMENSX1VUTUlDTl9NQVNLOworICAgICAgICAJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgfCBTRFIwX1VTQjJQSFkwQ1JfVVRNSUNOX0hPU1Q7CQkvKjEqLworCisJCS8qIEFuIDgtYml0LzYwTUh6IGludGVyZmFjZSBpcyB0aGUgb25seSBwb3NzaWJsZSBhbHRlcm5hdGl2ZQorCQkgICB3aGVuIGNvbm5lY3RpbmcgdGhlIERldmljZSB0byB0aGUgUEhZICovCisgICAgICAgIAl1c2IyaDBjciAgID0gdXNiMmgwY3IgJn5TRFIwX1VTQjJIMENSX1dESU5UX01BU0s7CisgICAgICAgIAl1c2IyaDBjciAgID0gdXNiMmgwY3IgfCBTRFIwX1VTQjJIMENSX1dESU5UXzE2QklUXzMwTUhaOwkvKjEqLworCisgICAgICAgIAkvKiBUbyBlbmFibGUgdGhlIFVTQiAyLjAgRGV2aWNlIGZ1bmN0aW9uIHRocm91Z2ggdGhlIFVUTUkgaW50ZXJmYWNlICovCisgICAgICAgIAl1c2IyZDBjciA9IHVzYjJkMGNyICZ+U0RSMF9VU0IyRDBDUl9VU0IyREVWX0VCQ19TRUxfTUFTSzsKKyAgICAgICAgCXVzYjJkMGNyID0gdXNiMmQwY3IgfCBTRFIwX1VTQjJEMENSX1VTQjJERVZfU0VMRUNUSU9OOwkJLyoxKi8KKworICAgICAgICAJc2RyMF9wZmMxID0gc2RyMF9wZmMxICZ+U0RSMF9QRkMxX1VFU19NQVNLOworICAgICAgICAJc2RyMF9wZmMxID0gc2RyMF9wZmMxIHwgU0RSMF9QRkMxX1VFU19VU0IyRF9TRUw7CQkvKjAqLworCisgICAgICAgIAltdHNkcihTRFIwX1BGQzEsIHNkcjBfcGZjMSk7CisgICAgICAgIAltdHNkcihTRFIwX1VTQjAsIHVzYjJkMGNyKTsKKyAgICAgICAgCW10c2RyKFNEUjBfVVNCMlBIWTBDUiwgdXNiMnBoeTBjcik7CisgICAgICAgIAltdHNkcihTRFIwX1VTQjJIMENSLCB1c2IyaDBjcik7CisKKwkJLypjbGVhciByZXNldHMqLworCQl1ZGVsYXkgKDEwMDApOworCQltdHNkcihTRFIwX1NSU1QxLCAweDAwMDAwMDAwKTsKKwkJdWRlbGF5ICgxMDAwKTsKKwkJbXRzZHIoU0RSMF9TUlNUMCwgMHgwMDAwMDAwMCk7CisKKwkJcHJpbnRmKCJVU0I6ICAgSG9zdChpbnQgcGh5KSBEZXZpY2UoZXh0IHBoeSlcbiIpOworCisJfSBlbHNlIGlmIChzdHJjbXAoYWN0LCAiZGV2IikgPT0gMCkgeworCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS1QQVRDSC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQltZnNkcihTRFIwX1VTQjJQSFkwQ1IsIHVzYjJwaHkwY3IpOworCisJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyICZ+U0RSMF9VU0IyUEhZMENSX1hPQ0xLX01BU0s7CisJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyIHwgU0RSMF9VU0IyUEhZMENSX1hPQ0xLX0VYVEVSTkFMOwkvKjAqLworCQl1c2IycGh5MGNyID0gdXNiMnBoeTBjciAmflNEUjBfVVNCMlBIWTBDUl9EVkJVU19NQVNLOworICAgICAgICAJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgfCBTRFIwX1VTQjJQSFkwQ1JfRFZCVVNfUFVSRElTOwkJLyowKi8KKwkJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgJn5TRFIwX1VTQjJQSFkwQ1JfRFdOU1RSX01BU0s7CisgICAgICAgIAl1c2IycGh5MGNyID0gdXNiMnBoeTBjciB8IFNEUjBfVVNCMlBIWTBDUl9EV05TVFJfSE9TVDsJCS8qMSovCisJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyICZ+U0RSMF9VU0IyUEhZMENSX1VUTUlDTl9NQVNLOworICAgICAgICAJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgfCBTRFIwX1VTQjJQSFkwQ1JfVVRNSUNOX0hPU1Q7CQkvKjEqLworCQltdHNkcihTRFIwX1VTQjJQSFkwQ1IsIHVzYjJwaHkwY3IpOworCisJCXVkZWxheSAoMTAwMCk7CisJCW10c2RyKFNEUjBfU1JTVDEsIDB4NjcyYzYwMDApOworCisJCXVkZWxheSAoMTAwMCk7CisJCW10c2RyKFNEUjBfU1JTVDAsIDB4MDAwMDAwODApOworCisJCXVkZWxheSAoMTAwMCk7CisJCW10c2RyKFNEUjBfU1JTVDEsIDB4NjAyMDYwMDApOworCisJCSoodW5zaWduZWQgaW50ICopKDB4ZTAwMDAzNTApID0gMHgwMDAwMDAwMTsKKworCQl1ZGVsYXkgKDEwMDApOworCQltdHNkcihTRFIwX1NSU1QxLCAweDYwMzA2MDAwKTsKKwkJLyotLS0tLS0tLS0tLS0tLS0tLS0tUEFUQ0gtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCQkvKiBTRFIgU2V0dGluZyAqLworICAgICAgICAJbWZzZHIoU0RSMF9VU0IyUEhZMENSLCB1c2IycGh5MGNyKTsKKwkJbWZzZHIoU0RSMF9VU0IySDBDUiwgdXNiMmgwY3IpOworCQltZnNkcihTRFIwX1VTQjAsIHVzYjJkMGNyKTsKKwkJbWZzZHIoU0RSMF9QRkMxLCBzZHIwX3BmYzEpOworCisJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyICZ+U0RSMF9VU0IyUEhZMENSX1hPQ0xLX01BU0s7CisJCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyIHwgU0RSMF9VU0IyUEhZMENSX1hPQ0xLX0VYVEVSTkFMOwkvKjAqLworICAgICAgICAJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgJn5TRFIwX1VTQjJQSFkwQ1JfV0RJTlRfTUFTSzsKKwkJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgfCBTRFIwX1VTQjJQSFkwQ1JfV0RJTlRfOEJJVF82ME1IWjsJLyowKi8KKwkJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgJn5TRFIwX1VTQjJQSFkwQ1JfRFZCVVNfTUFTSzsKKyAgICAgICAgCXVzYjJwaHkwY3IgPSB1c2IycGh5MGNyIHwgU0RSMF9VU0IyUEhZMENSX0RWQlVTX1BVUkVOOwkJLyoxKi8KKwkJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgJn5TRFIwX1VTQjJQSFkwQ1JfRFdOU1RSX01BU0s7CisgICAgICAgIAl1c2IycGh5MGNyID0gdXNiMnBoeTBjciB8IFNEUjBfVVNCMlBIWTBDUl9EV05TVFJfREVWOwkJLyowKi8KKwkJdXNiMnBoeTBjciA9IHVzYjJwaHkwY3IgJn5TRFIwX1VTQjJQSFkwQ1JfVVRNSUNOX01BU0s7CisgICAgICAgIAl1c2IycGh5MGNyID0gdXNiMnBoeTBjciB8IFNEUjBfVVNCMlBIWTBDUl9VVE1JQ05fREVWOwkJLyowKi8KKworCQl1c2IyaDBjciAgID0gdXNiMmgwY3IgJn5TRFIwX1VTQjJIMENSX1dESU5UX01BU0s7CisgICAgICAgIAl1c2IyaDBjciAgID0gdXNiMmgwY3IgfCBTRFIwX1VTQjJIMENSX1dESU5UXzhCSVRfNjBNSFo7CQkvKjAqLworCisJCXVzYjJkMGNyID0gdXNiMmQwY3IgJn5TRFIwX1VTQjJEMENSX1VTQjJERVZfRUJDX1NFTF9NQVNLOworICAgICAgICAJdXNiMmQwY3IgPSB1c2IyZDBjciB8IFNEUjBfVVNCMkQwQ1JfRUJDX1NFTEVDVElPTjsJCS8qMCovCisKKwkJc2RyMF9wZmMxID0gc2RyMF9wZmMxICZ+U0RSMF9QRkMxX1VFU19NQVNLOworICAgICAgICAJc2RyMF9wZmMxID0gc2RyMF9wZmMxIHwgU0RSMF9QRkMxX1VFU19FQkNIUl9TRUw7CQkvKjEqLworCisgICAgICAgIAltdHNkcihTRFIwX1VTQjJIMENSLCB1c2IyaDBjcik7CisgICAgICAgIAltdHNkcihTRFIwX1VTQjJQSFkwQ1IsIHVzYjJwaHkwY3IpOworCQltdHNkcihTRFIwX1VTQjAsIHVzYjJkMGNyKTsKKwkJbXRzZHIoU0RSMF9QRkMxLCBzZHIwX3BmYzEpOworCisJCS8qY2xlYXIgcmVzZXRzKi8KKwkJdWRlbGF5ICgxMDAwKTsKKwkJbXRzZHIoU0RSMF9TUlNUMSwgMHgwMDAwMDAwMCk7CisJCXVkZWxheSAoMTAwMCk7CisJCW10c2RyKFNEUjBfU1JTVDAsIDB4MDAwMDAwMDApOworCisJCXByaW50ZigiVVNCOiAgIERldmljZShpbnQgcGh5KVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja2JvYXJkKHZvaWQpCit7CisJY2hhciAqcyA9IGdldGVudigic2VyaWFsIyIpOworCisJcHJpbnRmKCJCb2FyZDogU2VxdW9pYSAtIEFNQ0MgUFBDNDQwRVB4IEV2YWx1YXRpb24gQm9hcmQiKTsKKwlpZiAocyAhPSBOVUxMKSB7CisJCXB1dHMoIiwgc2VyaWFsIyAiKTsKKwkJcHV0cyhzKTsKKwl9CisJcHV0YygnXG4nKTsKKworCXJldHVybiAoMCk7Cit9CisKKyNpZiBkZWZpbmVkKENGR19EUkFNX1RFU1QpCitpbnQgdGVzdGRyYW0odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nICptZW0gPSAodW5zaWduZWQgbG9uZyAqKTA7CisJY29uc3QgdW5zaWduZWQgbG9uZyBrZW5kID0gKDEwMjQgLyBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXVuc2lnbmVkIGxvbmcgaywgbjsKKworCW10bXNyKDApOworCisJZm9yIChrID0gMDsgayA8IENGR19NQllURVNfU0RSQU07CisJICAgICArK2ssIG1lbSArPSAoMTAyNCAvIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHsKKwkJaWYgKChrICYgMTAyMykgPT0gMCkgeworCQkJcHJpbnRmKCIlM2QgTUJcciIsIGsgLyAxMDI0KTsKKwkJfQorCisJCW1lbXNldChtZW0sIDB4YWFhYWFhYWEsIDEwMjQpOworCQlmb3IgKG4gPSAwOyBuIDwga2VuZDsgKytuKSB7CisJCQlpZiAobWVtW25dICE9IDB4YWFhYWFhYWEpIHsKKwkJCQlwcmludGYoIlNEUkFNIHRlc3QgZmFpbHMgYXQ6ICUwOHhcbiIsCisJCQkJICAgICAgICh1aW50KSAmIG1lbVtuXSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKworCQltZW1zZXQobWVtLCAweDU1NTU1NTU1LCAxMDI0KTsKKwkJZm9yIChuID0gMDsgbiA8IGtlbmQ7ICsrbikgeworCQkJaWYgKG1lbVtuXSAhPSAweDU1NTU1NTU1KSB7CisJCQkJcHJpbnRmKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLAorCQkJCSAgICAgICAodWludCkgJiBtZW1bbl0pOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJfQorCXByaW50ZigiU0RSQU0gdGVzdCBwYXNzZXNcbiIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgcGNpX3ByZV9pbml0CisgKgorICogIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKKyAqICB0aGUgYm9hcmQgdGhlIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHRoaW5ncy4gUmV0dXJuaW5nIGEgdmFsdWUgb2YgemVybworICogIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgorICoKKyAqCURpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKKyAqCShhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQorICoJY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDRkdfUENJX1BSRV9JTklUKQoraW50IHBjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworI2lmIDAKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqCUNhY3R1cyBpcyBhbHdheXMgY29uZmlndXJlZCBhcyB0aGUgaG9zdCAmIHJlcXVpcmVzIHRoZQorCSAqCVBDSSBhcmJpdGVyIHRvIGJlIGVuYWJsZWQgPz8/CisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJdW5zaWduZWQgbG9uZyBzdHJhcDsKKwltZnNkcihzZHJfc2RzdHAxLCBzdHJhcCk7CisJaWYgKChzdHJhcCAmIFNEUjBfU0RTVFAxX1BBRV9NQVNLKSA9PSAwKSB7CisJCXByaW50ZigiUENJOiBTRFIwX1NUUlAxW1BBRV0gbm90IHNldC5cbiIpOworCQlwcmludGYoIlBDSTogQ29uZmlndXJhdGlvbiBhYm9ydGVkLlxuIik7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfCBTZXQgcHJpb3JpdHkgZm9yIGFsbCBQTEIzIGRldmljZXMgdG8gMC4KKwkgIHwgU2V0IFBMQjMgYXJiaXRlciB0byBmYWlyIG1vZGUuCisJICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbWZzZHIoc2RyX2FtcDEsIGFkZHIpOworCW10c2RyKHNkcl9hbXAxLCAoYWRkciAmIDB4MDAwMDAwRkYpIHwgMHgwMDAwRkYwMCk7CisJYWRkciA9IG1mZGNyKHBsYjNfYWNyKTsKKwltdGRjcihwbGIzX2FjciwgYWRkciB8IDB4ODAwMDAwMDApOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfCBTZXQgcHJpb3JpdHkgZm9yIGFsbCBQTEI0IGRldmljZXMgdG8gMC4KKwkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwltZnNkcihzZHJfYW1wMCwgYWRkcik7CisJbXRzZHIoc2RyX2FtcDAsIChhZGRyICYgMHgwMDAwMDBGRikgfCAweDAwMDBGRjAwKTsKKwlhZGRyID0gbWZkY3IocGxiNF9hY3IpIHwgMHhhMDAwMDAwMDsJLyogV2FzIDB4OC0tLS0gKi8KKwltdGRjcihwbGI0X2FjciwgYWRkcik7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8IFNldCBOZWJ1bGEgUExCNCBhcmJpdGVyIHRvIGZhaXIgbW9kZS4KKwkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkvKiBTZWdtZW50MCAqLworCWFkZHIgPSAobWZkY3IocGxiMF9hY3IpICYgfnBsYjBfYWNyX3BwbV9tYXNrKSB8IHBsYjBfYWNyX3BwbV9mYWlyOworCWFkZHIgPSAoYWRkciAmIH5wbGIwX2Fjcl9oYnVfbWFzaykgfCBwbGIwX2Fjcl9oYnVfZW5hYmxlZDsKKwlhZGRyID0gKGFkZHIgJiB+cGxiMF9hY3JfcmRwX21hc2spIHwgcGxiMF9hY3JfcmRwXzRkZWVwOworCWFkZHIgPSAoYWRkciAmIH5wbGIwX2Fjcl93cnBfbWFzaykgfCBwbGIwX2Fjcl93cnBfMmRlZXA7CisJbXRkY3IocGxiMF9hY3IsIGFkZHIpOworCisJLyogU2VnbWVudDEgKi8KKwlhZGRyID0gKG1mZGNyKHBsYjFfYWNyKSAmIH5wbGIxX2Fjcl9wcG1fbWFzaykgfCBwbGIxX2Fjcl9wcG1fZmFpcjsKKwlhZGRyID0gKGFkZHIgJiB+cGxiMV9hY3JfaGJ1X21hc2spIHwgcGxiMV9hY3JfaGJ1X2VuYWJsZWQ7CisJYWRkciA9IChhZGRyICYgfnBsYjFfYWNyX3JkcF9tYXNrKSB8IHBsYjFfYWNyX3JkcF80ZGVlcDsKKwlhZGRyID0gKGFkZHIgJiB+cGxiMV9hY3Jfd3JwX21hc2spIHwgcGxiMV9hY3Jfd3JwXzJkZWVwOworCW10ZGNyKHBsYjFfYWNyLCBhZGRyKTsKKworCXJldHVybiAxOworfQorI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDRkdfUENJX1BSRV9JTklUKSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHBjaV90YXJnZXRfaW5pdAorICoKKyAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCisgKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCisgKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ0ZHX1BDSV9UQVJHRVRfSU5JVCkKK3ZvaWQgcGNpX3RhcmdldF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKK3sKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqIFNldCB1cCBEaXJlY3QgTU1JTyByZWdpc3RlcnMKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfCBQb3dlclBDNDQwRVBYIFBDSSBNYXN0ZXIgY29uZmlndXJhdGlvbi4KKwkgIHwgTWFwIG9uZSAxR2lnIHJhbmdlIG9mIFBMQi9wcm9jZXNzb3IgYWRkcmVzc2VzIHRvIFBDSSBtZW1vcnkgc3BhY2UuCisJICB8ICAgUExCIGFkZHJlc3MgMHhBMDAwMDAwMC0weERGRkZGRkZGID09PiBQQ0kgYWRkcmVzcyAweEEwMDAwMDAwLTB4REZGRkZGRkYKKwkgIHwgICBVc2UgYnl0ZSByZXZlcnNlZCBvdXQgcm91dGluZXMgdG8gaGFuZGxlIGVuZGlhbmVzcy4KKwkgIHwgTWFrZSB0aGlzIHJlZ2lvbiBub24tcHJlZmV0Y2hhYmxlLgorCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlvdXQzMnIoUENJWDBfUE1NME1BLCAweDAwMDAwMDAwKTsJLyogUE1NMCBNYXNrL0F0dHJpYnV0ZSAtIGRpc2FibGVkIGI0IHNldHRpbmcgKi8KKwlvdXQzMnIoUENJWDBfUE1NMExBLCBDRkdfUENJX01FTUJBU0UpOwkvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KKwlvdXQzMnIoUENJWDBfUE1NMFBDSUxBLCBDRkdfUENJX01FTUJBU0UpOwkvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLworCW91dDMycihQQ0lYMF9QTU0wUENJSEEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KKwlvdXQzMnIoUENJWDBfUE1NME1BLCAweEUwMDAwMDAxKTsJLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCBhbmQgZW5hYmxlIHJlZ2lvbiAqLworCisJb3V0MzJyKFBDSVgwX1BNTTFNQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgTWFzay9BdHRyaWJ1dGUgLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCisJb3V0MzJyKFBDSVgwX1BNTTFMQSwgQ0ZHX1BDSV9NRU1CQVNFMik7IC8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLworCW91dDMycihQQ0lYMF9QTU0xUENJTEEsIENGR19QQ0lfTUVNQkFTRTIpOwkvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLworCW91dDMycihQQ0lYMF9QTU0xUENJSEEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KKwlvdXQzMnIoUENJWDBfUE1NMU1BLCAweEUwMDAwMDAxKTsJLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCBhbmQgZW5hYmxlIHJlZ2lvbiAqLworCisJb3V0MzJyKFBDSVgwX1BUTTFNUywgMHgwMDAwMDAwMSk7CS8qIE1lbW9yeSBTaXplL0F0dHJpYnV0ZSAqLworCW91dDMycihQQ0lYMF9QVE0xTEEsIDApOwkvKiBMb2NhbCBBZGRyLiBSZWcgKi8KKwlvdXQzMnIoUENJWDBfUFRNMk1TLCAwKTsJLyogTWVtb3J5IFNpemUvQXR0cmlidXRlICovCisJb3V0MzJyKFBDSVgwX1BUTTJMQSwgMCk7CS8qIExvY2FsIEFkZHIuIFJlZyAqLworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiBTZXQgdXAgQ29uZmlndXJhdGlvbiByZWdpc3RlcnMKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCS8qIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZCAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwKKwkJCSAgICAgIENGR19QQ0lfU1VCU1lTX1ZFTkRPUklEKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9JRCwgQ0ZHX1BDSV9TVUJTWVNfSUQpOworCisJLyogQ29uZmlndXJlIGNvbW1hbmQgcmVnaXN0ZXIgYXMgYnVzIG1hc3RlciAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwgUENJX0NPTU1BTkRfTUFTVEVSKTsKKworCS8qIDI0MG5TIFBDSSBjbG9jayAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfTEFURU5DWV9USU1FUiwgMSk7CisKKwkvKiBObyBlcnJvciByZXBvcnRpbmcgKi8KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0VSUkVOLCAwKTsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoMCwgUENJX0JSREdPUFQyLCAweDAwMDAwMTAxKTsKKworfQorI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDRkdfUENJX1RBUkdFVF9JTklUKSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHBjaV9tYXN0ZXJfaW5pdAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENGR19QQ0lfTUFTVEVSX0lOSVQpCit2b2lkIHBjaV9tYXN0ZXJfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJdW5zaWduZWQgc2hvcnQgdGVtcF9zaG9ydDsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8IFdyaXRlIHRoZSBQb3dlclBDNDQwIEVQIFBDSSBDb25maWd1cmF0aW9uIHJlZ3MuCisJICB8ICAgRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYmUgYSBtYXN0ZXIgb24gdGhlIFBDSSBidXMgKFBNTSkuCisJICB8ICAgRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYWN0IGFzIGEgUENJIG1lbW9yeSB0YXJnZXQgKFBUTSkuCisJICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCAmdGVtcF9zaG9ydCk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELAorCQkJICAgICAgdGVtcF9zaG9ydCB8IFBDSV9DT01NQU5EX01BU1RFUiB8CisJCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkpOworfQorI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDRkdfUENJX01BU1RFUl9JTklUKSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGlzX3BjaV9ob3N0CisgKgorICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSBwY2kgc2NhbiBzaG91bGQgYmUKKyAqCXBlcmZvcm1lZC4gV2l0aCB2YXJpb3VzIGhhcmR3YXJlIGVudmlyb25tZW50cyAoZXNwZWNpYWxseSBjUENJIGFuZAorICoJUFBNQykgaXQncyBpbnN1ZmZpY2llbnQgdG8gZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYXJiaXRlciBlbmFibGUKKyAqCWJpdCBpbiB0aGUgc3RyYXAgcmVnaXN0ZXIsIG9yIGdlbmVyaWMgaG9zdC9hZGFwdGVyIGFzc3VtcHRpb25zLgorICoKKyAqCVJhdGhlciB0aGFuIGhhcmQtY29kZSBhIGJhZCBhc3N1bXB0aW9uIGluIHRoZSBnZW5lcmFsIDQ0MCBjb2RlLCB0aGUKKyAqCTQ0MCBwY2kgY29kZSByZXF1aXJlcyB0aGUgYm9hcmQgdG8gZGVjaWRlIGF0IHJ1bnRpbWUuCisgKgorICoJUmV0dXJuIDAgZm9yIGFkYXB0ZXIgbW9kZSwgbm9uLXplcm8gZm9yIGhvc3QgKG1vbmFyY2gpIG1vZGUuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUENJKQoraW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKK3sKKwkvKiBDYWN0dXMgaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgaG9zdC4gKi8KKwlyZXR1cm4gKDEpOworfQorI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZXF1b2lhLmggYi9ib2FyZC9hbWNjL3NlcXVvaWEvc2VxdW9pYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNDRiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hbWNjL3NlcXVvaWEvc2VxdW9pYS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIEphY3F1ZWxpbmUgUGlyYS1GZXJyaW9sLCBBTUNDL0lCTSwganBpcmEtZmVycmlvbEBmci5pYm0uY29tCisgKiBBbGFpbiBTYXVyZWwsICAgICAgICAgICAgQU1DQy9JQk0sIGFsYWluLnNhdXJlbEBmci5pYm0uY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRUJDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgLSBFQkMwX0NGRworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFeHRlcm5hbCBCdXMgVGhyZWUtU3RhdGUgQ29udHJvbCAqLworI2RlZmluZSBFQkMwX0NGR19FQlRDX0RSSVZFTgkgICAgMHg4MDAwMDAwMAorLyogRGV2aWNlLVBhY2VkIFRpbWUtb3V0IERpc2FibGUgKi8KKyNkZWZpbmUgRUJDMF9DRkdfUFREX0VOQUJMRUQJICAgIDB4MDAwMDAwMDAKKy8qIFJlYWR5IFRpbWVvdXQgQ291bnQgKi8KKyNkZWZpbmUgRUJDMF9DRkdfUlRDX01BU0sJICAgIDB4MzgwMDAwMDAKKyNkZWZpbmUgRUJDMF9DRkdfUlRDXzE2UEVSQ0xLCSAgICAweDAwMDAwMDAwCisjZGVmaW5lIEVCQzBfQ0ZHX1JUQ18zMlBFUkNMSwkgICAgMHgwODAwMDAwMAorI2RlZmluZSBFQkMwX0NGR19SVENfNjRQRVJDTEsJICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRUJDMF9DRkdfUlRDXzEyOFBFUkNMSwkgICAgMHgxODAwMDAwMAorI2RlZmluZSBFQkMwX0NGR19SVENfMjU2UEVSQ0xLCSAgICAweDIwMDAwMDAwCisjZGVmaW5lIEVCQzBfQ0ZHX1JUQ181MTJQRVJDTEsJICAgIDB4MjgwMDAwMDAKKyNkZWZpbmUgRUJDMF9DRkdfUlRDXzEwMjRQRVJDTEsJICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgRUJDMF9DRkdfUlRDXzIwNDhQRVJDTEsJICAgIDB4MzgwMDAwMDAKKy8qIEV4dGVybmFsIE1hc3RlciBQcmlvcml0eSBMb3cgKi8KKyNkZWZpbmUgRUJDMF9DRkdfRU1QTF9MT1cJICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRUJDMF9DRkdfRU1QTF9NRURJVU1fTE9XICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgRUJDMF9DRkdfRU1QTF9NRURJVU1fSElHSCAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgRUJDMF9DRkdfRU1QTF9ISUdICSAgICAweDA2MDAwMDAwCisvKiBFeHRlcm5hbCBNYXN0ZXIgUHJpb3JpdHkgSGlnaCAqLworI2RlZmluZSBFQkMwX0NGR19FTVBIX0xPVwkgICAgMHgwMDAwMDAwMAorI2RlZmluZSBFQkMwX0NGR19FTVBIX01FRElVTV9MT1cgICAgMHgwMDgwMDAwMAorI2RlZmluZSBFQkMwX0NGR19FTVBIX01FRElVTV9ISUdIICAgMHgwMTAwMDAwMAorI2RlZmluZSBFQkMwX0NGR19FTVBIX0hJR0gJICAgIDB4MDE4MDAwMDAKKy8qIENoaXAgU2VsZWN0IFRocmVlLVN0YXRlIENvbnRyb2wgKi8KKyNkZWZpbmUgRUJDMF9DRkdfQ1NUQ19EUklWRU4JICAgIDB4MDA0MDAwMDAKKy8qIEJ1cnN0IFByZWZldGNoICovCisjZGVmaW5lIEVCQzBfQ0ZHX0JQRl9PTkVEVwkgICAgMHgwMDAwMDAwMAorI2RlZmluZSBFQkMwX0NGR19CUEZfVFdPRFcJICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgRUJDMF9DRkdfQlBGX0ZPVVJEVwkgICAgMHgwMDIwMDAwMAorLyogRXh0ZXJuYWwgTWFzdGVyIFNpemUgKi8KKyNkZWZpbmUgRUJDMF9DRkdfRU1TXzhCSVQJICAgIDB4MDAwMDAwMDAKKy8qIFBvd2VyIE1hbmFnZW1lbnQgRW5hYmxlICovCisjZGVmaW5lIEVCQzBfQ0ZHX1BNRV9ESVNBQkxFRAkgICAgMHgwMDAwMDAwMAorI2RlZmluZSBFQkMwX0NGR19QTUVfRU5BQkxFRAkgICAgMHgwMDAyMDAwMAorLyogUG93ZXIgTWFuYWdlbWVudCBUaW1lciAqLworI2RlZmluZSBFQkMwX0NGR19QTVRfRU5DT0RFKG4pCQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MUYpPDwxMikKKworI2RlZmluZSBTRFIwX1VTQjAgICAgICAgICAgICAgICAgICAgIDB4MDMyMCAgICAgLyogVVNCIENvbnRyb2wgUmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS91LWJvb3QtbmFuZC5sZHMgYi9ib2FyZC9hbWNjL3NlcXVvaWEvdS1ib290LW5hbmQubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMmUyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hbWNjL3NlcXVvaWEvdS1ib290LW5hbmQubGRzCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9BUkNIKHBvd2VycGMpCitTRUFSQ0hfRElSKC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9wb3dlcnBjLWFueS1lbGYvbGliKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KKyAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KKworICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCisKKyAgICAvKiBBbGlnbiB0byBuZXh0IE5BTkQgYmxvY2sgKi8KKyAgICAuID0gQUxJR04oMHg0MDAwKTsKKyAgICBjb21tb24vZW52aXJvbm1lbnQubyAgKC5wcGNlbnYpCisgICAgLyogS2VlcCBzb21lIHNwYWNlIGhlcmUgZm9yIHJlZHVuZGFudCBlbnYgYW5kIHBvdGVudGlhbCBiYWQgZW52IGJsb2NrcyAqLworICAgIC4gPSBBTElHTigweDEwMDAwKTsKKworICAgICooLnRleHQpCisgICAgKiguZml4dXApCisgICAgKiguZ290MSkKKyAgfQorICBfZXRleHQgPSAuOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgIDoKKyAgeworICAgICooLnJvZGF0YSkKKyAgICAqKC5yb2RhdGExKQorICAgICooLnJvZGF0YS5zdHIxLjQpCisgIH0KKyAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAorICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9CisgIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KKworICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KKyAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7CisgIF9lcm90ZXh0ID0gLjsKKyAgUFJPVklERSAoZXJvdGV4dCA9IC4pOworICAucmVsb2MgICA6CisgIHsKKyAgICAqKC5nb3QpCisgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAqKC5nb3QyKQorICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICooLmZpeHVwKQorICB9CisgIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgICooLmRhdGExKQorICAgICooLnNkYXRhKQorICAgICooLnNkYXRhMikKKyAgICAqKC5keW5hbWljKQorICAgIENPTlNUUlVDVE9SUworICB9CisgIF9lZGF0YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKworICAuID0gLjsKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKworICAuID0gLjsKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisKKyAgX2VuZCA9IC4gOworICBQUk9WSURFIChlbmQgPSAuKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS91LWJvb3QubGRzIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyM2Y5OAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FtY2Mvc2VxdW9pYS91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9BUkNIKHBvd2VycGMpCitTRUFSQ0hfRElSKC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9wb3dlcnBjLWFueS1lbGYvbGliKTsKKy8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/CisgICBfX0RZTkFNSUMgPSAwOyAgICAqLworU0VDVElPTlMKK3sKKyAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgorICB7CisgICAgKigucmVzZXR2ZWMpCisgIH0gPSAweGZmZmYKKworICAuYm9vdHBnIDB4RkZGRkYwMDAgOgorICB7CisgICAgY3B1L3BwYzR4eC9zdGFydC5vCSguYm9vdHBnKQorICB9ID0gMHhmZmZmCisKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KKyAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQorICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKSAJfQorICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkgCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKSAJfQorICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KKyAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9CisgIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KKyAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KKyAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLworICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLworCisgICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKKworICAgICooLnRleHQpCisgICAgKiguZml4dXApCisgICAgKiguZ290MSkKKyAgfQorICBfZXRleHQgPSAuOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgIDoKKyAgeworICAgICooLnJvZGF0YSkKKyAgICAqKC5yb2RhdGExKQorICAgICooLnJvZGF0YS5zdHIxLjQpCisgIH0KKyAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAorICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9CisgIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KKworICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KKyAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7CisgIF9lcm90ZXh0ID0gLjsKKyAgUFJPVklERSAoZXJvdGV4dCA9IC4pOworICAucmVsb2MgICA6CisgIHsKKyAgICAqKC5nb3QpCisgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAqKC5nb3QyKQorICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICooLmZpeHVwKQorICB9CisgIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgICooLmRhdGExKQorICAgICooLnNkYXRhKQorICAgICooLnNkYXRhMikKKyAgICAqKC5keW5hbWljKQorICAgIENPTlNUUlVDVE9SUworICB9CisgIF9lZGF0YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKworICAuID0gLjsKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKworICAuID0gLjsKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisKKyAgcHBjZW52X2Fzc2VydCA9IEFTU0VSVCguIDwgMHhGRkZGODAwMCwgIi5ic3Mgc2VjdGlvbiB0b28gYmlnLCBvdmVybGFwcyAucHBjZW52IHNlY3Rpb24uIFBsZWFzZSB1cGRhdGUgeW91ciBjb25mZ3VyYXRpb246IENGR19NT05JVE9SX0JBU0UsIENGR19NT05JVE9SX0xFTiBhbmQgVEVYVF9CQVNFIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVkLiIpOworCisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3dhbG51dC9NYWtlZmlsZSBiL2JvYXJkL2FtY2Mvd2FsbnV0L01ha2VmaWxlCmluZGV4IGY1YmRhNTUuLmU3OGVkNWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mvd2FsbnV0L01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2Mvd2FsbnV0L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDkgKzIzLDEzIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3llbGxvd3N0b25lL01ha2VmaWxlIGIvYm9hcmQvYW1jYy95ZWxsb3dzdG9uZS9NYWtlZmlsZQppbmRleCA0NzExNmQzLi5hNDdhMDY3IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3llbGxvd3N0b25lL01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2MveWVsbG93c3RvbmUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vCitDT0JKUwk9ICQoQk9BUkQpLm8KIFNPQkpTCT0gaW5pdC5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MveWVsbG93c3RvbmUveWVsbG93c3RvbmUuYyBiL2JvYXJkL2FtY2MveWVsbG93c3RvbmUveWVsbG93c3RvbmUuYwppbmRleCA4NmQwZGI3Li45MmRjOWQ0IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3llbGxvd3N0b25lL3llbGxvd3N0b25lLmMKKysrIGIvYm9hcmQvYW1jYy95ZWxsb3dzdG9uZS95ZWxsb3dzdG9uZS5jCkBAIC0zMTMsMTMgKzMxMywxMyBAQAogCW10c2RyYW0obWVtX3RyMCwgMHg0MTBhNDAxMik7CS8qID8/ICovCiAJbXRzZHJhbShtZW1fcnRyLCAweDA0MDgwMDAwKTsJLyogPz8gKi8KIAltdHNkcmFtKG1lbV9jZmcxLCAweDAwMDAwMDAwKTsJLyogU2VsZi1yZWZyZXNoIGV4aXQsIGRpc2FibGUgUE0gICAgKi8KLQltdHNkcmFtKG1lbV9jZmcwLCAweDM0MDAwMDAwKTsJLyogRGlzYWJsZSBFRUMgKi8KKwltdHNkcmFtKG1lbV9jZmcwLCAweDMwMDAwMDAwKTsJLyogRGlzYWJsZSBFRUMgKi8KIAl1ZGVsYXkoNDAwKTsJCS8qIERlbGF5IDIwMCB1c2VjcyAobWluKSAgICAgICAgICAgICovCiAKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogRW5hYmxlIHRoZSBjb250cm9sbGVyLCB0aGVuIHdhaXQgZm9yIERDRU4gdG8gY29tcGxldGUKIAkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbXRzZHJhbShtZW1fY2ZnMCwgMHg4NDAwMDAwMCk7CS8qIEVuYWJsZSAqLworCW10c2RyYW0obWVtX2NmZzAsIDB4ODAwMDAwMDApOwkvKiBFbmFibGUgKi8KIAogCWZvciAoOzspIHsKIAkJbWZzZHJhbShtZW1fbWNzdHMsIHJlZyk7CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3lvc2VtaXRlL01ha2VmaWxlIGIvYm9hcmQvYW1jYy95b3NlbWl0ZS9NYWtlZmlsZQppbmRleCA0NzExNmQzLi5hNDdhMDY3IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3lvc2VtaXRlL01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2MveW9zZW1pdGUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vCitDT0JKUwk9ICQoQk9BUkQpLm8KIFNPQkpTCT0gaW5pdC5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MveW9zZW1pdGUveW9zZW1pdGUuYyBiL2JvYXJkL2FtY2MveW9zZW1pdGUveW9zZW1pdGUuYwppbmRleCA2NzQyNDQxLi43ZjJlNzE4IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3lvc2VtaXRlL3lvc2VtaXRlLmMKKysrIGIvYm9hcmQvYW1jYy95b3NlbWl0ZS95b3NlbWl0ZS5jCkBAIC0zMDksMTMgKzMwOSwxMyBAQAogCW10c2RyYW0obWVtX3RyMCwgMHg0MTBhNDAxMik7CS8qID8/ICovCiAJbXRzZHJhbShtZW1fcnRyLCAweDA0MDgwMDAwKTsJLyogPz8gKi8KIAltdHNkcmFtKG1lbV9jZmcxLCAweDAwMDAwMDAwKTsJLyogU2VsZi1yZWZyZXNoIGV4aXQsIGRpc2FibGUgUE0gICAgKi8KLQltdHNkcmFtKG1lbV9jZmcwLCAweDM0MDAwMDAwKTsJLyogRGlzYWJsZSBFRUMgKi8KKwltdHNkcmFtKG1lbV9jZmcwLCAweDMwMDAwMDAwKTsJLyogRGlzYWJsZSBFRUMgKi8KIAl1ZGVsYXkoNDAwKTsJCS8qIERlbGF5IDIwMCB1c2VjcyAobWluKSAgICAgICAgICAgICovCiAKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogRW5hYmxlIHRoZSBjb250cm9sbGVyLCB0aGVuIHdhaXQgZm9yIERDRU4gdG8gY29tcGxldGUKIAkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbXRzZHJhbShtZW1fY2ZnMCwgMHg4NDAwMDAwMCk7CS8qIEVuYWJsZSAqLworCW10c2RyYW0obWVtX2NmZzAsIDB4ODAwMDAwMDApOwkvKiBFbmFibGUgKi8KIAogCWZvciAoOzspIHsKIAkJbWZzZHJhbShtZW1fbWNzdHMsIHJlZyk7CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3l1Y2NhL01ha2VmaWxlIGIvYm9hcmQvYW1jYy95dWNjYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZmZDQwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYW1jYy95dWNjYS9NYWtlZmlsZQpAQCAtMCwwICsxLDUxIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBjbWRfeXVjY2EubworU09CSlMJPSBpbml0Lm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZCAqfgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95dWNjYS9jbWRfeXVjY2EuYyBiL2JvYXJkL2FtY2MveXVjY2EvY21kX3l1Y2NhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5OGIyMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FtY2MveXVjY2EvY21kX3l1Y2NhLmMKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDEKKyAqIERlbmlzIFBldGVyLCBNUEwgQUcgU3dpdHplcmxhbmQsIGQucGV0ZXJAbXBsLmNoCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogaGFja2VkIGZvciBldmI0NDBzcGUKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgInl1Y2NhLmgiCisjaW5jbHVkZSA8aTJjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCitleHRlcm4gdm9pZCBwcmludF9ldmI0NDBzcGVfaW5mbyh2b2lkKTsKK3N0YXRpYyBpbnQgc2V0Qm9vdFN0cmFwQ2xvY2soY21kX3RibF90ICpjbWR0cCwgaW50IGluY3JmbGFnLAorCQlpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKK2V4dGVybiBpbnQgY21kX2dldF9kYXRhX3NpemUoY2hhciogYXJnLCBpbnQgZGVmYXVsdF9zaXplKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworaW50IGRvX2V2YjQ0MHNwZShjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlyZXR1cm4gc2V0Qm9vdFN0cmFwQ2xvY2sgKGNtZHRwLCAxLCBmbGFnLCBhcmdjLCBhcmd2KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTW9kaWZ5IG1lbW9yeS4KKyAqCisgKiBTeW50YXg6CisgKglldmI0NDBzcGUgd3JjbGsgcHJvbTAscHJvbTEKKyAqLworc3RhdGljIGludCBzZXRCb290U3RyYXBDbG9jayhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgaW5jcmZsYWcsIGludCBmbGFnLAorCQlpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVjaGFyCWNoaXA7CisJdWxvbmcJZGF0YTsKKwlpbnQJbmJ5dGVzOworCWV4dGVybiBjaGFyIGNvbnNvbGVfYnVmZmVyW107CisKKwljaGFyIHN5c0Nsb2NrWzRdOworCWNoYXIgY3B1Q2xvY2tbNF07CisJY2hhciBwbGJDbG9ja1s0XTsKKwljaGFyIHBjaXhDbG9ja1s0XTsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoc3RyY21wKGFyZ3ZbMl0sICJwcm9tMCIpID09IDApCisJCWNoaXAgPSBJSUMwX0JPT1RQUk9NX0FERFI7CisJZWxzZQorCQljaGlwID0gSUlDMF9BTFRfQk9PVFBST01fQUREUjsKKworCWRvIHsKKwkJcHJpbnRmKCJlbnRlciBzeXMgY2xvY2sgZnJlcXVlbmN5IDMzIG9yIDY2IE1oeiBvciBxdWl0IHRvIGFib3J0XG4iKTsKKwkJbmJ5dGVzID0gcmVhZGxpbmUgKCIgPyAiKTsKKworCQlpZiAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAicXVpdCIpID09IDApCisJCQlyZXR1cm4gMDsKKworCQlpZiAoKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjMzIikgIT0gMCkgJgorCQkJCShzdHJjbXAoY29uc29sZV9idWZmZXIsICI2NiIpICE9IDApKQorCQkJbmJ5dGVzPTA7CisKKwkJc3RyY3B5KHN5c0Nsb2NrLCBjb25zb2xlX2J1ZmZlcik7CisKKwl9IHdoaWxlIChuYnl0ZXMgPT0gMCk7CisKKwlkbyB7CisJCWlmIChzdHJjbXAoc3lzQ2xvY2ssICI2NiIpID09IDApIHsKKwkJCXByaW50ZigiZW50ZXIgY3B1IGNsb2NrIGZyZXF1ZW5jeSA0MDAsIDUzMyBNaHogb3IgcXVpdCB0byBhYm9ydFxuIik7CisJCX0gZWxzZSB7CisjaWZkZWYJQ09ORklHX1NUUkVTUworCQkJcHJpbnRmKCJlbnRlciBjcHUgY2xvY2sgZnJlcXVlbmN5IDQwMCwgNTAwLCA1MzMsIDY2NyBNaHogb3IgcXVpdCB0byBhYm9ydFxuIik7CisjZWxzZQorCQkJcHJpbnRmKCJlbnRlciBjcHUgY2xvY2sgZnJlcXVlbmN5IDQwMCwgNTAwLCA1MzMgTWh6IG9yIHF1aXQgdG8gYWJvcnRcbiIpOworI2VuZGlmCisJCX0KKwkJbmJ5dGVzID0gcmVhZGxpbmUgKCIgPyAiKTsKKworCQlpZiAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAicXVpdCIpID09IDApCisJCQlyZXR1cm4gMDsKKworCQlpZiAoc3RyY21wKHN5c0Nsb2NrLCAiNjYiKSA9PSAwKSB7CisJCQlpZiAoKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjQwMCIpICE9IDApICYKKwkJCQkJKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjUzMyIpICE9IDApCisjaWZkZWYJQ09ORklHX1NUUkVTUworCQkJCQkmIChzdHJjbXAoY29uc29sZV9idWZmZXIsICI2NjciKSAhPSAwKQorI2VuZGlmCisJCQkgICApIHsKKwkJCQluYnl0ZXMgPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChzdHJjbXAoY29uc29sZV9idWZmZXIsICI0MDAiKSAhPSAwKSAmCisJCQkJCShzdHJjbXAoY29uc29sZV9idWZmZXIsICI1MDAiKSAhPSAwKSAmCisJCQkJCShzdHJjbXAoY29uc29sZV9idWZmZXIsICI1MzMiKSAhPSAwKQorI2lmZGVmCUNPTkZJR19TVFJFU1MKKwkJCQkJJiAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAiNjY3IikgIT0gMCkKKyNlbmRpZgorCQkJICAgKSB7CisJCQkJbmJ5dGVzID0gMDsKKwkJCX0KKwkJfQorCisJCXN0cmNweShjcHVDbG9jaywgY29uc29sZV9idWZmZXIpOworCisJfSB3aGlsZSAobmJ5dGVzID09IDApOworCisJaWYgKHN0cmNtcChjcHVDbG9jaywgIjUwMCIpID09IDApeworCQlzdHJjcHkocGxiQ2xvY2ssICIxNjYiKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChjcHVDbG9jaywgIjUzMyIpID09IDApeworCQlzdHJjcHkocGxiQ2xvY2ssICIxMzMiKTsKKwl9IGVsc2UgeworCQlkbyB7CisJCQlpZiAoc3RyY21wKGNwdUNsb2NrLCAiNDAwIikgPT0gMCkKKwkJCQlwcmludGYoImVudGVyIHBsYiBjbG9jayBmcmVxdWVuY3kgMTAwLCAxMzMgTWh6IG9yIHF1aXQgdG8gYWJvcnRcbiIpOworCisjaWZkZWYJQ09ORklHX1NUUkVTUworCQkJaWYgKHN0cmNtcChjcHVDbG9jaywgIjY2NyIpID09IDApCisJCQkJcHJpbnRmKCJlbnRlciBwbGIgY2xvY2sgZnJlcXVlbmN5IDEzMywgMTY2IE1oeiBvciBxdWl0IHRvIGFib3J0XG4iKTsKKworI2VuZGlmCisJCQluYnl0ZXMgPSByZWFkbGluZSAoIiA/ICIpOworCisJCQlpZiAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAicXVpdCIpID09IDApCisJCQkJcmV0dXJuIDA7CisKKwkJCWlmIChzdHJjbXAoY3B1Q2xvY2ssICI0MDAiKSA9PSAwKSB7CisJCQkJaWYgKChzdHJjbXAoY29uc29sZV9idWZmZXIsICIxMDAiKSAhPSAwKSAmCisJCQkJCQkoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAiMTMzIikgIT0gMCkpCisJCQkJCW5ieXRlcyA9IDA7CisJCQl9CisjaWZkZWYJQ09ORklHX1NUUkVTUworCQkJaWYgKHN0cmNtcChjcHVDbG9jaywgIjY2NyIpID09IDApIHsKKwkJCQlpZiAoKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjEzMyIpICE9IDApICYKKwkJCQkJCShzdHJjbXAoY29uc29sZV9idWZmZXIsICIxNjYiKSAhPSAwKSkKKwkJCQkJbmJ5dGVzID0gMDsKKwkJCX0KKyNlbmRpZgorCQkJc3RyY3B5KHBsYkNsb2NrLCBjb25zb2xlX2J1ZmZlcik7CisKKwkJfSB3aGlsZSAobmJ5dGVzID09IDApOworCX0KKworCWRvIHsKKwkJcHJpbnRmKCJlbnRlciBQY2ktWCBjbG9jayBmcmVxdWVuY3kgMzMsIDY2LCAxMDAgb3IgMTMzIE1oeiBvciBxdWl0IHRvIGFib3J0XG4iKTsKKwkJbmJ5dGVzID0gcmVhZGxpbmUgKCIgPyAiKTsKKworCQlpZiAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAicXVpdCIpID09IDApCisJCQlyZXR1cm4gMDsKKworCQlpZiAoKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjMzIikgIT0gMCkgJgorCQkJCShzdHJjbXAoY29uc29sZV9idWZmZXIsICI2NiIpICE9IDApICYKKwkJCQkoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAiMTAwIikgIT0gMCkgJgorCQkJCShzdHJjbXAoY29uc29sZV9idWZmZXIsICIxMzMiKSAhPSAwKSkgeworCQkJbmJ5dGVzID0gMDsKKwkJfQorCQlzdHJjcHkocGNpeENsb2NrLCBjb25zb2xlX2J1ZmZlcik7CisKKwl9IHdoaWxlIChuYnl0ZXMgPT0gMCk7CisKKwlwcmludGYoIlxuc3lzIGNsayAgID0gJXNNaHpcbiIsIHN5c0Nsb2NrKTsKKwlwcmludGYoImNwdSBjbGsgICA9ICVzTWh6XG4iLCBjcHVDbG9jayk7CisJcHJpbnRmKCJwbGIgY2xrICAgPSAlc01oelxuIiwgcGxiQ2xvY2spOworCXByaW50ZigiUGNpLVggY2xrID0gJXNNaHpcbiIsIHBjaXhDbG9jayk7CisKKwlkbyB7CisJCXByaW50ZigiXG5wcmVzcyBbeV0gdG8gd3JpdGUgSTJDIGJvb3RzdHJhcCBcbiIpOworCQlwcmludGYoIm9yIFtuXSB0byBhYm9ydC4gIFxuIik7CisJCXByaW50ZigiRG9uJ3QgZm9yZ2V0IHRvIHNldCBib2FyZCBzd2l0Y2hlcyBcbiIpOworCQlwcmludGYoImFjY29yZGluZyB0byB5b3VyIGNob2ljZSBiZWZvcmUgcmUtc3RhcnRpbmcgXG4iKTsKKwkJcHJpbnRmKCIocmVmZXIgdG8gNDQwc3BlX3Vib290X2tpdF91bV8xXzAxLnBkZikgXG4iKTsKKworCQluYnl0ZXMgPSByZWFkbGluZSAoIiA/ICIpOworCQlpZiAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAibiIpID09IDApCisJCQlyZXR1cm4gMDsKKworCX0gd2hpbGUgKG5ieXRlcyA9PSAwKTsKKworCWlmIChzdHJjbXAoc3lzQ2xvY2ssICIzMyIpID09IDApIHsKKwkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI0MDAiKSA9PSAwKSAmCisJCQkJKHN0cmNtcChwbGJDbG9jaywgIjEwMCIpID09IDApKQorCQkJZGF0YSA9IDB4ODY3OGMyMDY7CisKKwkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI0MDAiKSA9PSAwKSAmCisJCQkJKHN0cmNtcChwbGJDbG9jaywgIjEzMyIpID09IDApKQorCQkJZGF0YSA9IDB4ODY3OGMyYzY7CisKKwkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI1MDAiKSA9PSAwKSkKKwkJCWRhdGEgPSAweDg3NzhmMmM2OworCisJCWlmICgoc3RyY21wKGNwdUNsb2NrLCAiNTMzIikgPT0gMCkpCisJCQlkYXRhID0gMHg4Nzc5MDI1MjsKKworI2lmZGVmCUNPTkZJR19TVFJFU1MKKwkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI2NjciKSA9PSAwKSAmCisJCQkJKHN0cmNtcChwbGJDbG9jaywgIjEzMyIpID09IDApKQorCQkJZGF0YSA9IDB4ODc3OTQyNTY7CisKKwkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI2NjciKSA9PSAwKSAmCisJCQkJKHN0cmNtcChwbGJDbG9jaywgIjE2NiIpID09IDApKQorCQkJZGF0YSA9IDB4ODc3OTQyMDY7CisKKyNlbmRpZgorCX0KKwlpZiAoc3RyY21wKHN5c0Nsb2NrLCAiNjYiKSA9PSAwKSB7CisJCWlmICgoc3RyY21wKGNwdUNsb2NrLCAiNDAwIikgPT0gMCkgJgorCQkJCShzdHJjbXAocGxiQ2xvY2ssICIxMDAiKSA9PSAwKSkKKwkJCWRhdGEgPSAweDg0NzA2MjA2OworCisJCWlmICgoc3RyY21wKGNwdUNsb2NrLCAiNDAwIikgPT0gMCkgJgorCQkJCShzdHJjbXAocGxiQ2xvY2ssICIxMzMiKSA9PSAwKSkKKwkJCWRhdGEgPSAweDg0NzA2MmM2OworCisJCWlmICgoc3RyY21wKGNwdUNsb2NrLCAiNTMzIikgPT0gMCkpCisJCQlkYXRhID0gMHg4NTcwODIwNjsKKworI2lmZGVmCUNPTkZJR19TVFJFU1MKKwkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI2NjciKSA9PSAwKSAmCisJCQkJKHN0cmNtcChwbGJDbG9jaywgIjEzMyIpID09IDApKQorCQkJZGF0YSA9IDB4ODU3MGEyNTY7CisKKwkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI2NjciKSA9PSAwKSAmCisJCQkJKHN0cmNtcChwbGJDbG9jaywgIjE2NiIpID09IDApKQorCQkJZGF0YSA9IDB4ODU3MGEyMDY7CisKKyNlbmRpZgorCX0KKworI2lmZGVmCURFQlVHCisJcHJpbnRmKCIgcGluIHN0cmFwMCB0byB3cml0ZSBpbiBpMmMgID0gJXhcbiIsIGRhdGEpOworI2VuZGlmCS8qIERFQlVHICovCisKKwlpZiAoaTJjX3dyaXRlKGNoaXAsIDAsIDEsICh1Y2hhciAqKSZkYXRhLCA0KSAhPSAwKQorCQlwcmludGYoIkVycm9yIHdyaXRpbmcgc3RyYXAwIGluICVzXG4iLCBhcmd2WzJdKTsKKworCWlmIChzdHJjbXAocGNpeENsb2NrLCAiMzMiKSA9PSAwKQorCQlkYXRhID0gMHgwMDAwMDcwMTsKKworCWlmIChzdHJjbXAocGNpeENsb2NrLCAiNjYiKSA9PSAwKQorCQlkYXRhID0gMHgwMDAwMDYwMTsKKworCWlmIChzdHJjbXAocGNpeENsb2NrLCAiMTAwIikgPT0gMCkKKwkJZGF0YSA9IDB4MDAwMDA1MDE7CisKKwlpZiAoc3RyY21wKHBjaXhDbG9jaywgIjEzMyIpID09IDApCisJCWRhdGEgPSAweDAwMDAwNDAxOworCisJaWYgKHN0cmNtcChwbGJDbG9jaywgIjE2NiIpID09IDApCisJCWRhdGEgPSBkYXRhIHwgMHgwNTk1MDAwMDsKKwllbHNlCisJCWRhdGEgPSBkYXRhIHwgMHgwNUE1MDAwMDsKKworI2lmZGVmCURFQlVHCisJcHJpbnRmKCIgcGluIHN0cmFwMSB0byB3cml0ZSBpbiBpMmMgID0gJXhcbiIsIGRhdGEpOworI2VuZGlmCS8qIERFQlVHICovCisKKwl1ZGVsYXkoMTAwMCk7CisJaWYgKGkyY193cml0ZShjaGlwLCA0LCAxLCAodWNoYXIgKikmZGF0YSwgNCkgIT0gMCkKKwkJcHJpbnRmKCJFcnJvciB3cml0aW5nIHN0cmFwMSBpbiAlc1xuIiwgYXJndlsyXSk7CisKKwlyZXR1cm4gMDsKK30KKworVV9CT09UX0NNRCgKKwlldmI0NDBzcGUsCTMsCTEsCWRvX2V2YjQ0MHNwZSwKKwkiZXZiNDQwc3BlIC0gcHJvZ3JhbSB0aGUgc2VyaWFsIGRldmljZSBzdHJhcFxuIiwKKwkid3JjbGsgW3Byb20wfHByb20xXSAtIHByb2dyYW0gdGhlIHNlcmlhbCBkZXZpY2Ugc3RyYXBcbiIKKyk7CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3l1Y2NhL2NvbmZpZy5tayBiL2JvYXJkL2FtY2MveXVjY2EvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDU0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hbWNjL3l1Y2NhL2NvbmZpZy5tawpAQCAtMCwwICsxLDQyIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIEFNQ0MgNDQwU1BlIFJlZmVyZW5jZSBQbGF0Zm9ybSAoeXVjY2EpIGJvYXJkCisjCisKK2lmZXEgKCQocmFtc3ltKSwxKQorVEVYVF9CQVNFID0gMHgwN0ZEMDAwMAorZWxzZQorVEVYVF9CQVNFID0gMHhmZmZiMDAwMAorZW5kaWYKKworUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfNDQwPTEKKworaWZlcSAoJChkZWJ1ZyksMSkKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EREVCVUcKK2VuZGlmCisKK2lmZXEgKCQoZGJjciksMSkKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ0ZHX0lOSVRfREJDUj0weDhjZmYwMDAwCitlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95dWNjYS9mbGFzaC5jIGIvYm9hcmQvYW1jYy95dWNjYS9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YjhhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hbWNjL3l1Y2NhL2ZsYXNoLmMKQEAgLTAsMCArMSwxMDU0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBKdW4gR3UgPGp1bmdAYXJ0ZXN5bmNwLmNvbT4KKyAqIEFkZCBzdXBwb3J0IGZvciBBbTI5RjAxNkQgYW5kIGR5bmFtaWMgc3dpdGNoIHNldHRpbmcuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIE1vZGlmaWVkIDQvNS8yMDAxCisgKiBXYWl0IGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc2VjdG9yIGVyYXNlIGNvbW1hbmQgaXNzdWVkCisgKiA0LzUvMjAwMQorICogQ2hyaXMgSGFsbGluYW4gLSBEUzQuQ09NLCBJbmMuIC0gY2xoQG5ldDFwbHVzLmNvbQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwcGM0eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8cHBjNDQwLmg+CisjaW5jbHVkZSAieXVjY2EuaCIKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERFQlVHRih4Li4uKSBwcmludGYoeCkKKyNlbHNlCisjZGVmaW5lIERFQlVHRih4Li4uKQorI2VuZGlmCQkJCS8qIERFQlVHICovCisKK2ZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOwkvKiBpbmZvIGZvciBGTEFTSCBjaGlwcyAqLworCisvKgorICogTWFyayBiaWcgZmxhc2ggYmFuayAoMTYgYml0IGluc3RlYWQgb2YgOCBiaXQgYWNjZXNzKSBpbiBhZGRyZXNzIHdpdGggYml0IDAKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmxhc2hfYWRkcl90YWJsZVtdW0NGR19NQVhfRkxBU0hfQkFOS1NdID0geworCXsweGZmZjAwMDAwLCAweGZmZjgwMDAwLCAweGU3YzAwMDAxfSwgLyogMDpib290IGZyb20gc21hbGwgZmxhc2ggKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sIC8qIDE6Ym9vdCBmcm9tIHBjaSA2NiAgICAgICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LCAvKiAyOmJvb3QgZnJvbSBuYW5kIGZsYXNoICAqLworCXsweGU3RjAwMDAwLCAweGU3RjgwMDAwLCAweEZGQzAwMDAxfSwgLyogMzpib290IGZyb20gYmlnIGZsYXNoIDMzKi8KKwl7MHhlN0YwMDAwMCwgMHhlN0Y4MDAwMCwgMHhGRkMwMDAwMX0sIC8qIDQ6Ym9vdCBmcm9tIGJpZyBmbGFzaCA2NiovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LCAvKiA1OmJvb3QgZnJvbSAgICAgICAgICAgICAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwgLyogNjpib290IGZyb20gcGNpIDY2ICAgICAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sIC8qIDc6Ym9vdCBmcm9tICAgICAgICAgICAgICovCisJezB4ZmZmMDAwMDAsIDB4ZmZmODAwMDAsIDB4ZTdjMDAwMDF9LCAvKiA4OmJvb3QgZnJvbSBzbWFsbCBmbGFzaCAqLworfTsKKworLyoKKyAqIGluY2x1ZGUgY29tbW9uIGZsYXNoIGNvZGUgKGZvciBhbWNjIGJvYXJkcykKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfd29yZChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKTsKKyNpZmRlZiBDRkdfRkxBU0hfMk5EXzE2QklUX0RFVgorc3RhdGljIGludCB3cml0ZV93b3JkXzEoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSk7CitzdGF0aWMgaW50IHdyaXRlX3dvcmRfMihmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKTsKK3N0YXRpYyBpbnQgZmxhc2hfZXJhc2VfMShmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCk7CitzdGF0aWMgaW50IGZsYXNoX2VyYXNlXzIoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpOworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplXzEodnVfbG9uZyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pOworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplXzIodnVfbG9uZyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pOworI2VuZGlmCisKK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyhmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCWludCBpOworCWludCBrOworCWludCBzaXplOworCWludCBlcmFzZWQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqZmxhc2g7CisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgeworCQljYXNlIEZMQVNIX01BTl9BTUQ6CisJCQlwcmludGYoIkFNRCAiKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX01BTl9TVE06CisJCQlwcmludGYoIlNUTSAiKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX01BTl9GVUo6CisJCQlwcmludGYoIkZVSklUU1UgIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9NQU5fU1NUOgorCQkJcHJpbnRmKCJTU1QgIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9NQU5fTVg6CisJCQlwcmludGYoIk1JWEMgIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZigiVW5rbm93biBWZW5kb3IgIik7CisJCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKKwkJY2FzZSBGTEFTSF9BTTA0MDoKKwkJCXByaW50ZigiQU0yOUYwNDAgKDUxMiBLYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9BTTQwMEI6CisJCQlwcmludGYoIkFNMjlMVjQwMEIgKDQgTWJpdCwgYm90dG9tIGJvb3Qgc2VjdClcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQU00MDBUOgorCQkJcHJpbnRmKCJBTTI5TFY0MDBUICg0IE1iaXQsIHRvcCBib290IHNlY3RvcilcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQU04MDBCOgorCQkJcHJpbnRmKCJBTTI5TFY4MDBCICg4IE1iaXQsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX0FNODAwVDoKKwkJCXByaW50ZigiQU0yOUxWODAwVCAoOCBNYml0LCB0b3AgYm9vdCBzZWN0b3IpXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX0FNRDAxNjoKKwkJCXByaW50ZigiQU0yOUYwMTZEICgxNiBNYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9BTTE2MEI6CisJCQlwcmludGYoIkFNMjlMVjE2MEIgKDE2IE1iaXQsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX0FNMTYwVDoKKwkJCXByaW50ZigiQU0yOUxWMTYwVCAoMTYgTWJpdCwgdG9wIGJvb3Qgc2VjdG9yKVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9BTTMyMEI6CisJCQlwcmludGYoIkFNMjlMVjMyMEIgKDMyIE1iaXQsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX0FNMzIwVDoKKwkJCXByaW50ZigiQU0yOUxWMzIwVCAoMzIgTWJpdCwgdG9wIGJvb3Qgc2VjdG9yKVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9BTTAzM0M6CisJCQlwcmludGYoIkFNMjlMVjAzM0MgKDMyIE1iaXQsIHRvcCBib290IHNlY3RvcilcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfU1NUODAwQToKKwkJCXByaW50ZigiU1NUMzlMRi9WRjgwMCAoOCBNYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9TU1QxNjBBOgorCQkJcHJpbnRmKCJTU1QzOUxGL1ZGMTYwICgxNiBNYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9TVE1XMzIwRFQ6CisJCQlwcmludGYgKCJNMjlXMzIwRFQgKDMyIE0sIHRvcCBzZWN0b3IpXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX01YTFYzMjBUOgorCQkJcHJpbnRmICgiTVhMVjMyMFQgKDMyIE1iaXQsIHRvcCBzZWN0b3IpXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRmKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisJCQlicmVhazsKKwl9CisKKwlwcmludGYoIiAgU2l6ZTogJWxkIEtCIGluICVkIFNlY3RvcnNcbiIsCisJCQlpbmZvLT5zaXplID4+IDEwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7CisJCS8qCisJCSAqIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQKKwkJICovCisJCWlmIChpICE9IChpbmZvLT5zZWN0b3JfY291bnQgLSAxKSkKKwkJCXNpemUgPSBpbmZvLT5zdGFydFtpICsgMV0gLSBpbmZvLT5zdGFydFtpXTsKKwkJZWxzZQorCQkJc2l6ZSA9IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSAtIGluZm8tPnN0YXJ0W2ldOworCQllcmFzZWQgPSAxOworCQlmbGFzaCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbaV07CisJCXNpemUgPSBzaXplID4+IDI7CS8qIGRpdmlkZSBieSA0IGZvciBsb25nd29yZCBhY2Nlc3MgKi8KKwkJZm9yIChrID0gMDsgayA8IHNpemU7IGsrKykgeworCQkJaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpIHsKKwkJCQllcmFzZWQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKChpICUgNSkgPT0gMCkKKwkJCXByaW50ZigiXG4gICAiKTsKKwkJcHJpbnRmKCIgJTA4bFglcyVzIiwKKwkJCQlpbmZvLT5zdGFydFtpXSwKKwkJCQllcmFzZWQgPyAiIEUiIDogIiAgIiwKKwkJCQlpbmZvLT5wcm90ZWN0W2ldID8gIlJPICIgOiAiICAgIik7CisJfQorCXByaW50ZigiXG4iKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCisgKi8KKyNpZmRlZiBDRkdfRkxBU0hfMk5EXzE2QklUX0RFVgorc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplKHZ1X2xvbmcgKiBhZGRyLCBmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCS8qIGJpdCAwIHVzZWQgZm9yIGJpZyBmbGFzaCBtYXJraW5nICovCisJaWYgKCh1bG9uZylhZGRyICYgMHgxKQorCQlyZXR1cm4gZmxhc2hfZ2V0X3NpemVfMigodnVfbG9uZyAqKSgodWxvbmcpYWRkciAmIDB4ZmZmZmZmZmUpLCBpbmZvKTsKKwllbHNlCisJCXJldHVybiBmbGFzaF9nZXRfc2l6ZV8xKGFkZHIsIGluZm8pOworfQorCitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemVfMSh2dV9sb25nICogYWRkciwgZmxhc2hfaW5mb190ICogaW5mbykKKyNlbHNlCitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUodnVfbG9uZyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pCisjZW5kaWYKK3sKKwlzaG9ydCBpOworCUNGR19GTEFTSF9XT1JEX1NJWkUgdmFsdWU7CisJdWxvbmcgYmFzZSA9ICh1bG9uZykgYWRkcjsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopIGFkZHI7CisKKwlERUJVR0YoIkZMQVNIIEFERFI6ICUwOHhcbiIsICh1bnNpZ25lZClhZGRyKTsKKworCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCisJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwQUEwMEFBOworCWFkZHIyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwlhZGRyMltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDA5MDAwOTA7CisJdWRlbGF5KDEwMDApOworCisJdmFsdWUgPSBhZGRyMlswXTsKKwlERUJVR0YoIkZMQVNIIE1BTlVGQUNUOiAleFxuIiwgdmFsdWUpOworCisJc3dpdGNoICh2YWx1ZSkgeworCQljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKSBBTURfTUFOVUZBQ1Q6CisJCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7CisJCQlicmVhazsKKwkJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgRlVKX01BTlVGQUNUOgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fRlVKOworCQkJYnJlYWs7CisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIFNTVF9NQU5VRkFDVDoKKwkJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX1NTVDsKKwkJCWJyZWFrOworCQljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKSBTVE1fTUFOVUZBQ1Q6CisJCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9TVE07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CisJCQlpbmZvLT5zaXplID0gMDsKKwkJCXJldHVybiAoMCk7CS8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJfQorCisJdmFsdWUgPSBhZGRyMlsxXTsJLyogZGV2aWNlIElEICAgICAgICAgICAgKi8KKwlERUJVR0YoIlxuRkxBU0ggREVWSUNFSUQ6ICV4XG4iLCB2YWx1ZSk7CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjA0MEI6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDg7CisJCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwOwkvKiA9PiA1MTIga28gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9GMDQwQjoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMDQwOworCQkJaW5mby0+c2VjdG9yX2NvdW50ID0gODsKKwkJCWluZm8tPnNpemUgPSAweDAwODAwMDA7CS8qID0+IDUxMiBrbyAqLworCQkJYnJlYWs7CisKKwkJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgU1RNX0lEX00yOVcwNDBCOgorCQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0wNDA7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSA4OworCQkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDsJLyogPT4gNTEyIGtvICovCisJCQlicmVhazsKKworCQljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKSBBTURfSURfRjAxNkQ6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTUQwMTY7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzMjsKKwkJCWluZm8tPnNpemUgPSAweDAwMjAwMDAwOworCQkJYnJlYWs7CQkvKiA9PiAyIE1CICAgICAgICAgICAgICAqLworCisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjAzM0M6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTURMVjAzM0M7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSA2NDsKKwkJCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOworCQkJYnJlYWs7CQkvKiA9PiA0IE1CICAgICAgICAgICAgICAqLworCisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjQwMFQ6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTQwMFQ7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMTsKKwkJCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOworCQkJYnJlYWs7CQkvKiA9PiAwLjUgTUIgICAgICAgICAgICAqLworCisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjQwMEI6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTQwMEI7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMTsKKwkJCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOworCQkJYnJlYWs7CQkvKiA9PiAwLjUgTUIgICAgICAgICAgICAqLworCisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjgwMFQ6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMFQ7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKKwkJCWluZm8tPnNpemUgPSAweDAwMTAwMDAwOworCQkJYnJlYWs7CQkvKiA9PiAxIE1CICAgICAgICAgICAgICAqLworCisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjgwMEI6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMEI7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKKwkJCWluZm8tPnNpemUgPSAweDAwMTAwMDAwOworCQkJYnJlYWs7CQkvKiA9PiAxIE1CICAgICAgICAgICAgICAqLworCisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjE2MFQ6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTE2MFQ7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzNTsKKwkJCWluZm8tPnNpemUgPSAweDAwMjAwMDAwOworCQkJYnJlYWs7CQkvKiA9PiAyIE1CICAgICAgICAgICAgICAqLworCisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEFNRF9JRF9MVjE2MEI6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTE2MEI7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzNTsKKwkJCWluZm8tPnNpemUgPSAweDAwMjAwMDAwOworCQkJYnJlYWs7CQkvKiA9PiAyIE1CICAgICAgICAgICAgICAqLworCisJCWRlZmF1bHQ6CisJCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJCQlyZXR1cm4gKDApOwkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCisJfQorCisJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCisJaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX1NTVCkgfHwKKwkJCSgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0wNDApIHx8CisJCQkoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNRDAxNikpIHsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQorCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKKwl9IGVsc2UgeworCQlpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgeworCQkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlICAgICAgICAqLworCQkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKKwkJCWluZm8tPnN0YXJ0WzFdID0gYmFzZSArIDB4MDAwMDQwMDA7CisJCQlpbmZvLT5zdGFydFsyXSA9IGJhc2UgKyAweDAwMDA2MDAwOworCQkJaW5mby0+c3RhcnRbM10gPSBiYXNlICsgMHgwMDAwODAwMDsKKwkJCWZvciAoaSA9IDQ7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQkJCWluZm8tPnN0YXJ0W2ldID0KKwkJCQkJYmFzZSArIChpICogMHgwMDAxMDAwMCkgLSAweDAwMDMwMDAwOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciB0b3AgYm9vdCBibG9jayB0eXBlICAgICAgICAgICAqLworCQkJaSA9IGluZm8tPnNlY3Rvcl9jb3VudCAtIDE7CisJCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA0MDAwOworCQkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNjAwMDsKKwkJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDgwMDA7CisJCQlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKwkJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogMHgwMDAxMDAwMDsKKwkJCX0KKwkJfQorCX0KKworCS8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQkvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLworCQkvKiBEMCA9IDEgaWYgcHJvdGVjdGVkICovCisJCWFkZHIyID0gKHZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbaV0pOworCisJCS8qIEZvciBBTUQyOTAzM0MgZmxhc2ggd2UgbmVlZCB0byByZXNlbmQgdGhlIGNvbW1hbmQgb2YgKgorCQkgKiByZWFkaW5nIGZsYXNoIHByb3RlY3Rpb24gZm9yIHVwcGVyIDggTWIgb2YgZmxhc2ggICAgICovCisJCWlmIChpID09IDMyKSB7CisJCQlhZGRyMltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4QUFBQUFBQUE7CisJCQlhZGRyMltDRkdfRkxBU0hfQUREUjFdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4NTU1NTU1NTU7CisJCQlhZGRyMltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4OTA5MDkwOTA7CisJCX0KKworCQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpCisJCQlpbmZvLT5wcm90ZWN0W2ldID0gMDsKKwkJZWxzZQorCQkJaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyWzJdICYgMTsKKwl9CisKKwkvKiBpc3N1ZSBiYW5rIHJlc2V0IHRvIHJldHVybiB0byByZWFkIG1vZGUgKi8KKwlhZGRyMlswXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwRjAwMEYwOworCisJcmV0dXJuIChpbmZvLT5zaXplKTsKK30KKworc3RhdGljIGludCB3YWl0X2Zvcl9EUTdfMShmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCkKK3sKKwl1bG9uZyBzdGFydCwgbm93LCBsYXN0OworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmFkZHIgPQorCQkoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSAoaW5mby0+c3RhcnRbc2VjdF0pOworCisJc3RhcnQgPSBnZXRfdGltZXIoMCk7CisJbGFzdCA9IHN0YXJ0OworCXdoaWxlICgoYWRkclswXSAmIChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwODAwMDgwKSAhPQorCQkJKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDA4MDAwODApIHsKKwkJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCQlwcmludGYoIlRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qIHNob3cgdGhhdCB3ZSdyZSB3YWl0aW5nICovCisJCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7CS8qIGV2ZXJ5IHNlY29uZCAqLworCQkJcHV0YygnLicpOworCQkJbGFzdCA9IG5vdzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENGR19GTEFTSF8yTkRfMTZCSVRfREVWCitpbnQgZmxhc2hfZXJhc2UoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCit7CisJaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0zMjBCKSB8fAorCQkJKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTTMyMFQpIHx8CisJCQkoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX1NUTVczMjBEVCkgfHwKKwkJCSgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfTVhMVjMyMFQpKSB7CisJCXJldHVybiBmbGFzaF9lcmFzZV8yKGluZm8sIHNfZmlyc3QsIHNfbGFzdCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZsYXNoX2VyYXNlXzEoaW5mbywgc19maXJzdCwgc19sYXN0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZmxhc2hfZXJhc2VfMShmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKKyNlbHNlCitpbnQgZmxhc2hfZXJhc2UoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCisjZW5kaWYKK3sKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikgKGluZm8tPnN0YXJ0WzBdKTsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyMjsKKwlpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OworCWludCBpOworCisJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CisJCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQorCQkJcHJpbnRmKCItIG1pc3NpbmdcbiIpOworCQllbHNlCisJCQlwcmludGYoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZigiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlIC0gYWJvcnRlZFxuIik7CisJCXJldHVybiAxOworCX0KKworCXByb3QgPSAwOworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pCisJCQlwcm90Kys7CisJfQorCisJaWYgKHByb3QpCisJCXByaW50ZigiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhIiwgcHJvdCk7CisKKwlwcmludGYoIlxuIik7CisKKwlsX3NlY3QgPSAtMTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJLyogbm90IHByb3RlY3RlZCAqLworCQkJYWRkcjIgPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSAoaW5mby0+c3RhcnRbc2VjdF0pOworCisJCQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpIHsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDgwMDA4MDsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCQlhZGRyMlswXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwNTAwMDUwOwkvKiBibG9jayBlcmFzZSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKQorCQkJCQl1ZGVsYXkoMTAwMCk7CS8qIHdhaXQgMSBtcyAqLworCQkJfSBlbHNlIHsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDgwMDA4MDsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCQlhZGRyMlswXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwMzAwMDMwOwkvKiBzZWN0b3IgZXJhc2UgKi8KKwkJCX0KKwkJCWxfc2VjdCA9IHNlY3Q7CisJCQkvKgorCQkJICogV2FpdCBmb3IgZWFjaCBzZWN0b3IgdG8gY29tcGxldGUsIGl0J3MgbW9yZQorCQkJICogcmVsaWFibGUuICBBY2NvcmRpbmcgdG8gQU1EIFNwZWMsIHlvdSBtdXN0CisJCQkgKiBpc3N1ZSBhbGwgZXJhc2UgY29tbWFuZHMgd2l0aGluIGEgc3BlY2lmaWVkCisJCQkgKiB0aW1lb3V0LiAgVGhpcyBoYXMgYmVlbiBzZWVuIHRvIGZhaWwsIGVzcGVjaWFsbHkKKwkJCSAqIGlmIHByaW50ZigpcyBhcmUgaW5jbHVkZWQgKGZvciBkZWJ1ZykhIQorCQkJICovCisJCQl3YWl0X2Zvcl9EUTdfMShpbmZvLCBzZWN0KTsKKwkJfQorCX0KKworCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChmbGFnKQorCQllbmFibGVfaW50ZXJydXB0cygpOworCisJLyogd2FpdCBhdCBsZWFzdCA4MHVzIC0gbGV0J3Mgd2FpdCAxIG1zICovCisJdWRlbGF5KDEwMDApOworCisJLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCisJYWRkciA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopIGluZm8tPnN0YXJ0WzBdOworCWFkZHJbMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEYwMDBGMDsJLyogcmVzZXQgYmFuayAqLworCisJcHJpbnRmKCIgZG9uZVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gd3JpdGUgdGltZW91dAorICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKKyAqLworaW50IHdyaXRlX2J1ZmYoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwl1bG9uZyBjcCwgd3AsIGRhdGE7CisJaW50IGksIGwsIHJjOworCisJd3AgPSAoYWRkciAmIH4zKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKKwkgKi8KKwlpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKKwkJZGF0YSA9IDA7CisJCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCBsOyArK2ksICsrY3ApCisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7CisKKwkJZm9yICg7IGkgPCA0ICYmIGNudCA+IDA7ICsraSkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQkJLS1jbnQ7CisJCQkrK2NwOworCQl9CisKKwkJZm9yICg7IGNudCA9PSAwICYmIGkgPCA0OyArK2ksICsrY3ApCisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7CisKKwkJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKQorCQkJcmV0dXJuIChyYyk7CisKKwkJd3AgKz0gNDsKKwl9CisKKwkvKgorCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAorCSAqLworCXdoaWxlIChjbnQgPj0gNCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKworCQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApCisJCQlyZXR1cm4gKHJjKTsKKworCQl3cCArPSA0OworCQljbnQgLT0gNDsKKwl9CisKKwlpZiAoY250ID09IDApCisJCXJldHVybiAoMCk7CisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcworCSAqLworCWRhdGEgPSAwOworCWZvciAoaSA9IDAsIGNwID0gd3A7IGkgPCA0ICYmIGNudCA+IDA7ICsraSwgKytjcCkgeworCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCS0tY250OworCX0KKwlmb3IgKDsgaSA8IDQ7ICsraSwgKytjcCkKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCisJcmV0dXJuICh3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gd3JpdGUgdGltZW91dAorICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKKyAqLworI2lmZGVmIENGR19GTEFTSF8yTkRfMTZCSVRfREVWCitzdGF0aWMgaW50IHdyaXRlX3dvcmQoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKK3sKKwlpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTTMyMEIpIHx8CisJCQkoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNMzIwVCkgfHwKKwkJCSgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfU1RNVzMyMERUKSB8fAorCQkJKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9NWExWMzIwVCkpIHsKKwkJcmV0dXJuIHdyaXRlX3dvcmRfMihpbmZvLCBkZXN0LCBkYXRhKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gd3JpdGVfd29yZF8xKGluZm8sIGRlc3QsIGRhdGEpOworCX0KK30KKworc3RhdGljIGludCB3cml0ZV93b3JkXzEoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKKyNlbHNlCitzdGF0aWMgaW50IHdyaXRlX3dvcmQoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKKyNlbmRpZgoreworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikgKGluZm8tPnN0YXJ0WzBdKTsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICpkZXN0MiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopIGRlc3Q7CisJdm9sYXRpbGUgQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqZGF0YTIgPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSAmIGRhdGE7CisJdWxvbmcgc3RhcnQ7CisJaW50IGksIGZsYWc7CisKKwkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKwlpZiAoKCooKHZ1X2xvbmcgKilkZXN0KSAmIGRhdGEpICE9IGRhdGEpCisJCXJldHVybiAoMik7CisKKwlmb3IgKGkgPSAwOyBpIDwgNCAvIHNpemVvZihDRkdfRkxBU0hfV09SRF9TSVpFKTsgaSsrKSB7CisJCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwQUEwMEFBOworCQlhZGRyMltDRkdfRkxBU0hfQUREUjFdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDA1NTAwNTU7CisJCWFkZHIyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEEwMDBBMDsKKworCQlkZXN0MltpXSA9IGRhdGEyW2ldOworCisJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCQlpZiAoZmxhZykKKwkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkJLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLworCQlzdGFydCA9IGdldF90aW1lcigwKTsKKwkJd2hpbGUgKChkZXN0MltpXSAmIChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwODAwMDgwKSAhPQorCQkJCShkYXRhMltpXSAmIChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwODAwMDgwKSkgeworCisJCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKQorCQkJCXJldHVybiAoMSk7CisJCX0KKwl9CisKKwlyZXR1cm4gKDApOworfQorCisjaWZkZWYgQ0ZHX0ZMQVNIXzJORF8xNkJJVF9ERVYKKworI3VuZGVmICBDRkdfRkxBU0hfV09SRF9TSVpFCisjZGVmaW5lIENGR19GTEFTSF9XT1JEX1NJWkUgdW5zaWduZWQgc2hvcnQKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCisgKi8KK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZV8yKHZ1X2xvbmcgKiBhZGRyLCBmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCXNob3J0IGk7CisJaW50IG47CisJQ0ZHX0ZMQVNIX1dPUkRfU0laRSB2YWx1ZTsKKwl1bG9uZyBiYXNlID0gKHVsb25nKSBhZGRyOworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikgYWRkcjsKKworCURFQlVHRigiRkxBU0ggQUREUjogJTA4eFxuIiwgKHVuc2lnbmVkKWFkZHIpOworCisJLyogaXNzdWUgYmFuayByZXNldCB0byByZXR1cm4gdG8gcmVhZCBtb2RlICovCisJYWRkcjJbMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEYwMDBGMDsKKwkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLworCWFkZHIyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwlhZGRyMltDRkdfRkxBU0hfQUREUjFdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDA1NTAwNTU7CisJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwOTAwMDkwOworCXVkZWxheSgxMDAwKTsKKworCXZhbHVlID0gYWRkcjJbMF07CisJREVCVUdGKCJGTEFTSCBNQU5VRkFDVDogJXhcbiIsIHZhbHVlKTsKKworCXN3aXRjaCAodmFsdWUpIHsKKwkJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgQU1EX01BTlVGQUNUOgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOworCQkJYnJlYWs7CisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIEZVSl9NQU5VRkFDVDoKKwkJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0ZVSjsKKwkJCWJyZWFrOworCQljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKSBTU1RfTUFOVUZBQ1Q6CisJCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9TU1Q7CisJCQlicmVhazsKKwkJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgU1RNX01BTlVGQUNUOgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fU1RNOworCQkJYnJlYWs7CisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpIE1YX01BTlVGQUNUOgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fTVg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CisJCQlpbmZvLT5zaXplID0gMDsKKwkJCXJldHVybiAoMCk7CS8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJfQorCisJdmFsdWUgPSBhZGRyMlsxXTsJLyogZGV2aWNlIElEICAgICAgICAgICAgKi8KKwlERUJVR0YoIlxuRkxBU0ggREVWSUNFSUQ6ICV4XG4iLCB2YWx1ZSk7CisKKwlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0xWMzIwVDoKKwkJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMzIwVDsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOworCQkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7CisJCQlicmVhazsJLyogPT4gNCBNQgkqLworCQljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjMyMEI6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTMyMEI7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKKwkJCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOworCQkJYnJlYWs7CS8qID0+IDQgTUIJKi8KKwkJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSlTVE1fSURfMjlXMzIwRFQ6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9TVE1XMzIwRFQ7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSA2NzsKKwkJCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOworCQkJYnJlYWs7CS8qID0+IDQgTUIJKi8KKwkJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSlNWF9JRF9MVjMyMFQ6CisJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9NWExWMzIwVDsKKwkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOworCQkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7CisJCQlicmVhazsJLyogPT4gNCBNQgkqLworCQlkZWZhdWx0OgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQkJcmV0dXJuICgwKTsJLyogPT4gbm8gb3IgdW5rbm93biBmbGFzaCAqLworCX0KKworCS8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLworCWlmICgoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpIHx8CisJCQkoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNMDQwKSB8fAorCQkJKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTUQwMTYpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKKwkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7CisJfSBlbHNlIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfU1RNVzMyMERUKSB7CisJCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdG9wIGJvb3QgYmxvY2sgdHlwZQkJKi8KKwkJYmFzZSArPSBpbmZvLT5zaXplOworCQlpID0gaW5mby0+c2VjdG9yX2NvdW50OworCQkvKiAgMSB4IDE2ayBib290IHNlY3RvciAqLworCQliYXNlIC09IDE2IDw8IDEwOworCQktLWk7CisJCWluZm8tPnN0YXJ0W2ldID0gYmFzZTsKKwkJLyogIDIgeCA4ayAgYm9vdCBzZWN0b3JzICovCisJCWZvciAobiA9IDA7IG4gPCAyOyArK24pIHsKKwkJCWJhc2UgLT0gOCA8PCAxMDsKKwkJCS0taTsKKwkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZTsKKwkJfQorCQkvKiAgMSB4IDMyayBib290IHNlY3RvciAqLworCQliYXNlIC09IDMyIDw8IDEwOworCQktLWk7CisJCWluZm8tPnN0YXJ0W2ldID0gYmFzZTsKKworCQl3aGlsZSAoaSA+IDApIHsJCQkvKiA2NGsgcmVndWxhciBzZWN0b3JzCSovCisJCQliYXNlIC09IDY0IDw8IDEwOworCQkJLS1pOworCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlOworCQl9CisJfSBlbHNlIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfTVhMVjMyMFQpIHsKKwkJaSA9IGluZm8tPnNlY3Rvcl9jb3VudCAtIDE7CisJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDIwMDA7CisJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDQwMDA7CisJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDYwMDA7CisJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDgwMDA7CisJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMGEwMDA7CisJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMGMwMDA7CisJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMGUwMDA7CisJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMTAwMDA7CisKKwkJZm9yICg7IGkgPj0gMDsgaS0tKQorCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIDB4MDAwMTAwMDA7CisJfSBlbHNlIHsKKwkJaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpIHsKKwkJCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZSAgICAgICAgKi8KKwkJCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CisJCQlpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA0MDAwOworCQkJaW5mby0+c3RhcnRbMl0gPSBiYXNlICsgMHgwMDAwNjAwMDsKKwkJCWluZm8tPnN0YXJ0WzNdID0gYmFzZSArIDB4MDAwMDgwMDA7CisKKwkJCWZvciAoaSA9IDQ7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKKwkJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApIC0gMHgwMDAzMDAwMDsKKwkJfSBlbHNlIHsKKwkJCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdG9wIGJvb3QgYmxvY2sgdHlwZSAgICAgICAgICAgKi8KKwkJCWkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOworCQkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNDAwMDsKKwkJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDYwMDA7CisJCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA4MDAwOworCisJCQlmb3IgKDsgaSA+PSAwOyBpLS0pCisJCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIDB4MDAwMTAwMDA7CisJCX0KKwl9CisKKwkvKiBjaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkJLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIgKi8KKwkJLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLworCQlhZGRyMiA9ICh2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0W2ldKTsKKworCQkvKiBGb3IgQU1EMjkwMzNDIGZsYXNoIHdlIG5lZWQgdG8gcmVzZW5kIHRoZSBjb21tYW5kIG9mICoKKwkJICogcmVhZGluZyBmbGFzaCBwcm90ZWN0aW9uIGZvciB1cHBlciA4IE1iIG9mIGZsYXNoICAgICAqLworCQlpZiAoaSA9PSAzMikgeworCQkJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweEFBQUFBQUFBOworCQkJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIxXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDU1NTU1NTU1OworCQkJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDkwOTA5MDkwOworCQl9CisKKwkJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKQorCQkJaW5mby0+cHJvdGVjdFtpXSA9IDA7CisJCWVsc2UKKwkJCWluZm8tPnByb3RlY3RbaV0gPSBhZGRyMlsyXSAmIDE7CisJfQorCisJLyogaXNzdWUgYmFuayByZXNldCB0byByZXR1cm4gdG8gcmVhZCBtb2RlICovCisJYWRkcjJbMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEYwMDBGMDsKKworCXJldHVybiAoaW5mby0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9mb3JfRFE3XzIoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNlY3QpCit7CisJdWxvbmcgc3RhcnQsIG5vdywgbGFzdDsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyID0KKwkJKENGR19GTEFTSF9XT1JEX1NJWkUgKikgKGluZm8tPnN0YXJ0W3NlY3RdKTsKKworCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCWxhc3QgPSBzdGFydDsKKwl3aGlsZSAoKGFkZHJbMF0gJiAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDgwMDA4MCkgIT0KKwkJCShDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwODAwMDgwKSB7CisJCWlmICgobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJcHJpbnRmKCJUaW1lb3V0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCQlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgewkvKiBldmVyeSBzZWNvbmQgKi8KKwkJCXB1dGMoJy4nKTsKKwkJCWxhc3QgPSBub3c7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxhc2hfZXJhc2VfMihmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikgKGluZm8tPnN0YXJ0WzBdKTsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyMjsKKwlpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OworCWludCBpOworCisJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CisJCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQorCQkJcHJpbnRmKCItIG1pc3NpbmdcbiIpOworCQllbHNlCisJCQlwcmludGYoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZigiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlIC0gYWJvcnRlZFxuIik7CisJCXJldHVybiAxOworCX0KKworCXByb3QgPSAwOworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pCisJCQlwcm90Kys7CisJfQorCisJaWYgKHByb3QpCisJCXByaW50ZigiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhIiwJcHJvdCk7CisKKwlwcmludGYoIlxuIik7CisKKwlsX3NlY3QgPSAtMTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJLyogbm90IHByb3RlY3RlZCAqLworCQkJYWRkcjIgPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSAoaW5mby0+c3RhcnRbc2VjdF0pOworCisJCQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpIHsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDgwMDA4MDsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCQlhZGRyMlswXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwNTAwMDUwOwkvKiBibG9jayBlcmFzZSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKQorCQkJCQl1ZGVsYXkoMTAwMCk7CS8qIHdhaXQgMSBtcyAqLworCQkJfSBlbHNlIHsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDgwMDA4MDsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEFBMDBBQTsKKwkJCQlhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJCQlhZGRyMlswXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwMzAwMDMwOwkvKiBzZWN0b3IgZXJhc2UgKi8KKwkJCX0KKwkJCWxfc2VjdCA9IHNlY3Q7CisJCQkvKgorCQkJICogV2FpdCBmb3IgZWFjaCBzZWN0b3IgdG8gY29tcGxldGUsIGl0J3MgbW9yZQorCQkJICogcmVsaWFibGUuICBBY2NvcmRpbmcgdG8gQU1EIFNwZWMsIHlvdSBtdXN0CisJCQkgKiBpc3N1ZSBhbGwgZXJhc2UgY29tbWFuZHMgd2l0aGluIGEgc3BlY2lmaWVkCisJCQkgKiB0aW1lb3V0LiAgVGhpcyBoYXMgYmVlbiBzZWVuIHRvIGZhaWwsIGVzcGVjaWFsbHkKKwkJCSAqIGlmIHByaW50ZigpcyBhcmUgaW5jbHVkZWQgKGZvciBkZWJ1ZykhIQorCQkJICovCisJCQl3YWl0X2Zvcl9EUTdfMihpbmZvLCBzZWN0KTsKKwkJfQorCX0KKworCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChmbGFnKQorCQllbmFibGVfaW50ZXJydXB0cygpOworCisJLyogd2FpdCBhdCBsZWFzdCA4MHVzIC0gbGV0J3Mgd2FpdCAxIG1zICovCisJdWRlbGF5KDEwMDApOworCisJLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCisJYWRkciA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopIGluZm8tPnN0YXJ0WzBdOworCWFkZHJbMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMEYwMDBGMDsJLyogcmVzZXQgYmFuayAqLworCisJcHJpbnRmKCIgZG9uZVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfd29yZF8yKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCit7CisJdm9sYXRpbGUgQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqYWRkcjIgPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSAoaW5mby0+c3RhcnRbMF0pOworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmRlc3QyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikgZGVzdDsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICpkYXRhMiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopICYgZGF0YTsKKwl1bG9uZyBzdGFydDsKKwlpbnQgaTsKKworCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLworCWlmICgoKigodnVfbG9uZyAqKWRlc3QpICYgZGF0YSkgIT0gZGF0YSkKKwkJcmV0dXJuICgyKTsKKworCWZvciAoaSA9IDA7IGkgPCA0IC8gc2l6ZW9mKENGR19GTEFTSF9XT1JEX1NJWkUpOyBpKyspIHsKKwkJaW50IGZsYWc7CisKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKworCQlhZGRyMltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDBBQTAwQUE7CisJCWFkZHIyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkgMHgwMDU1MDA1NTsKKwkJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKSAweDAwQTAwMEEwOworCisJCWRlc3QyW2ldID0gZGF0YTJbaV07CisKKwkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChmbGFnKQorCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCQkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCisJCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCQl3aGlsZSAoKGRlc3QyW2ldICYgKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDA4MDAwODApICE9CisJCQkJKGRhdGEyW2ldICYgKENGR19GTEFTSF9XT1JEX1NJWkUpIDB4MDA4MDAwODApKSB7CisKKwkJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpCisJCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKworCXJldHVybiAoMCk7Cit9CisjZW5kaWYgLyogQ0ZHX0ZMQVNIXzJORF8xNkJJVF9ERVYgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVuY3Rpb25zCisgKi8KK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSh2dV9sb25nICogYWRkciwgZmxhc2hfaW5mb190ICogaW5mbyk7CitzdGF0aWMgaW50IHdyaXRlX3dvcmQoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRvdGFsX2IgPSAwOworCXVuc2lnbmVkIGxvbmcgc2l6ZV9iW0NGR19NQVhfRkxBU0hfQkFOS1NdOworCXVuc2lnbmVkIHNob3J0IGluZGV4ID0gMDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIGViY19ib290X3NpemU7CisJdW5zaWduZWQgbG9uZyBib290X3NlbGVjdGlvbjsKKworCW1mc2RyKHNkcl9wc3RycDAsIHZhbCk7CisJaW5kZXggPSAodmFsICYgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX01BU0spID4+IDI4OworCisJaWYgKChpbmRleCA9PSAweGMpIHx8IChpbmRleCA9PSA4KSkgeworCQkvKgorCQkgKiBCb290IFNldHRpbmdzIGluIElJQyBFRXByb20gYWRkcmVzcyAweEE4IG9yIDB4QTAKKwkJICogUmVhZCBTZXJpYWwgRGV2aWNlIFN0cmFwIFJlZ2lzdGVyMSBpbiBQUEM0NDBTUGUKKwkJICovCisJCW1mc2RyKHNkcl9zZHN0cDEsIHZhbCk7CisJCWJvb3Rfc2VsZWN0aW9uICA9IHZhbCAmIFNEUjBfU0RTVFAxX0JPT1RfU0VMX01BU0s7CisJCWViY19ib290X3NpemUgICA9IHZhbCAmIFNEUjBfU0RTVFAxX0VCQ19ST01fQlNfTUFTSzsKKworCQlzd2l0Y2goYm9vdF9zZWxlY3Rpb24pIHsKKwkJCWNhc2UgU0RSMF9TRFNUUDFfQk9PVF9TRUxfRUJDOgorCQkJCXN3aXRjaChlYmNfYm9vdF9zaXplKSB7CisJCQkJCWNhc2UgU0RSMF9TRFNUUDFfRUJDX1JPTV9CU18xNkJJVDoKKwkJCQkJCWluZGV4ID0gMzsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFNEUjBfU0RTVFAxX0VCQ19ST01fQlNfOEJJVDoKKwkJCQkJCWluZGV4ID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBTRFIwX1NEU1RQMV9CT09UX1NFTF9QQ0k6CisJCQkJaW5kZXggPSAxOworCQkJCWJyZWFrOworCisJCX0KKwl9IC8qZWxzZSBpZiAoaW5kZXggPT0gMCkgeyovCisvKgkJaWYgKGluOChGUEdBX1NFVFRJTkdfUkVHKSAmIEZQR0FfU0VUX1JFR19PUF9DT0RFX0ZMQVNIX0FCT1ZFKSovCisvKgkJCWluZGV4ID0gODsqLyAvKiBzcmFtIGJlbG93IG9wIGNvZGUgZmxhc2ggLT4gbmV3IGluZGV4IDgqLworLyoJfSovCisKKwlERUJVR0YoIlxuIik7CisJREVCVUdGKCJGTEFTSDogSW5kZXg6ICVkXG4iLCBpbmRleCk7CisKKwkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCisJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkgeworCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQgPSAtMTsKKwkJZmxhc2hfaW5mb1tpXS5zaXplID0gMDsKKworCQkvKiBjaGVjayB3aGV0aGVyIHRoZSBhZGRyZXNzIGlzIDAgKi8KKwkJaWYgKGZsYXNoX2FkZHJfdGFibGVbaW5kZXhdW2ldID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBjYWxsIGZsYXNoX2dldF9zaXplKCkgdG8gaW5pdGlhbGl6ZSBzZWN0b3IgYWRkcmVzcyAqLworCQlzaXplX2JbaV0gPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKSBmbGFzaF9hZGRyX3RhYmxlW2luZGV4XVtpXSwKKwkJCQkmZmxhc2hfaW5mb1tpXSk7CisKKwkJZmxhc2hfaW5mb1tpXS5zaXplID0gc2l6ZV9iW2ldOworCisJCWlmIChmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJCXByaW50ZigiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rICVkIC0gU2l6ZSA9IDB4JTA4bHggPSAlbGQgTUJcbiIsCisJCQkJCWksIHNpemVfYltpXSwgc2l6ZV9iW2ldIDw8IDIwKTsKKwkJCWZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50ID0gLTE7CisJCQlmbGFzaF9pbmZvW2ldLnNpemUgPSAwOworCQl9CisKKwkJLyogTW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwkJKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULCBDRkdfTU9OSVRPUl9CQVNFLAorCQkJCSAgICBDRkdfTU9OSVRPUl9CQVNFICsgQ0ZHX01PTklUT1JfTEVOIC0gMSwKKwkJCQkgICAgJmZsYXNoX2luZm9baV0pOworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKwkJKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULCBDRkdfRU5WX0FERFIsCisJCQkJICAgIENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFIC0gMSwKKwkJCQkgICAgJmZsYXNoX2luZm9baV0pOworI2lmIGRlZmluZWQoQ0ZHX0VOVl9BRERSX1JFRFVORCkKKwkJKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULCBDRkdfRU5WX0FERFJfUkVEVU5ELAorCQkJCSAgICBDRkdfRU5WX0FERFJfUkVEVU5EICsgQ0ZHX0VOVl9TRUNUX1NJWkUgLSAxLAorCQkJCSAgICAmZmxhc2hfaW5mb1tpXSk7CisjZW5kaWYKKyNlbmRpZgorCQl0b3RhbF9iICs9IGZsYXNoX2luZm9baV0uc2l6ZTsKKwl9CisKKwlyZXR1cm4gdG90YWxfYjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MveXVjY2EvaW5pdC5TIGIvYm9hcmQvYW1jYy95dWNjYS9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllY2E2OAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FtY2MveXVjY2EvaW5pdC5TCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMiBTY290dCBNY051dHQgPHNtY251dHRAYXJ0ZXN5bmNwLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworLyogcG9ydCB0byBBTUNDIDQ0MFNQRSBldmFsdWF0aW9vbiBib2FyZCAtIFNHIEFwcmlsIDEyLDIwMDUgICovCisKKyNpbmNsdWRlIDxwcGNfYXNtLnRtcGw+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qIEdlbmVyYWwgKi8KKyNkZWZpbmUgVExCX1ZBTElEICAgMHgwMDAwMDIwMAorCisvKiBTdXBwb3J0ZWQgcGFnZSBzaXplcyAqLworCisjZGVmaW5lIFNaXzFLCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1pfNEsJMHgwMDAwMDAxMAorI2RlZmluZSBTWl8xNksJMHgwMDAwMDAyMAorI2RlZmluZSBTWl82NEsJMHgwMDAwMDAzMAorI2RlZmluZSBTWl8yNTZLCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1pfMU0JMHgwMDAwMDA1MAorI2RlZmluZSBTWl8xNk0JMHgwMDAwMDA3MAorI2RlZmluZSBTWl8yNTZNCTB4MDAwMDAwOTAKKworLyogU3RvcmFnZSBhdHRyaWJ1dGVzICovCisjZGVmaW5lIFNBX1cJMHgwMDAwMDgwMAkvKiBXcml0ZS10aHJvdWdoICovCisjZGVmaW5lIFNBX0kJMHgwMDAwMDQwMAkvKiBDYWNoaW5nIGluaGliaXRlZCAqLworI2RlZmluZSBTQV9NCTB4MDAwMDAyMDAJLyogTWVtb3J5IGNvaGVyZW5jZSAqLworI2RlZmluZSBTQV9HCTB4MDAwMDAxMDAJLyogR3VhcmRlZCAqLworI2RlZmluZSBTQV9FCTB4MDAwMDAwODAJLyogRW5kaWFuICovCisKKy8qIEFjY2VzcyBjb250cm9sICovCisjZGVmaW5lIEFDX1gJMHgwMDAwMDAyNAkvKiBFeGVjdXRlICovCisjZGVmaW5lIEFDX1cJMHgwMDAwMDAxMgkvKiBXcml0ZSAqLworI2RlZmluZSBBQ19SCTB4MDAwMDAwMDkJLyogUmVhZCAqLworCisvKiBTb21lIGhhbmR5IG1hY3JvcyAqLworCisjZGVmaW5lIEVQTihlKQkJKChlKSAmIDB4ZmZmZmZjMDApCisjZGVmaW5lIFRMQjAoZXBuLHN6KQkoKEVQTigoZXBuKSkgfCAoc3opIHwgVExCX1ZBTElEICkpCisjZGVmaW5lIFRMQjEocnBuLGVycG4pCSgoKHJwbikgJiAweGZmZmZmYzAwKSB8IChlcnBuKSkKKyNkZWZpbmUgVExCMihhKQkJKChhKSAmIDB4MDAwMDBmYmYpCisKKyNkZWZpbmUgdGxidGFiX3N0YXJ0XAorCW1mbHIJcjEJO1wKKwlibAkwZgk7CisKKyNkZWZpbmUgdGxidGFiX2VuZFwKKwkubG9uZyAwLCAwLCAwCTtcCiswOgltZmxyCXIwCTtcCisJbXRscglyMQk7XAorCWJscgkJOworCisjZGVmaW5lIHRsYmVudHJ5KGVwbixzeixycG4sZXJwbixhdHRyKVwKKwkubG9uZyBUTEIwKGVwbixzeiksVExCMShycG4sZXJwbiksVExCMihhdHRyKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRMQiBUQUJMRQorICoKKyAqIFRoaXMgdGFibGUgaXMgdXNlZCBieSB0aGUgY3B1IGJvb3QgY29kZSB0byBzZXR1cCB0aGUgaW5pdGlhbCB0bGIKKyAqIGVudHJpZXMuIFJhdGhlciB0aGFuIG1ha2UgYnJvYWQgYXNzdW1wdGlvbnMgaW4gdGhlIGNwdSBzb3VyY2UgdHJlZSwKKyAqIHRoaXMgdGFibGUgbGV0cyBlYWNoIGJvYXJkIHNldCB0aGluZ3MgdXAgaG93ZXZlciB0aGV5IGxpa2UuCisgKgorICogIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGlzIHJldHVybmVkIGluIHIxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkuc2VjdGlvbiAuYm9vdHBnLCJheCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUTEIgdGFibGUgZm9yIHJldkEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS5nbG9ibCB0bGJ0YWJBCit0bGJ0YWJBOgorCXRsYnRhYl9zdGFydAorCXRsYmVudHJ5KDB4ZmZmMDAwMDAsIFNaXzE2TSwgMHhmZmYwMDAwMCwgNCwgQUNfUnxBQ19XfEFDX1h8U0FfRykKKworCXRsYmVudHJ5KENGR19TRFJBTV9CQVNFLCBTWl8yNTZNLCAweDAwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1NEUkFNX0JBU0UgKyAweDEwMDAwMDAwLCBTWl8yNTZNLCAweDEwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1NEUkFNX0JBU0UgKyAweDIwMDAwMDAwLCBTWl8yNTZNLCAweDIwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1NEUkFNX0JBU0UgKyAweDMwMDAwMDAwLCBTWl8yNTZNLCAweDMwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisKKwl0bGJlbnRyeShDRkdfSVNSQU1fQkFTRSwgU1pfMjU2SywgMHgwMDAwMDAwMCwgNCwgQUNfUnxBQ19XfEFDX1h8U0FfSSkKKwl0bGJlbnRyeShDRkdfRlBHQV9CQVNFLCBTWl8xSywgMHhFMjAwMDAwMCwgNCxBQ19SfEFDX1d8U0FfSSkKKworCXRsYmVudHJ5KENGR19PUEVSX0ZMQVNILCBTWl8xNk0sIDB4RTcwMDAwMDAsIDQsQUNfUnxBQ19XfEFDX1h8U0FfR3xTQV9JKQorCXRsYmVudHJ5KENGR19QRVJJUEhFUkFMX0JBU0UsIFNaXzRLLCAweEYwMDAwMDAwLCA0LCBBQ19SfEFDX1d8U0FfR3xTQV9JKQorCisJdGxiZW50cnkoQ0ZHX1BDSV9CQVNFLCBTWl8yNTZNLCAweDAwMDAwMDAwLCAweEMsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSV9NRU1CQVNFLCBTWl8yNTZNLCAweDEwMDAwMDAwLCAweEMsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSUVfTUVNQkFTRSwgU1pfMjU2TSwgMHhCMDAwMDAwMCwgMHhELCBBQ19SfEFDX1d8U0FfR3xTQV9JKQorCXRsYmVudHJ5KENGR19QQ0lFX0JBU0UsIFNaXzE2SywgMHgyMDAwMDAwMCwgMHhDLCBBQ19SfEFDX1d8U0FfR3xTQV9JKQorCisJdGxiZW50cnkoQ0ZHX1BDSUUwX0NGR0JBU0UsIFNaXzFLLCAweDQwMDAwMDAwLCAweEMsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSUUxX0NGR0JBU0UsIFNaXzFLLCAweDgwMDAwMDAwLCAweEMsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSUUyX0NGR0JBU0UsIFNaXzFLLCAweEMwMDAwMDAwLCAweEMsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSUUwX1hDRkdCQVNFLCBTWl8xSywgMHg1MDAwMDAwMCwgMHhDLCBBQ19SfEFDX1d8U0FfR3xTQV9JKQorCXRsYmVudHJ5KENGR19QQ0lFMV9YQ0ZHQkFTRSwgU1pfMUssIDB4OTAwMDAwMDAsIDB4QywgQUNfUnxBQ19XfFNBX0d8U0FfSSkKKwl0bGJlbnRyeShDRkdfUENJRTJfWENGR0JBU0UsIFNaXzFLLCAweEQwMDAwMDAwLCAweEMsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxidGFiX2VuZAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRMQiB0YWJsZSBmb3IgcmV2QgorICoKKyAqIE5vdGljZTogcmV2QiBvZiB0aGUgNDQwU1BlIGNoaXAgaXMgdmVyeSBzdHJpY3QgYWJvdXQgUExCIHJlYWwgYWRkcmVzc2VzCisgKiBhbmQgcmFuZ2VzIHRvIGJlIG1hcHBlZCBmb3IgY29uZmlnIHNwYWNlOiBpdCBzZWVtcyB0byBvbmx5IHdvcmsgd2l0aAorICogZF9ubm5uX25ubm4gcmFuZ2UgKGhhbmdzIHRoZSBjb3JlIHVwb24gY29uZmlnIHRyYW5zYWN0aW9uIGF0dGVtcHRzIHdoZW4KKyAqIHNldCBvdGhlcndpc2UpIHdoaWxlIHJldkEgdXNlcyBjX25ubm5fbm5ubi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS5nbG9ibCB0bGJ0YWJCCit0bGJ0YWJCOgorCXRsYnRhYl9zdGFydAorCXRsYmVudHJ5KDB4ZmZmMDAwMDAsIFNaXzE2TSwgMHhmZmYwMDAwMCwgNCwgQUNfUnxBQ19XfEFDX1h8U0FfRykKKworCXRsYmVudHJ5KENGR19TRFJBTV9CQVNFLCBTWl8yNTZNLCAweDAwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1NEUkFNX0JBU0UgKyAweDEwMDAwMDAwLCBTWl8yNTZNLCAweDEwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1NEUkFNX0JBU0UgKyAweDIwMDAwMDAwLCBTWl8yNTZNLCAweDIwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1NEUkFNX0JBU0UgKyAweDMwMDAwMDAwLCBTWl8yNTZNLCAweDMwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kpCisKKwl0bGJlbnRyeShDRkdfSVNSQU1fQkFTRSwgU1pfMjU2SywgMHgwMDAwMDAwMCwgNCwgQUNfUnxBQ19XfEFDX1h8U0FfSSkKKwl0bGJlbnRyeShDRkdfRlBHQV9CQVNFLCBTWl8xSywgMHhFMjAwMDAwMCwgNCxBQ19SfEFDX1d8U0FfSSkKKworCXRsYmVudHJ5KENGR19PUEVSX0ZMQVNILCBTWl8xNk0sIDB4RTcwMDAwMDAsIDQsQUNfUnxBQ19XfEFDX1h8U0FfR3xTQV9JKQorCXRsYmVudHJ5KENGR19QRVJJUEhFUkFMX0JBU0UsIFNaXzRLLCAweEYwMDAwMDAwLCA0LCBBQ19SfEFDX1d8U0FfR3xTQV9JKQorCisJdGxiZW50cnkoQ0ZHX1BDSV9CQVNFLCBTWl8yNTZNLCAweDAwMDAwMDAwLCAweEMsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSV9NRU1CQVNFLCBTWl8yNTZNLCAweDEwMDAwMDAwLCAweEMsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSUVfTUVNQkFTRSwgU1pfMjU2TSwgMHhCMDAwMDAwMCwgMHhELCBBQ19SfEFDX1d8U0FfR3xTQV9JKQorCisJdGxiZW50cnkoQ0ZHX1BDSUUwX0NGR0JBU0UsIFNaXzFLLCAweDAwMTAwMDAwLCAweEQsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSUUxX0NGR0JBU0UsIFNaXzFLLCAweDIwMTAwMDAwLCAweEQsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSUUyX0NGR0JBU0UsIFNaXzFLLCAweDQwMTAwMDAwLCAweEQsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxiZW50cnkoQ0ZHX1BDSUUwX1hDRkdCQVNFLCBTWl8xSywgMHgxMDAwMDAwMCwgMHhELCBBQ19SfEFDX1d8U0FfR3xTQV9JKQorCXRsYmVudHJ5KENGR19QQ0lFMV9YQ0ZHQkFTRSwgU1pfMUssIDB4MzAwMDAwMDAsIDB4RCwgQUNfUnxBQ19XfFNBX0d8U0FfSSkKKwl0bGJlbnRyeShDRkdfUENJRTJfWENGR0JBU0UsIFNaXzFLLCAweDUwMDAwMDAwLCAweEQsIEFDX1J8QUNfV3xTQV9HfFNBX0kpCisJdGxidGFiX2VuZApkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95dWNjYS91LWJvb3QubGRzIGIvYm9hcmQvYW1jYy95dWNjYS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjRmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hbWNjL3l1Y2NhL3UtYm9vdC5sZHMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0FSQ0gocG93ZXJwYykKK1NFQVJDSF9ESVIoL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL3Bvd2VycGMtYW55LWVsZi9saWIpOworLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KKyAgIF9fRFlOQU1JQyA9IDA7ICAgICovCitTRUNUSU9OUworeworICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6CisgIHsKKyAgICAqKC5yZXNldHZlYykKKyAgfSA9IDB4ZmZmZgorCisgIC5ib290cGcgMHhGRkZGRjAwMCA6CisgIHsKKyAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC5ib290cGcpCisgIH0gPSAweGZmZmYKKworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9ICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLworICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLworCisgICAgY3B1L3BwYzR4eC9zdGFydC5vCQkoLnRleHQpCisgICAgYm9hcmQvYW1jYy95dWNjYS9pbml0Lm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgva2dkYi5vCQkoLnRleHQpCisgICAgY3B1L3BwYzR4eC90cmFwcy5vCQkoLnRleHQpCisgICAgY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgvc2VyaWFsLm8JCSgudGV4dCkKKyAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgvc3BlZWQubwkJKC50ZXh0KQorICAgIGNvbW1vbi9kbG1hbGxvYy5vCQkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvY3JjMzIubwkJKC50ZXh0KQorICAgIGxpYl9wcGMvZXh0YWJsZS5vCQkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCisKKy8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCisvKiAgICBjb21tb24vZW52aXJvbm1lbnQubygudGV4dCkqLworCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICB9CisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgOgorICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgICAqKC5laF9mcmFtZSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCisgIC4gPSAuOworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfYmVnaW4gPSAuOworICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KKyAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9CisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfZW5kID0gLjsKKworICBfX2Jzc19zdGFydCA9IC47CisgIC5ic3MgICAgICAgOgorICB7CisgICAqKC5zYnNzKSAqKC5zY29tbW9uKQorICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgIH0KKyAgX2VuZCA9IC4gOworICBQUk9WSURFIChlbmQgPSAuKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MveXVjY2EvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2FtY2MveXVjY2EvdS1ib290Lmxkcy5kZWJ1ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzRmOTIyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYW1jYy95dWNjYS91LWJvb3QubGRzLmRlYnVnCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyLTIwMDQKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0FSQ0gocG93ZXJwYykKK1NFQVJDSF9ESVIoL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL3Bvd2VycGMtYW55LWVsZi9saWIpOworLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KKyAgIF9fRFlOQU1JQyA9IDA7ICAgICovCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9ICsgU0laRU9GX0hFQURFUlM7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLworICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLworCisgICAgY3B1L3BwYzR4eC9zdGFydC5vCQkoLnRleHQpCisgICAgYm9hcmQvYW1jYy95dWNjYS9pbml0Lm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgva2dkYi5vCQkoLnRleHQpCisgICAgY3B1L3BwYzR4eC90cmFwcy5vCQkoLnRleHQpCisgICAgY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgvc2VyaWFsLm8JCSgudGV4dCkKKyAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgvc3BlZWQubwkJKC50ZXh0KQorICAgIGNvbW1vbi9kbG1hbGxvYy5vCQkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvY3JjMzIubwkJKC50ZXh0KQorICAgIGxpYl9wcGMvZXh0YWJsZS5vCQkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCisKKy8qICAgIGNvbW1vbi9lbnZpcm9ubWVudC5vKC50ZXh0KSAqLworCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICB9CisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgOgorICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgICAqKC5laF9mcmFtZSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDBGRkYpICYgMHhGRkZGRjAwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCisgIC4gPSAuOworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfYmVnaW4gPSAuOworICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KKyAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9CisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfZW5kID0gLjsKKworICBfX2Jzc19zdGFydCA9IC47CisgIC5ic3MgICAgICAgOgorICB7CisgICAqKC5zYnNzKSAqKC5zY29tbW9uKQorICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgIH0KKyAgX2VuZCA9IC4gOworICBQUk9WSURFIChlbmQgPSAuKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MveXVjY2EveXVjY2EuYyBiL2JvYXJkL2FtY2MveXVjY2EveXVjY2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDE3NTI2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYW1jYy95dWNjYS95dWNjYS5jCkBAIC0wLDAgKzEsMTMxMSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBQb3J0IHRvIEFNQ0MtNDQwU1BFIEV2YWx1YXRpb24gQm9hcmQgU09QIC0gQXByaWwgMjAwNQorICoKKyAqIFBDSWUgc3VwcG9ydGluZyByb3V0aW5lcyBkZXJpdmVkIGZyb20gTGludXggNDQwU1BlIFBDSWUgZHJpdmVyLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwcGM0eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8aTJjLmg+CisjaW5jbHVkZSA8YXNtLXBwYy9pby5oPgorCisjaW5jbHVkZSAieXVjY2EuaCIKKyNpbmNsdWRlICIuLi9jcHUvcHBjNHh4LzQ0MHNwZV9wY2llLmgiCisKKyN1bmRlZiBQQ0lFX0VORFBPSU5UCisvKiAjZGVmaW5lIFBDSUVfRU5EUE9JTlQgMSAqLworCit2b2lkIGZwZ2FfaW5pdCAodm9pZCk7CisKK3ZvaWQgZ2V0X3N5c19pbmZvKFBQQzQ0MF9TWVNfSU5GTyAqYm9hcmRfY2ZnICk7CitpbnQgY29tcGFyZV90b190cnVlKGNoYXIgKnN0ciApOworY2hhciAqcmVtb3ZlX2xfd19zcGFjZShjaGFyICppbl9zdHIgKTsKK2NoYXIgKnJlbW92ZV90X3dfc3BhY2UoY2hhciAqaW5fc3RyICk7CitpbnQgZ2V0X2NvbnNvbGVfcG9ydCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgcHBjTWZjcHIodW5zaWduZWQgbG9uZyBjcHJfcmVnKTsKK3Vuc2lnbmVkIGxvbmcgcHBjTWZzZHIodW5zaWduZWQgbG9uZyBzZHJfcmVnKTsKKworaW50IHBwYzQ0MHNwZV9pbml0X3BjaWVfcm9vdHBvcnQoaW50IHBvcnQpOwordm9pZCBwcGM0NDBzcGVfc2V0dXBfcGNpZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBwb3J0KTsKKworI2RlZmluZSBERUJVR19FTlYKKyNpZmRlZiBERUJVR19FTlYKKyNkZWZpbmUgREVCVUdGKGZtdCxhcmdzLi4uKSBwcmludGYoZm10ICwjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVR0YoZm10LGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBGQUxTRQkwCisjZGVmaW5lIFRSVUUJMQorCitpbnQgYm9hcmRfZWFybHlfaW5pdF9mICh2b2lkKQoreworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBEZWZpbmUgQm9vdCBkZXZpY2VzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJPT1RfRlJPTV9TTUFMTF9GTEFTSAkJMHgwMAorI2RlZmluZSBCT09UX0ZST01fTEFSR0VfRkxBU0hfT1JfU1JBTQkweDAxCisjZGVmaW5lIEJPT1RfRlJPTV9QQ0kJCQkweDAyCisjZGVmaW5lIEJPT1RfREVWSUNFX1VOS05PV04JCTB4MDMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBFQkMgRGV2aWNlcyBDaGFyYWN0ZXJpc3RpY3MKK3wgICBQZXJpcGhlcmFsIEJhbmsgQWNjZXNzIFBhcmFtZXRlcnMgICAgICAgLSAgIEVCQ19CeEFQCit8ICAgUGVyaXBoZXJhbCBCYW5rIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIC0gICBFQkNfQnhDUgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogU21hbGwgRmxhc2ggYW5kIEZSQU0KKyAqIEJVIFZhbHVlCisgKiBCeEFQIDogMHgwMzgwMDAwMCAgLSAwIDAwMDAwMTExIDAgMDAgMDAgMDAgMDAgMDAgMDAwIDAgMCAwIDAgMDAwMDAKKyAqIEIwQ1IgOiAweGZmMDk4MDAwICAtIEJBUyA9IGZmMCAtIDEwMCAxMSAwMCAwMDAwMDAwMDAwMDAwCisgKiBCMkNSIDogMHhlNzA5ODAwMCAgLSBCQVMgPSBlNzAgLSAxMDAgMTEgMDAgMDAwMDAwMDAwMDAwMAorICovCisjZGVmaW5lIEVCQ19CWEFQX1NNQUxMX0ZMQVNICQlFQkNfQlhBUF9CTUVfRElTQUJMRUQJfCBcCisJCQkJCUVCQ19CWEFQX1RXVF9FTkNPREUoNykJfCBcCisJCQkJCUVCQ19CWEFQX0JDRV9ESVNBQkxFCXwgXAorCQkJCQlFQkNfQlhBUF9CQ1RfMlRSQU5TCXwgXAorCQkJCQlFQkNfQlhBUF9DU05fRU5DT0RFKDApCXwgXAorCQkJCQlFQkNfQlhBUF9PRU5fRU5DT0RFKDApCXwgXAorCQkJCQlFQkNfQlhBUF9XQk5fRU5DT0RFKDApCXwgXAorCQkJCQlFQkNfQlhBUF9XQkZfRU5DT0RFKDApCXwgXAorCQkJCQlFQkNfQlhBUF9USF9FTkNPREUoMCkJfCBcCisJCQkJCUVCQ19CWEFQX1JFX0RJU0FCTEVECXwgXAorCQkJCQlFQkNfQlhBUF9TT1JfREVMQVlFRAl8IFwKKwkJCQkJRUJDX0JYQVBfQkVNX1dSSVRFT05MWQl8IFwKKwkJCQkJRUJDX0JYQVBfUEVOX0RJU0FCTEVECisKKyNkZWZpbmUgRUJDX0JYQ1JfU01BTExfRkxBU0hfQ1MwCUVCQ19CWENSX0JBU19FTkNPREUoMHhGRjAwMDAwMCkJfCBcCisJCQkJCUVCQ19CWENSX0JTXzE2TUIJCXwgXAorCQkJCQlFQkNfQlhDUl9CVV9SVwkJCXwgXAorCQkJCQlFQkNfQlhDUl9CV184QklUCisKKyNkZWZpbmUgRUJDX0JYQ1JfU01BTExfRkxBU0hfQ1MyCUVCQ19CWENSX0JBU19FTkNPREUoMHhlNzAwMDAwMCkJfCBcCisJCQkJCUVCQ19CWENSX0JTXzE2TUIJCXwgXAorCQkJCQlFQkNfQlhDUl9CVV9SVwkJCXwgXAorCQkJCQlFQkNfQlhDUl9CV184QklUCisKKy8qCisgKiBMYXJnZSBGbGFzaCBhbmQgU1JBTQorICogQlUgVmFsdWUKKyAqIEJ4QVAgOiAweDA0OGZmMjQwICAtIDAgMDAwMDAxMTEgMCAwMCAwMCAwMCAwMCAwMCAwMDAgMCAwIDAgMCAwMDAwMAorICogQjBDUiA6IDB4ZmYwOWEwMDAgIC0gQkFTID0gZmYwIC0gMTAwIDExIDAxIDAwMDAwMDAwMDAwMDAKKyAqIEIyQ1IgOiAweGU3MDlhMDAwICAtIEJBUyA9IGU3MCAtIDEwMCAxMSAwMSAwMDAwMDAwMDAwMDAwCisqLworI2RlZmluZSBFQkNfQlhBUF9MQVJHRV9GTEFTSAkJRUJDX0JYQVBfQk1FX0RJU0FCTEVECXwgXAorCQkJCQlFQkNfQlhBUF9UV1RfRU5DT0RFKDcpCXwgXAorCQkJCQlFQkNfQlhBUF9CQ0VfRElTQUJMRQl8IFwKKwkJCQkJRUJDX0JYQVBfQkNUXzJUUkFOUwl8IFwKKwkJCQkJRUJDX0JYQVBfQ1NOX0VOQ09ERSgwKQl8IFwKKwkJCQkJRUJDX0JYQVBfT0VOX0VOQ09ERSgwKQl8IFwKKwkJCQkJRUJDX0JYQVBfV0JOX0VOQ09ERSgwKQl8IFwKKwkJCQkJRUJDX0JYQVBfV0JGX0VOQ09ERSgwKQl8IFwKKwkJCQkJRUJDX0JYQVBfVEhfRU5DT0RFKDApCXwgXAorCQkJCQlFQkNfQlhBUF9SRV9ESVNBQkxFRAl8IFwKKwkJCQkJRUJDX0JYQVBfU09SX0RFTEFZRUQJfCBcCisJCQkJCUVCQ19CWEFQX0JFTV9XUklURU9OTFkJfCBcCisJCQkJCUVCQ19CWEFQX1BFTl9ESVNBQkxFRAorCisjZGVmaW5lIEVCQ19CWENSX0xBUkdFX0ZMQVNIX0NTMAlFQkNfQlhDUl9CQVNfRU5DT0RFKDB4RkYwMDAwMDApCXwgXAorCQkJCQlFQkNfQlhDUl9CU18xNk1CCQl8IFwKKwkJCQkJRUJDX0JYQ1JfQlVfUlcJCQl8IFwKKwkJCQkJRUJDX0JYQ1JfQldfMTZCSVQKKworI2RlZmluZSBFQkNfQlhDUl9MQVJHRV9GTEFTSF9DUzIJRUJDX0JYQ1JfQkFTX0VOQ09ERSgweEU3MDAwMDAwKQl8IFwKKwkJCQkJRUJDX0JYQ1JfQlNfMTZNQgkJfCBcCisJCQkJCUVCQ19CWENSX0JVX1JXCQkJfCBcCisJCQkJCUVCQ19CWENSX0JXXzE2QklUCisKKy8qCisgKiBGUEdBCisgKiBCVSB2YWx1ZSA6CisgKiBCMUFQID0gMHgwNTg5NTI0MCAgLSAwIDAwMDAxMDExIDAgMDAgMTAgMDEgMDEgMDEgMDAxIDAgMCAxIDAgMDAwMDAKKyAqIEIxQ1IgPSAweGUyMDFhMDAwICAtIEJBUyA9IGUyMCAtIDAwMCAxMSAwMSAwMDAwMDAwMDAwMDAwMAorICovCisjZGVmaW5lIEVCQ19CWEFQX0ZQR0EJCQlFQkNfQlhBUF9CTUVfRElTQUJMRUQJfCBcCisJCQkJCUVCQ19CWEFQX1RXVF9FTkNPREUoMTEpCXwgXAorCQkJCQlFQkNfQlhBUF9CQ0VfRElTQUJMRQl8IFwKKwkJCQkJRUJDX0JYQVBfQkNUXzJUUkFOUwl8IFwKKwkJCQkJRUJDX0JYQVBfQ1NOX0VOQ09ERSgxMCkJfCBcCisJCQkJCUVCQ19CWEFQX09FTl9FTkNPREUoMSkJfCBcCisJCQkJCUVCQ19CWEFQX1dCTl9FTkNPREUoMSkJfCBcCisJCQkJCUVCQ19CWEFQX1dCRl9FTkNPREUoMSkJfCBcCisJCQkJCUVCQ19CWEFQX1RIX0VOQ09ERSgxKQl8IFwKKwkJCQkJRUJDX0JYQVBfUkVfRElTQUJMRUQJfCBcCisJCQkJCUVCQ19CWEFQX1NPUl9ERUxBWUVECXwgXAorCQkJCQlFQkNfQlhBUF9CRU1fUlcJCXwgXAorCQkJCQlFQkNfQlhBUF9QRU5fRElTQUJMRUQKKworI2RlZmluZSBFQkNfQlhDUl9GUEdBX0NTMQkJRUJDX0JYQ1JfQkFTX0VOQ09ERSgweGUyMDAwMDAwKQl8IFwKKwkJCQkJRUJDX0JYQ1JfQlNfMU1CCQkJfCBcCisJCQkJCUVCQ19CWENSX0JVX1JXCQkJfCBcCisJCQkJCUVCQ19CWENSX0JXXzE2QklUCisKKwkgdW5zaWduZWQgbG9uZyBtZnI7CisJLyoKKwkgKiBEZWZpbmUgVmFyaWFibGVzIGZvciBFQkMgaW5pdGlhbGl6YXRpb24gZGVwZW5kaW5nIG9uIEJPT1RTVFJBUCBvcHRpb24KKwkgKi8KKwl1bnNpZ25lZCBsb25nIHNkcjBfcGluc3RwLCBzZHIwX3Nkc3RwMSA7CisJdW5zaWduZWQgbG9uZyBib290c3RyYXBfc2V0dGluZ3MsIGViY19kYXRhX3dpZHRoLCBib290X3NlbGVjdGlvbjsKKwlpbnQgY29tcHV0ZWRfYm9vdF9kZXZpY2UgPSBCT09UX0RFVklDRV9VTktOT1dOOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSB8IEluaXRpYWxpemUgRUJDIENPTkZJRyAtCisJIHwgS2VlcCB0aGUgRGVmYXVsdCB2YWx1ZSwgYnV0IHRoZSBiaXQgUERUIHdoaWNoIGhhcyB0byBiZSBzZXQgdG8gMSA/VEJDCisJIHwgZGVmYXVsdCB2YWx1ZSA6CisJIHwJMHgwN0MwMDAwMCAtIDAgMCAwMDAgMSAxIDEgMSAxIDAwMDAgMCAwMDAwMCAwMDAwMDAwMDAwMDAKKwkgfAorCSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbXRlYmMoeGJjZmcsIEVCQ19DRkdfTEVfVU5MT0NLIHwKKwkJCUVCQ19DRkdfUFREX0VOQUJMRSB8CisJCQlFQkNfQ0ZHX1JUQ18xNlBFUkNMSyB8CisJCQlFQkNfQ0ZHX0FUQ19QUkVWSU9VUyB8CisJCQlFQkNfQ0ZHX0RUQ19QUkVWSU9VUyB8CisJCQlFQkNfQ0ZHX0NUQ19QUkVWSU9VUyB8CisJCQlFQkNfQ0ZHX09FT19QUkVWSU9VUyB8CisJCQlFQkNfQ0ZHX0VNQ19ERUZBVUxUIHwKKwkJCUVCQ19DRkdfUE1FX0RJU0FCTEUgfAorCQkJRUJDX0NGR19QUl8xNik7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJIHwKKwkgfCAgUEFSVCAxIDogSW5pdGlhbGl6ZSBFQkMgQmFuayAxCisJIHwgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSB8IEJhbmsxIGlzIGFsd2F5cyBhc3NvY2lhdGVkIHRvIHRoZSBFUExELgorCSB8IEl0IGhhcyB0byBiZSBpbml0aWFsaXplZCBwcmlvciB0byBvdGhlciBiYW5rcyBzZXR0aW5ncyBjb21wdXRhdGlvbgorCSB8IHNpbmNlIHNvbWUgYm9hcmQgcmVnaXN0ZXJzIHZhbHVlcyBtYXkgYmUgbmVlZGVkIHRvIGRldGVybWluZSB0aGUKKwkgfCBib290IHR5cGUKKwkgfAorCSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbXRlYmMocGIxYXAsIEVCQ19CWEFQX0ZQR0EpOworCW10ZWJjKHBiMWNyLCBFQkNfQlhDUl9GUEdBX0NTMSk7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJIHwKKwkgfCAgUEFSVCAyIDogRGV0ZXJtaW5lIHdoaWNoIGJvb3QgZGV2aWNlIHdhcyBzZWxlY3RlZAorCSB8ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJIHwKKwkgfCAgUmVhZCBQaW4gU3RyYXAgUmVnaXN0ZXIgaW4gUFBDNDQwU1BlCisJIHwgIFJlc3VsdCBjYW4gZWl0aGVyIGJlIDoKKwkgfCAgIC0gQm9vdCBzdHJhcCA9IGJvb3QgZnJvbSBFQkMgOGJpdHMgICAgID0+IFNtYWxsIEZsYXNoCisJIHwgICAtIEJvb3Qgc3RyYXAgPSBib290IGZyb20gUENJCisJIHwgICAtIEJvb3Qgc3RyYXAgPSBJSUMKKwkgfCAgSW4gY2FzZSBvZiBib290IGZyb20gSUlDLCByZWFkIFNlcmlhbCBEZXZpY2UgU3RyYXAgUmVnaXN0ZXIxCisJIHwKKwkgfCAgUmVzdWx0IGNhbiBlaXRoZXIgYmUgOgorCSB8ICAgLSBCb290IGZyb20gRUJDICAtIEVCQyBCdXMgV2lkdGggPSA4Yml0cyAgICA9PiBTbWFsbCBGbGFzaAorCSB8ICAgLSBCb290IGZyb20gRUJDICAtIEVCQyBCdXMgV2lkdGggPSAxNmJpdHMgICA9PiBMYXJnZSBGbGFzaCBvciBTUkFNCisJIHwgICAtIEJvb3QgZnJvbSBQQ0kKKwkgfAorCSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyogUmVhZCBQaW4gU3RyYXAgUmVnaXN0ZXIgaW4gUFBDNDQwU1AgKi8KKwlzZHIwX3BpbnN0cCA9IHBwY01mc2RyKFNEUjBfUElOU1RQKTsKKwlib290c3RyYXBfc2V0dGluZ3MgPSBzZHIwX3BpbnN0cCAmIFNEUjBfUElOU1RQX0JPT1RTVFJBUF9NQVNLOworCisJc3dpdGNoIChib290c3RyYXBfc2V0dGluZ3MpIHsKKwkJY2FzZSBTRFIwX1BJTlNUUF9CT09UU1RSQVBfU0VUVElOR1MwOgorCQkJLyoKKwkJCSAqIFN0cmFwcGluZyBPcHRpb24gQQorCQkJICogQm9vdCBmcm9tIEVCQyAtIDggYml0cyAsIFNtYWxsIEZsYXNoCisJCQkgKi8KKwkJCWNvbXB1dGVkX2Jvb3RfZGV2aWNlID0gQk9PVF9GUk9NX1NNQUxMX0ZMQVNIOworCQkJYnJlYWs7CisJCWNhc2UgU0RSMF9QSU5TVFBfQk9PVFNUUkFQX1NFVFRJTkdTMToKKwkJCS8qCisJCQkgKiBTdHJhcHBwaW5nIE9wdGlvbiBCCisJCQkgKiBCb290IGZyb20gUENJCisJCQkgKi8KKwkJCWNvbXB1dGVkX2Jvb3RfZGV2aWNlID0gQk9PVF9GUk9NX1BDSTsKKwkJCWJyZWFrOworCQljYXNlIFNEUjBfUElOU1RQX0JPT1RTVFJBUF9JSUNfNTBfRU46CisJCWNhc2UgU0RSMF9QSU5TVFBfQk9PVFNUUkFQX0lJQ181NF9FTjoKKwkJCS8qCisJCQkgKiBTdHJhcHBpbmcgT3B0aW9uIEMgb3IgRAorCQkJICogQm9vdCBTZXR0aW5ncyBpbiBJSUMgRUVwcm9tIGFkZHJlc3MgMHg1MCBvciAweDU0CisJCQkgKiBSZWFkIFNlcmlhbCBEZXZpY2UgU3RyYXAgUmVnaXN0ZXIxIGluIFBQQzQ0MFNQZQorCQkJICovCisJCQlzZHIwX3Nkc3RwMSA9IHBwY01mc2RyKFNEUjBfU0RTVFAxKTsKKwkJCWJvb3Rfc2VsZWN0aW9uID0gc2RyMF9zZHN0cDEgJiBTRFIwX1NEU1RQMV9FUlBOX01BU0s7CisJCQllYmNfZGF0YV93aWR0aCA9IHNkcjBfc2RzdHAxICYgU0RSMF9TRFNUUDFfRUJDV19NQVNLOworCisJCQlzd2l0Y2ggKGJvb3Rfc2VsZWN0aW9uKSB7CisJCQkJY2FzZSBTRFIwX1NEU1RQMV9FUlBOX0VCQzoKKwkJCQkJc3dpdGNoIChlYmNfZGF0YV93aWR0aCkgeworCQkJCQkJY2FzZSBTRFIwX1NEU1RQMV9FQkNXXzE2X0JJVFM6CisJCQkJCQkJY29tcHV0ZWRfYm9vdF9kZXZpY2UgPQorCQkJCQkJCQlCT09UX0ZST01fTEFSR0VfRkxBU0hfT1JfU1JBTTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgU0RSMF9TRFNUUDFfRUJDV184X0JJVFMgOgorCQkJCQkJCWNvbXB1dGVkX2Jvb3RfZGV2aWNlID0gQk9PVF9GUk9NX1NNQUxMX0ZMQVNIOworCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBTRFIwX1NEU1RQMV9FUlBOX1BDSToKKwkJCQkJY29tcHV0ZWRfYm9vdF9kZXZpY2UgPSBCT09UX0ZST01fUENJOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBzaG91bGQgbm90IG9jY3VyZSAqLworCQkJCQljb21wdXRlZF9ib290X2RldmljZSA9IEJPT1RfREVWSUNFX1VOS05PV047CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIHNob3VsZCBub3QgYmUgKi8KKwkJCWNvbXB1dGVkX2Jvb3RfZGV2aWNlID0gQk9PVF9ERVZJQ0VfVU5LTk9XTjsKKwkJCWJyZWFrOworCX0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgfAorCSB8ICBQQVJUIDMgOiBDb21wdXRlIEVCQyBzZXR0aW5ncyBkZXBlbmRpbmcgb24gc2VsZWN0ZWQgYm9vdCBkZXZpY2UKKwkgfCAgPT09PT09ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJIHwKKwkgfCBSZXN1bHRpbmcgRUJDIGluaXQgd2lsbCBiZSBhbW9uZyBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgOgorCSB8CisJIHwgIC0gQm9vdCBmcm9tIEVCQyA4Yml0cyA9PiBib290IGZyb20gU21hbGwgRmxhc2ggc2VsZWN0ZWQKKwkgfCAgICAgICAgICAgIEVCQy1DUzAgICAgID0gU21hbGwgRmxhc2gKKwkgfCAgICAgICAgICAgIEVCQy1DUzIgICAgID0gTGFyZ2UgRmxhc2ggYW5kIFNSQU0KKwkgfAorCSB8ICAtIEJvb3QgZnJvbSBFQkMgMTZiaXRzID0+IGJvb3QgZnJvbSBMYXJnZSBGbGFzaCBvciBTUkFNCisJIHwgICAgICAgICAgICBFQkMtQ1MwICAgICA9IExhcmdlIEZsYXNoIG9yIFNSQU0KKwkgfCAgICAgICAgICAgIEVCQy1DUzIgICAgID0gU21hbGwgRmxhc2gKKwkgfAorCSB8ICAtIEJvb3QgZnJvbSBQQ0kKKwkgfCAgICAgICAgICAgIEVCQy1DUzAgICAgID0gbm90IGluaXRpYWxpemVkIHRvIGF2b2lkIGFkZHJlc3MgY29udGVudGlvbgorCSB8ICAgICAgICAgICAgRUJDLUNTMiAgICAgPSBzYW1lIGFzIGJvb3QgZnJvbSBTbWFsbCBGbGFzaCBzZWxlY3RlZAorCSB8CisJICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl1bnNpZ25lZCBsb25nIGViYzBfY3MwX2J4YXBfdmFsdWUgPSAwLCBlYmMwX2NzMF9ieGNyX3ZhbHVlID0gMDsKKwl1bnNpZ25lZCBsb25nIGViYzBfY3MyX2J4YXBfdmFsdWUgPSAwLCBlYmMwX2NzMl9ieGNyX3ZhbHVlID0gMDsKKworCXN3aXRjaCAoY29tcHV0ZWRfYm9vdF9kZXZpY2UpIHsKKwkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJY2FzZSBCT09UX0ZST01fUENJOgorCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJLyoKKwkJCSAqIEJ5IERlZmF1bHQgQ1MyIGlzIGFmZmVjdGVkIHRvIExBUkdFIEZsYXNoCisJCQkgKiBkbyBub3QgaW5pdGlhbGl6ZSBTTUFMTCBGTEFTSCB0byBhdm9pZCBhZGRyZXNzIGNvbnRlbnRpb24KKwkJCSAqIExhcmdlIEZsYXNoCisJCQkgKi8KKwkJCWViYzBfY3MyX2J4YXBfdmFsdWUgPSBFQkNfQlhBUF9MQVJHRV9GTEFTSDsKKwkJCWViYzBfY3MyX2J4Y3JfdmFsdWUgPSBFQkNfQlhDUl9MQVJHRV9GTEFTSF9DUzI7CisJCQlicmVhazsKKworCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQljYXNlIEJPT1RfRlJPTV9TTUFMTF9GTEFTSDoKKwkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCWViYzBfY3MwX2J4YXBfdmFsdWUgPSBFQkNfQlhBUF9TTUFMTF9GTEFTSDsKKwkJCWViYzBfY3MwX2J4Y3JfdmFsdWUgPSBFQkNfQlhDUl9TTUFMTF9GTEFTSF9DUzA7CisKKwkJCS8qCisJCQkgKiBMYXJnZSBGbGFzaCBvciBTUkFNCisJCQkgKi8KKwkJCS8qIGViYzBfY3MyX2J4YXBfdmFsdWUgPSBFQkNfQlhBUF9MQVJHRV9GTEFTSDsgKi8KKwkJCWViYzBfY3MyX2J4YXBfdmFsdWUgPSAweDA0OGZmMjQwOworCQkJZWJjMF9jczJfYnhjcl92YWx1ZSA9IEVCQ19CWENSX0xBUkdFX0ZMQVNIX0NTMjsKKwkJCWJyZWFrOworCisJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCWNhc2UgQk9PVF9GUk9NX0xBUkdFX0ZMQVNIX09SX1NSQU06CisJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQllYmMwX2NzMF9ieGFwX3ZhbHVlID0gRUJDX0JYQVBfTEFSR0VfRkxBU0g7CisJCQllYmMwX2NzMF9ieGNyX3ZhbHVlID0gRUJDX0JYQ1JfTEFSR0VfRkxBU0hfQ1MwOworCisJCQkvKiBTbWFsbCBmbGFzaCAqLworCQkJZWJjMF9jczJfYnhhcF92YWx1ZSA9IEVCQ19CWEFQX1NNQUxMX0ZMQVNIOworCQkJZWJjMF9jczJfYnhjcl92YWx1ZSA9IEVCQ19CWENSX1NNQUxMX0ZMQVNIX0NTMjsKKwkJCWJyZWFrOworCisJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCWRlZmF1bHQ6CisJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQkvKiBCT09UX0RFVklDRV9VTktOT1dOICovCisJCQlicmVhazsKKwl9CisKKwltdGViYyhwYjBhcCwgZWJjMF9jczBfYnhhcF92YWx1ZSk7CisJbXRlYmMocGIwY3IsIGViYzBfY3MwX2J4Y3JfdmFsdWUpOworCW10ZWJjKHBiMmFwLCBlYmMwX2NzMl9ieGFwX3ZhbHVlKTsKKwltdGViYyhwYjJjciwgZWJjMF9jczJfYnhjcl92YWx1ZSk7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSB8IEludGVycnVwdCBjb250cm9sbGVyIHNldHVwIGZvciB0aGUgQU1DQyA0NDBTUGUgRXZhbHVhdGlvbiBib2FyZC4KKwkgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfEludGVycnVwdHwgU291cmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUG9sLiAgfCBTZW5zaS58IENyaXQuIHwKKwkrLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworCXwgSVJRIDAwICB8IFVBUlQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMDEgIHwgVUFSVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAwMiAgfCBJSUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDAzICB8IElJQzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMDQgIHwgUENJMFgwIE1TRyBJTiAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAwNSAgfCBQQ0kwWDAgQ01EIFdyaXRlICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDA2ICB8IFBDSTBYMCBQb3dlciBNZ3QgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMDcgIHwgUENJMFgwIFZQRCBBY2Nlc3MgICAgICAgICAgICAgICAgIHwgUmlzaW5nfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAwOCAgfCBQQ0kwWDAgTVNJIGxldmVsIDAgICAgICAgICAgICAgICAgfCBIaWdoICB8IEx2bC9lZHwgTm9uICAgfAorCXwgSVJRIDA5ICB8IEV4dGVybmFsIElSUSAxNSAtIChQQ0ktRXhwcmVzcykgICB8IHBnbSBIIHwgUGdtICAgfCBOb24gICB8CisJfCBJUlEgMTAgIHwgVUlDMiBOb24tY3JpdGljYWwgSW50LiAgICAgICAgICAgIHwgTkEgICAgfCBOQSAgICB8IE5vbiAgIHwKKwl8IElSUSAxMSAgfCBVSUMyIENyaXRpY2FsIEludGVycnVwdCAgICAgICAgICAgfCBOQSAgICB8IE5BICAgIHwgQ3JpdCAgfAorCXwgSVJRIDEyICB8IFBDSSBFeHByZXNzIE1TSSBMZXZlbCAwICAgICAgICAgICB8IFJpc2luZ3wgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTMgIHwgUENJIEV4cHJlc3MgTVNJIExldmVsIDEgICAgICAgICAgIHwgUmlzaW5nfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAxNCAgfCBQQ0kgRXhwcmVzcyBNU0kgTGV2ZWwgMiAgICAgICAgICAgfCBSaXNpbmd8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDE1ICB8IFBDSSBFeHByZXNzIE1TSSBMZXZlbCAzICAgICAgICAgICB8IFJpc2luZ3wgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTYgIHwgVUlDMyBOb24tY3JpdGljYWwgSW50LiAgICAgICAgICAgIHwgTkEgICAgfCBOQSAgICB8IE5vbiAgIHwKKwl8IElSUSAxNyAgfCBVSUMzIENyaXRpY2FsIEludGVycnVwdCAgICAgICAgICAgfCBOQSAgICB8IE5BICAgIHwgQ3JpdCAgfAorCXwgSVJRIDE4ICB8IEV4dGVybmFsIElSUSAxNCAtIChQQ0ktRXhwcmVzcykgICB8IFBnbSAgIHwgUGdtICAgfCBOb24gICB8CisJfCBJUlEgMTkgIHwgRE1BIENoYW5uZWwgMCBGSUZPIEZ1bGwgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAyMCAgfCBETUEgQ2hhbm5lbCAwIFN0YXQgRklGTyAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDIxICB8IERNQSBDaGFubmVsIDEgRklGTyBGdWxsICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMjIgIHwgRE1BIENoYW5uZWwgMSBTdGF0IEZJRk8gICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAyMyAgfCBJMk8gSW5ib3VuZCBEb29yYmVsbCAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDI0ICB8IEluYm91bmQgUG9zdCBMaXN0IEZJRk8gTm90IEVtcHQgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMjUgIHwgSTJPIFJlZ2lvbiAwIExMIFBMQiBXcml0ZSAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAyNiAgfCBJMk8gUmVnaW9uIDEgTEwgUExCIFdyaXRlICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDI3ICB8IEkyTyBSZWdpb24gMCBIQiBQTEIgV3JpdGUgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMjggIHwgSTJPIFJlZ2lvbiAxIEhCIFBMQiBXcml0ZSAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAyOSAgfCBHUFQgRG93biBDb3VudCBUaW1lciAgICAgICAgICAgICAgfCBSaXNpbmd8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDMwICB8IFVJQzEgTm9uLWNyaXRpY2FsIEludC4gICAgICAgICAgICB8IE5BICAgIHwgTkEgICAgfCBOb24gICB8CisJfCBJUlEgMzEgIHwgVUlDMSBDcml0aWNhbCBJbnRlcnJ1cHQgICAgICAgICAgIHwgTkEgICAgfCBOQSAgICB8IENyaXQuIHwKKwl8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXwgSVJRIDMyICB8IEV4dC4gSVJRIDEzIC0gKFBDSS1FeHByZXNzKSAgICAgICB8cGdtIChIKXxwZ20vTHZsfCBOb24gICB8CisJfCBJUlEgMzMgIHwgTUFMIFNlcnIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAzNCAgfCBNQUwgVHhkZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDM1ICB8IE1BTCBSeGRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMzYgIHwgRE1DIENFIG9yIERNQyBVRSAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAzNyAgfCBFQkMgb3IgVUFSVDIgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8THZsIEVkZ3wgTm9uICAgfAorCXwgSVJRIDM4ICB8IE1BTCBUWCBFT0IgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMzkgIHwgTUFMIFJYIEVPQiAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSA0MCAgfCBQQ0lYMCBNU0kgTGV2ZWwgMSAgICAgICAgICAgICAgICAgfCBIaWdoICB8THZsIEVkZ3wgTm9uICAgfAorCXwgSVJRIDQxICB8IFBDSVgwIE1TSSBsZXZlbCAyICAgICAgICAgICAgICAgICB8IEhpZ2ggIHxMdmwgRWRnfCBOb24gICB8CisJfCBJUlEgNDIgIHwgUENJWDAgTVNJIGxldmVsIDMgICAgICAgICAgICAgICAgIHwgSGlnaCAgfEx2bCBFZGd8IE5vbiAgIHwKKwl8IElSUSA0MyAgfCBMMiBDYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDQ0ICB8IEdQVCBDb21wYXJlIFRpbWVyIDAgICAgICAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgNDUgIHwgR1BUIENvbXBhcmUgVGltZXIgMSAgICAgICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSA0NiAgfCBHUFQgQ29tcGFyZSBUaW1lciAyICAgICAgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDQ3ICB8IEdQVCBDb21wYXJlIFRpbWVyIDMgICAgICAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgNDggIHwgR1BUIENvbXBhcmUgVGltZXIgNCAgICAgICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSA0OSAgfCBFeHQuIElSUSAxMiAtIFBDSS1YICAgICAgICAgICAgICAgfHBnbS9GYWx8cGdtL0x2bHwgTm9uICAgfAorCXwgSVJRIDUwICB8IEV4dC4gSVJRIDExIC0gICAgICAgICAgICAgICAgICAgICB8cGdtIChIKXxwZ20vTHZsfCBOb24gICB8CisJfCBJUlEgNTEgIHwgRXh0LiBJUlEgMTAgLSAgICAgICAgICAgICAgICAgICAgIHxwZ20gKEgpfHBnbS9Mdmx8IE5vbiAgIHwKKwl8IElSUSA1MiAgfCBFeHQuIElSUSA5ICAgICAgICAgICAgICAgICAgICAgICAgfHBnbSAoSCl8cGdtL0x2bHwgTm9uICAgfAorCXwgSVJRIDUzICB8IEV4dC4gSVJRIDggICAgICAgICAgICAgICAgICAgICAgICB8cGdtIChIKXxwZ20vTHZsfCBOb24gICB8CisJfCBJUlEgNTQgIHwgRE1BIEVycm9yICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSA1NSAgfCBETUEgSTJPIEVycm9yICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDU2ICB8IFNlcmlhbCBST00gICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgNTcgIHwgUENJWDAgRXJyb3IgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSA1OCAgfCBFeHQuIElSUSA3LSAgICAgICAgICAgICAgICAgICAgICAgfHBnbSAoSCl8cGdtL0x2bHwgTm9uICAgfAorCXwgSVJRIDU5ICB8IEV4dC4gSVJRIDYtICAgICAgICAgICAgICAgICAgICAgICB8cGdtIChIKXxwZ20vTHZsfCBOb24gICB8CisJfCBJUlEgNjAgIHwgRU1BQzAgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSA2MSAgfCBFTUFDMCBXYWtlLXVwICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDYyICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgNjMgIHwgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXwgSVJRIDY0ICB8IFBFMCBBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgNjUgIHwgUEUwIFZQRCBBY2Nlc3MgICAgICAgICAgICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSA2NiAgfCBQRTAgSG90IFJlc2V0IFJlcXVlc3QgICAgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDY3ICB8IFBFMCBIb3QgUmVzZXQgUmVxdWVzdCAgICAgICAgICAgICB8IEZhbGxpIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgNjggIHwgUEUwIFRDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSA2OSAgfCBQRTAgQnVzTWFzdGVyIFZDTyAgICAgICAgICAgICAgICAgfCBGYWxsaSB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDcwICB8IFBFMCBEQ1IgRXJyb3IgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgNzEgIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgfCBOL0EgICB8IE5vbiAgIHwKKwl8IElSUSA3MiAgfCBQRTEgQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDczICB8IFBFMSBWUEQgQWNjZXNzICAgICAgICAgICAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgNzQgIHwgUEUxIEhvdCBSZXNldCBSZXF1ZXN0ICAgICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSA3NSAgfCBQRTEgSG90IFJlc2V0IFJlcXVlc3QgICAgICAgICAgICAgfCBGYWxsaSB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDc2ICB8IFBFMSBUQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgNzcgIHwgUEUxIEJ1c01hc3RlciBWQ08gICAgICAgICAgICAgICAgIHwgRmFsbGkgfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSA3OCAgfCBQRTEgRENSIEVycm9yICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDc5ICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgIHwgTi9BICAgfCBOb24gICB8CisJfCBJUlEgODAgIHwgUEUyIEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSA4MSAgfCBQRTIgVlBEIEFjY2VzcyAgICAgICAgICAgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDgyICB8IFBFMiBIb3QgUmVzZXQgUmVxdWVzdCAgICAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgODMgIHwgUEUyIEhvdCBSZXNldCBSZXF1ZXN0ICAgICAgICAgICAgIHwgRmFsbGkgfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSA4NCAgfCBQRTIgVENSICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDg1ICB8IFBFMiBCdXNNYXN0ZXIgVkNPICAgICAgICAgICAgICAgICB8IEZhbGxpIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgODYgIHwgUEUyIERDUiBFcnJvciAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSA4NyAgfCBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICB8IE4vQSAgIHwgTm9uICAgfAorCXwgSVJRIDg4ICB8IEV4dGVybmFsIElSUSg1KSAgICAgICAgICAgICAgICAgICB8IFByb2dyIHwgUHJvZ3IgfCBOb24gICB8CisJfCBJUlEgODkgIHwgRXh0ZXJuYWwgSVJRIDQgLSBFdGhlcm5ldCAgICAgICAgIHwgUHJvZ3IgfCBQcm9nciB8IE5vbiAgIHwKKwl8IElSUSA5MCAgfCBFeHRlcm5hbCBJUlEgMyAtIFBDSS1YICAgICAgICAgICAgfCBQcm9nciB8IFByb2dyIHwgTm9uICAgfAorCXwgSVJRIDkxICB8IEV4dGVybmFsIElSUSAyIC0gUENJLVggICAgICAgICAgICB8IFByb2dyIHwgUHJvZ3IgfCBOb24gICB8CisJfCBJUlEgOTIgIHwgRXh0ZXJuYWwgSVJRIDEgLSBQQ0ktWCAgICAgICAgICAgIHwgUHJvZ3IgfCBQcm9nciB8IE5vbiAgIHwKKwl8IElSUSA5MyAgfCBFeHRlcm5hbCBJUlEgMCAtIFBDSS1YICAgICAgICAgICAgfCBQcm9nciB8IFByb2dyIHwgTm9uICAgfAorCXwgSVJRIDk0ICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgIHwgTi9BICAgfCBOb24gICB8CisJfCBJUlEgOTUgIHwgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgfCBOL0EgICB8IE5vbiAgIHwKKwl8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfCBJUlEgOTYgIHwgUEUwIElOVEEgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSA5NyAgfCBQRTAgSU5UQiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDk4ICB8IFBFMCBJTlRDICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgOTkgIHwgUEUwIElOVEQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAxMDAgfCBQRTEgSU5UQSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDEwMSB8IFBFMSBJTlRCICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMTAyIHwgUEUxIElOVEMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAxMDMgfCBQRTEgSU5URCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDEwNCB8IFBFMiBJTlRBICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhpZ2ggIHwgTGV2ZWwgfCBOb24gICB8CisJfCBJUlEgMTA1IHwgUEUyIElOVEIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSGlnaCAgfCBMZXZlbCB8IE5vbiAgIHwKKwl8IElSUSAxMDYgfCBQRTIgSU5UQyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIaWdoICB8IExldmVsIHwgTm9uICAgfAorCXwgSVJRIDEwNyB8IFBFMiBJTlREICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTA4IHwgUENJIEV4cHJlc3MgTVNJIExldmVsIDQgICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAxMDkgfCBQQ0kgRXhwcmVzcyBNU0kgTGV2ZWwgNSAgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDExMCB8IFBDSSBFeHByZXNzIE1TSSBMZXZlbCA2ICAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTExIHwgUENJIEV4cHJlc3MgTVNJIExldmVsIDcgICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAxMTYgfCBQQ0kgRXhwcmVzcyBNU0kgTGV2ZWwgMTIgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDExMiB8IFBDSSBFeHByZXNzIE1TSSBMZXZlbCA4ICAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTEzIHwgUENJIEV4cHJlc3MgTVNJIExldmVsIDkgICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAxMTQgfCBQQ0kgRXhwcmVzcyBNU0kgTGV2ZWwgMTAgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDExNSB8IFBDSSBFeHByZXNzIE1TSSBMZXZlbCAxMSAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTE3IHwgUENJIEV4cHJlc3MgTVNJIExldmVsIDEzICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAxMTggfCBQQ0kgRXhwcmVzcyBNU0kgTGV2ZWwgMTQgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDExOSB8IFBDSSBFeHByZXNzIE1TSSBMZXZlbCAxNSAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTIwIHwgUENJIEV4cHJlc3MgTVNJIExldmVsIDE2ICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAxMjEgfCBQQ0kgRXhwcmVzcyBNU0kgTGV2ZWwgMTcgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDEyMiB8IFBDSSBFeHByZXNzIE1TSSBMZXZlbCAxOCAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTIzIHwgUENJIEV4cHJlc3MgTVNJIExldmVsIDE5ICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAxMjQgfCBQQ0kgRXhwcmVzcyBNU0kgTGV2ZWwgMjAgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCXwgSVJRIDEyNSB8IFBDSSBFeHByZXNzIE1TSSBMZXZlbCAyMSAgICAgICAgICB8IFJpc2luIHwgRWRnZSAgfCBOb24gICB8CisJfCBJUlEgMTI2IHwgUENJIEV4cHJlc3MgTVNJIExldmVsIDIyICAgICAgICAgIHwgUmlzaW4gfCBFZGdlICB8IE5vbiAgIHwKKwl8IElSUSAxMjcgfCBQQ0kgRXhwcmVzcyBNU0kgTGV2ZWwgMjMgICAgICAgICAgfCBSaXNpbiB8IEVkZ2UgIHwgTm9uICAgfAorCSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLSovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgfCBQdXQgVUlDcyBpbiBQb3dlclBDNDQwU1BlbW9kZS4KKwkgfCBJbml0aWFsaXNlIFVJQyByZWdpc3RlcnMuICBDbGVhciBhbGwgaW50ZXJydXB0cy4gIERpc2FibGUgYWxsCisJIHwgaW50ZXJydXB0cy4KKwkgfCBTZXQgY3JpdGljYWwgaW50ZXJydXB0IHZhbHVlcy4gIFNldCBpbnRlcnJ1cHQgcG9sYXJpdGllcy4gIFNldAorCSB8IGludGVycnVwdCB0cmlnZ2VyIGxldmVscy4gIE1ha2UgYml0IDAgSGlnaCAgcHJpb3JpdHkuICBDbGVhciBhbGwKKwkgfCBpbnRlcnJ1cHRzIGFnYWluLgorCSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbXRkY3IgKHVpYzNzciwgMHhmZmZmZmZmZik7CS8qIENsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJbXRkY3IgKHVpYzNlciwgMHgwMDAwMDAwMCk7CS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwltdGRjciAodWljM2NyLCAweDAwMDAwMDAwKTsJLyogU2V0IENyaXRpY2FsIC8gTm9uIENyaXRpY2FsCisJCQkJCSAqIGludGVycnVwdHMgKi8KKwltdGRjciAodWljM3ByLCAweGZmZmZmZmZmKTsJLyogU2V0IEludGVycnVwdCBQb2xhcml0aWVzICovCisJbXRkY3IgKHVpYzN0ciwgMHgwMDFmZmZmZik7CS8qIFNldCBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbHMgKi8KKwltdGRjciAodWljM3ZyLCAweDAwMDAwMDAxKTsJLyogU2V0IFZlY3QgYmFzZT0wLElOVDMxIEhpZ2hlc3QKKwkJCQkJICogcHJpb3JpdHkgKi8KKwltdGRjciAodWljM3NyLCAweDAwMDAwMDAwKTsJLyogY2xlYXIgYWxsICBpbnRlcnJ1cHRzICovCisJbXRkY3IgKHVpYzNzciwgMHhmZmZmZmZmZik7CS8qIGNsZWFyIGFsbCAgaW50ZXJydXB0cyAqLworCisJbXRkY3IgKHVpYzJzciwgMHhmZmZmZmZmZik7CS8qIENsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJbXRkY3IgKHVpYzJlciwgMHgwMDAwMDAwMCk7CS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwltdGRjciAodWljMmNyLCAweDAwMDAwMDAwKTsJLyogU2V0IENyaXRpY2FsIC8gTm9uIENyaXRpY2FsCisJCQkJCSAqIGludGVycnVwdHMgKi8KKwltdGRjciAodWljMnByLCAweGViZWJlYmZmKTsJLyogU2V0IEludGVycnVwdCBQb2xhcml0aWVzICovCisJbXRkY3IgKHVpYzJ0ciwgMHg3NDc0NzQwMCk7CS8qIFNldCBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbHMgKi8KKwltdGRjciAodWljMnZyLCAweDAwMDAwMDAxKTsJLyogU2V0IFZlY3QgYmFzZT0wLElOVDMxIEhpZ2hlc3QKKwkJCQkJICogcHJpb3JpdHkgKi8KKwltdGRjciAodWljMnNyLCAweDAwMDAwMDAwKTsJLyogY2xlYXIgYWxsIGludGVycnVwdHMgKi8KKwltdGRjciAodWljMnNyLCAweGZmZmZmZmZmKTsJLyogY2xlYXIgYWxsIGludGVycnVwdHMgKi8KKworCW10ZGNyICh1aWMxc3IsIDB4ZmZmZmZmZmYpOwkvKiBDbGVhciBhbGwgaW50ZXJydXB0cyAqLworCW10ZGNyICh1aWMxZXIsIDB4MDAwMDAwMDApOwkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJbXRkY3IgKHVpYzFjciwgMHgwMDAwMDAwMCk7CS8qIFNldCBDcml0aWNhbCAvIE5vbiBDcml0aWNhbAorCQkJCQkgKiBpbnRlcnJ1cHRzICovCisJbXRkY3IgKHVpYzFwciwgMHhmZmZmZmZmZik7CS8qIFNldCBJbnRlcnJ1cHQgUG9sYXJpdGllcyAqLworCW10ZGNyICh1aWMxdHIsIDB4MDAxZjgwNDApOwkvKiBTZXQgSW50ZXJydXB0IFRyaWdnZXIgTGV2ZWxzICovCisJbXRkY3IgKHVpYzF2ciwgMHgwMDAwMDAwMSk7CS8qIFNldCBWZWN0IGJhc2U9MCxJTlQzMSBIaWdoZXN0CisJCQkJCSAqIHByaW9yaXR5ICovCisJbXRkY3IgKHVpYzFzciwgMHgwMDAwMDAwMCk7CS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJbXRkY3IgKHVpYzFzciwgMHhmZmZmZmZmZik7CS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisKKwltdGRjciAodWljMHNyLCAweGZmZmZmZmZmKTsJLyogQ2xlYXIgYWxsIGludGVycnVwdHMgKi8KKwltdGRjciAodWljMGVyLCAweDAwMDAwMDAwKTsJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyBleGNlcHRlZAorCQkJCQkgKiBjYXNjYWRlIHRvIGJlIGNoZWNrZWQgKi8KKwltdGRjciAodWljMGNyLCAweDAwMTA0MDAxKTsJLyogU2V0IENyaXRpY2FsIC8gTm9uIENyaXRpY2FsCisJCQkJCSAqIGludGVycnVwdHMgKi8KKwltdGRjciAodWljMHByLCAweGZmZmZmZmZmKTsJLyogU2V0IEludGVycnVwdCBQb2xhcml0aWVzICovCisJbXRkY3IgKHVpYzB0ciwgMHgwMTBmMDAwNCk7CS8qIFNldCBJbnRlcnJ1cHQgVHJpZ2dlciBMZXZlbHMgKi8KKwltdGRjciAodWljMHZyLCAweDAwMDAwMDAxKTsJLyogU2V0IFZlY3QgYmFzZT0wLElOVDMxIEhpZ2hlc3QKKwkJCQkJICogcHJpb3JpdHkgKi8KKwltdGRjciAodWljMHNyLCAweDAwMDAwMDAwKTsJLyogY2xlYXIgYWxsIGludGVycnVwdHMgKi8KKwltdGRjciAodWljMHNyLCAweGZmZmZmZmZmKTsJLyogY2xlYXIgYWxsIGludGVycnVwdHMgKi8KKworCS8qIFNEUjBfTUZSIHNob3VsZCBiZSBwYXJ0IG9mIEV0aGVybmV0IGluaXQgKi8KKwltZnNkciAoc2RyX21mciwgbWZyKTsKKwltZnIgJj0gflNEUjBfTUZSX0VDU19NQVNLOworCS8qbXRzZHIoc2RyX21mciwgbWZyKTsqLworCWZwZ2FfaW5pdCgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja2JvYXJkICh2b2lkKQoreworCWNoYXIgKnMgPSBnZXRlbnYoInNlcmlhbCMiKTsKKworCXByaW50ZigiQm9hcmQ6IFl1Y2NhIC0gQU1DQyA0NDBTUGUgRXZhbHVhdGlvbiBCb2FyZCIpOworCWlmIChzICE9IE5VTEwpIHsKKwkJcHV0cygiLCBzZXJpYWwjICIpOworCQlwdXRzKHMpOworCX0KKwlwdXRjKCdcbicpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIGludCB5dWNjYV9wcm9iZV9mb3JfZGltbXModm9pZCkKK3sKKwlpbnQgCWRpbW1faW5zdGFsbGVkW01BWERJTU1TXTsKKwlpbnQJZGltbV9udW0sIHJlc3VsdDsKKwlpbnQJZGltbXNfZm91bmQgPSAwOworCXVjaGFyCWRpbW1fYWRkciA9IElJQzBfRElNTTBfQUREUjsKKwl1Y2hhciAgIGRpbW1fc3BkX2RhdGFbTUFYX1NQRF9CWVRFU107CisKKwlmb3IgKGRpbW1fbnVtID0gMDsgZGltbV9udW0gPCBNQVhESU1NUzsgZGltbV9udW0rKykgeworCQkvKiBjaGVjayBpZiB0aGVyZSBpcyBhIGNoaXAgYXQgdGhlIGRpbW0gYWRkcmVzcwkqLworCQlzd2l0Y2ggKGRpbW1fbnVtKSB7CisJCQljYXNlIDA6CisJCQkJZGltbV9hZGRyID0gSUlDMF9ESU1NMF9BRERSOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWRpbW1fYWRkciA9IElJQzBfRElNTTFfQUREUjsKKwkJCQlicmVhazsKKwkJfQorCisJCXJlc3VsdCA9IGkyY19wcm9iZShkaW1tX2FkZHIpOworCisJCW1lbXNldChkaW1tX3NwZF9kYXRhLCAwLCBNQVhfU1BEX0JZVEVTICogc2l6ZW9mKGNoYXIpKTsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkvKiByZWFkIGZpcnN0IGJ5dGUgb2YgU1BEIGRhdGEsIGlmIHRoZXJlIGlzIGFueSBkYXRhICovCisJCQlyZXN1bHQgPSBpMmNfcmVhZChkaW1tX2FkZHIsIDAsIDEsIGRpbW1fc3BkX2RhdGEsIDEpOworCisJCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCQlyZXN1bHQgPSBkaW1tX3NwZF9kYXRhWzBdOworCQkJCXJlc3VsdCA9IHJlc3VsdCA+IE1BWF9TUERfQllURVMgPworCQkJCQkJTUFYX1NQRF9CWVRFUyA6IHJlc3VsdDsKKwkJCQlyZXN1bHQgPSBpMmNfcmVhZChkaW1tX2FkZHIsIDAsIDEsCisJCQkJCQkJZGltbV9zcGRfZGF0YSwgcmVzdWx0KTsKKwkJCX0KKwkJfQorCisJCWlmICgocmVzdWx0ID09IDApICYmCisJCSAgICAoZGltbV9zcGRfZGF0YVs2NF0gPT0gTUlDUk9OX1NQRF9KRURFQ19JRCkpIHsKKwkJCWRpbW1faW5zdGFsbGVkW2RpbW1fbnVtXSA9IFRSVUU7CisJCQlkaW1tc19mb3VuZCsrOworCQkJZGVidWcoIkRJTU0gc2xvdCAlZDogRERSMiBTRFJBTSBkZXRlY3RlZFxuIiwgZGltbV9udW0pOworCQl9IGVsc2UgeworCQkJZGltbV9pbnN0YWxsZWRbZGltbV9udW1dID0gRkFMU0U7CisJCQlkZWJ1ZygiRElNTSBzbG90ICVkOiBOb3QgcG9wdWxhdGVkIG9yIGNhbm5vdCBzdWNlc3NmdWxseSBwcm9iZSB0aGUgRElNTVxuIiwgZGltbV9udW0pOworCQl9CisJfQorCisJaWYgKGRpbW1zX2ZvdW5kID09IDApIHsKKwkJcHJpbnRmKCJFUlJPUiAtIE5vIG1lbW9yeSBpbnN0YWxsZWQuICBJbnN0YWxsIGEgRERSLVNEUkFNIERJTU0uXG5cbiIpOworCQloYW5nKCk7CisJfQorCisJaWYgKGRpbW1faW5zdGFsbGVkWzBdICE9IFRSVUUpIHsKKwkJcHJpbnRmKCJcbkVSUk9SIC0gRElNTSBzbG90IDAgbXVzdCBiZSBwb3B1bGF0ZWQgYmVmb3JlIERJTU0gc2xvdCAxLlxuIik7CisJCXByaW50ZigiICAgICAgICBVbnN1cHBvcnRlZCBjb25maWd1cmF0aW9uLiBNb3ZlIERJTU0gbW9kdWxlIGZyb20gRElNTSBzbG90IDEgdG8gc2xvdCAwLlxuXG4iKTsKKwkJaGFuZygpOworCX0KKworCXJldHVybiBkaW1tc19mb3VuZDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGluaXQgU0RSQU0gY29udHJvbGxlciB3aXRoIGZpeGVkIHZhbHVlCisgKiB0aGUgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGFyZSBmb3IgMnggTUlDUk9OIEREUjIKKyAqIFBOOiBNVDE4SFRGNjQ3MkRZLTUzRUIyCisgKiA1MTJNQiwgRERSMiwgNTMzLCBDTDQsIEVDQywgUkVHCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGxvbmcgaW50IGZpeGVkX3NkcmFtKHZvaWQpCit7CisJbG9uZyBpbnQgeXVjY2FfZGltbXMgPSAwOworCisJeXVjY2FfZGltbXMgPSB5dWNjYV9wcm9iZV9mb3JfZGltbXMoKTsKKworCS8qIFNEUkFNMF9NQ09QVDIgKDBYMjEpIENsZWFyIERDRU4gQklUCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwMjEgKTsKKwltdGRjciggMHgxMSwgMHg4NDAwMDAwMCApOworCisJLyogU0RSQU0wX01DT1BUMSAoMFgyMCkgRUNDIE9GRiAvIDY0IGJpdHMgLyA0IGJhbmtzIC8gRERSMgkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDIwICk7CisJbXRkY3IoIDB4MTEsIDB4MkQxMjIwMDAgKTsKKworCS8qIFNFVCBNQ0lGMF9DT0RUICAgRGllIFRlcm1pbmF0aW9uIE9uCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwMjYgKTsKKwlpZiAoeXVjY2FfZGltbXMgPT0gMikKKwkJbXRkY3IoIDB4MTEsIDB4MkE4MDAwMjEgKTsKKwllbHNlIGlmICh5dWNjYV9kaW1tcyA9PSAxKQorCQltdGRjciggMHgxMSwgMHgwMjgwMDAyMSApOworCisJLyogT24tRGllIFRlcm1pbmF0aW9uIGZvciBCYW5rIDAJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDAyMiApOworCWlmICh5dWNjYV9kaW1tcyA9PSAyKQorCQltdGRjciggMHgxMSwgMHgxODAwMDAwMCApOworCWVsc2UgaWYgKHl1Y2NhX2RpbW1zID09IDEpCisJCW10ZGNyKCAweDExLCAweDA2MDAwMDAwICk7CisKKwkvKglPbi1EaWUgVGVybWluYXRpb24gZm9yIEJhbmsgMQkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDIzICk7CisJaWYgKHl1Y2NhX2RpbW1zID09IDIpCisJCW10ZGNyKCAweDExLCAweDE4MDAwMDAwICk7CisJZWxzZSBpZiAoeXVjY2FfZGltbXMgPT0gMSkKKwkJbXRkY3IoIDB4MTEsIDB4MDE4MDAwMDAgKTsKKworCS8qCU9uLURpZSBUZXJtaW5hdGlvbiBmb3IgQmFuayAyCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwMjQgKTsKKwlpZiAoeXVjY2FfZGltbXMgPT0gMikKKwkJbXRkY3IoIDB4MTEsIDB4MDE4MDAwMDAgKTsKKwllbHNlIGlmICh5dWNjYV9kaW1tcyA9PSAxKQorCQltdGRjciggMHgxMSwgMHgwMDAwMDAwMCApOworCisJLyoJT24tRGllIFRlcm1pbmF0aW9uIGZvciBCYW5rIDMJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDAyNSApOworCWlmICh5dWNjYV9kaW1tcyA9PSAyKQorCQltdGRjciggMHgxMSwgMHgwMTgwMDAwMCApOworCWVsc2UgaWYgKHl1Y2NhX2RpbW1zID09IDEpCisJCW10ZGNyKCAweDExLCAweDAwMDAwMDAwICk7CisKKwkvKiBSZWZyZXNoIFRpbWUgcmVnaXN0ZXIgKDB4MzApIFJlZnJlc2ggZXZlcnkgNy44MTI1dVMJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDAzMCApOworCW10ZGNyKCAweDExLCAweDA4MjAwMDAwICk7CisKKwkvKiBTRVQgTUNJRjBfTU1PREUgIAkgQ0wgNAkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDg4ICk7CisJbXRkY3IoIDB4MTEsIDB4MDAwMDA2NDIgKTsKKworCS8qIE1DSUYwX01FTU9ERQkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDg5ICk7CisJbXRkY3IoIDB4MTEsIDB4MDAwMDAwMDQgKTsKKworCS8qU0VUIE1DSUYwX01CMENGIAkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDQwICk7CisJbXRkY3IoIDB4MTEsIDB4MDAwMDAyMDEgKTsKKworCS8qIFNFVCBNQ0lGMF9NQjFDRiAJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA0NCApOworCW10ZGNyKCAweDExLCAweDAwMDAwMjAxICk7CisKKwkvKiBTRVQgTUNJRjBfTUIyQ0YgCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwNDggKTsKKwlpZiAoeXVjY2FfZGltbXMgPT0gMikKKwkJbXRkY3IoIDB4MTEsIDB4MDAwMDAyMDEgKTsKKwllbHNlIGlmICh5dWNjYV9kaW1tcyA9PSAxKQorCQltdGRjciggMHgxMSwgMHgwMDAwMDAwMCApOworCisJLyogU0VUIE1DSUYwX01CM0NGIAkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDRjICk7CisJaWYgKHl1Y2NhX2RpbW1zID09IDIpCisJCW10ZGNyKCAweDExLCAweDAwMDAwMjAxICk7CisJZWxzZSBpZiAoeXVjY2FfZGltbXMgPT0gMSkKKwkJbXRkY3IoIDB4MTEsIDB4MDAwMDAwMDAgKTsKKworCS8qIFNFVCBNQ0lGMF9JTklUUExSMCAgIyBOT1AJCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwNTAgKTsKKwltdGRjciggMHgxMSwgMHhCNTM4MDAwMCApOworCisJLyogU0VUIE1DSUYwX0lOSVRQTFIxICAjIFBSRQkJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA1MSApOworCW10ZGNyKCAweDExLCAweDgyMTAwNDAwICk7CisKKwkvKiBTRVQgTUNJRjBfSU5JVFBMUjIgICMgRU1SMgkJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA1MiApOworCW10ZGNyKCAweDExLCAweDgwODIwMDAwICk7CisKKwkvKiBTRVQgTUNJRjBfSU5JVFBMUjMgICMgRU1SMwkJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA1MyApOworCW10ZGNyKCAweDExLCAweDgwODMwMDAwICk7CisKKwkvKiBTRVQgTUNJRjBfSU5JVFBMUjQgICMgRU1SIERMTCBFTkFCTEUJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA1NCApOworCW10ZGNyKCAweDExLCAweDgwODEwMDAwICk7CisKKwkvKiBTRVQgTUNJRjBfSU5JVFBMUjUgICMgTVIgRExMIFJFU0VUCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwNTUgKTsKKwltdGRjciggMHgxMSwgMHg4MDgwMDU0MiApOworCisJLyogU0VUIE1DSUYwX0lOSVRQTFI2ICAjIFBSRQkJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA1NiApOworCW10ZGNyKCAweDExLCAweDgyMTAwNDAwICk7CisKKwkvKiBTRVQgTUNJRjBfSU5JVFBMUjcgICMgUmVmcmVzaAkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDU3ICk7CisJbXRkY3IoIDB4MTEsIDB4OEEwODAwMDAgKTsKKworCS8qIFNFVCBNQ0lGMF9JTklUUExSOCAgIyBSZWZyZXNoCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwNTggKTsKKwltdGRjciggMHgxMSwgMHg4QTA4MDAwMCApOworCisJLyogU0VUIE1DSUYwX0lOSVRQTFI5ICAjIFJlZnJlc2gJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA1OSApOworCW10ZGNyKCAweDExLCAweDhBMDgwMDAwICk7CisKKwkvKiBTRVQgTUNJRjBfSU5JVFBMUjEwICMgUmVmcmVzaAkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDVBICk7CisJbXRkY3IoIDB4MTEsIDB4OEEwODAwMDAgKTsKKworCS8qIFNFVCBNQ0lGMF9JTklUUExSMTEgIyBNUgkJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA1QiApOworCW10ZGNyKCAweDExLCAweDgwODAwNDQyICk7CisKKwkvKiBTRVQgTUNJRjBfSU5JVFBMUjEyICMgRU1SIE9DRCBEZWZhdWx0Ki8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA1QyApOworCW10ZGNyKCAweDExLCAweDgwODEwMzgwICk7CisKKwkvKiBTRVQgTUNJRjBfSU5JVFBMUjEzICMgRU1SIE9DRCBFeGl0CSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwNUQgKTsKKwltdGRjciggMHgxMSwgMHg4MDgxMDAwMCApOworCisJLyogMHg4MDogQWR2IEFkZHIgY2xvY2sgYnkgMTgwIGRlZwkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDgwICk7CisJbXRkY3IoIDB4MTEsIDB4ODAwMDAwMDAgKTsKKworCS8qIDB4MjE6IEV4aXQgc2VsZiByZWZyZXNoLCBzZXQgRENfRU4JKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDAyMSApOworCW10ZGNyKCAweDExLCAweDI4MDAwMDAwICk7CisKKwkvKiAweDgxOiBXcml0ZSBEUVMgQWR2IDkwICsgRnJhY3Rpb25hbCBEUVMgRGVsYXkJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA4MSApOworCW10ZGNyKCAweDExLCAweDgwMDAwODAwICk7CisKKwkvKiBNQ0lGMF9TRFRSMQkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDg1ICk7CisJbXRkY3IoIDB4MTEsIDB4ODAyMDEwMDAgKTsKKworCS8qIE1DSUYwX1NEVFIyCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwODYgKTsKKwltdGRjciggMHgxMSwgMHg0MjEwMzI0MiApOworCisJLyogTUNJRjBfU0RUUjMJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA4NyApOworCW10ZGNyKCAweDExLCAweDBDMTAwRDE0ICk7CisKKwkvKiBTRVQgTVEwX0IwQkFTICBiYXNlIGFkZHIgMDAwMDAwMDAgLyAyNTZNQgkqLworCW10ZGNyKCAweDQwLCAweDAwMDBGODAwICk7CisKKwkvKiBTRVQgTVEwX0IxQkFTICBiYXNlIGFkZHIgMTAwMDAwMDAgLyAyNTZNQgkqLworCW10ZGNyKCAweDQxLCAweDA0MDBGODAwICk7CisKKwkvKiBTRVQgTVEwX0IyQkFTICBiYXNlIGFkZHIgMjAwMDAwMDAgLyAyNTZNQgkqLworCWlmICh5dWNjYV9kaW1tcyA9PSAyKQorCQltdGRjciggMHg0MiwgMHgwODAwRjgwMCApOworCWVsc2UgaWYgKHl1Y2NhX2RpbW1zID09IDEpCisJCW10ZGNyKCAweDQyLCAweDAwMDAwMDAwICk7CisKKwkvKiBTRVQgTVEwX0IzQkFTICBiYXNlIGFkZHIgMzAwMDAwMDAgLyAyNTZNQgkqLworCWlmICh5dWNjYV9kaW1tcyA9PSAyKQorCQltdGRjciggMHg0MywgMHgwQzAwRjgwMCApOworCWVsc2UgaWYgKHl1Y2NhX2RpbW1zID09IDEpCisJCW10ZGNyKCAweDQzLCAweDAwMDAwMDAwICk7CisKKwkvKiBTRFJBTV9SUURDCSovCisJbXRkY3IoIDB4MTAsIDB4MDAwMDAwNzAgKTsKKwltdGRjciggMHgxMSwgMHg4MDAwMDAzRiApOworCisJLyogU0RSQU1fUkRDQwkqLworCW10ZGNyKCAweDEwLCAweDAwMDAwMDc4ICk7CisJbXRkY3IoIDB4MTEsIDB4ODAwMDAwMDAgKTsKKworCS8qIFNEUkFNX1JGREMJKi8KKwltdGRjciggMHgxMCwgMHgwMDAwMDA3NCApOworCW10ZGNyKCAweDExLCAweDAwMDAwMjIwICk7CisKKwlyZXR1cm4gKHl1Y2NhX2RpbW1zICogNTEyKSA8PCAyMDsKK30KKworbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQoreworCWxvbmcgZHJhbV9zaXplID0gMDsKKworCWRyYW1fc2l6ZSA9IGZpeGVkX3NkcmFtKCk7CisKKwlyZXR1cm4gZHJhbV9zaXplOworfQorCisjaWYgZGVmaW5lZChDRkdfRFJBTV9URVNUKQoraW50IHRlc3RkcmFtICh2b2lkKQoreworCXVpbnQgKnBzdGFydCA9ICh1aW50ICopIDB4MDAwMDAwMDA7CisJdWludCAqcGVuZCA9ICh1aW50ICopIDB4MDgwMDAwMDA7CisJdWludCAqcDsKKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykKKwkJKnAgPSAweGFhYWFhYWFhOworCisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CisJCWlmICgqcCAhPSAweGFhYWFhYWFhKSB7CisJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLCAodWludCkgcCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykKKwkJKnAgPSAweDU1NTU1NTU1OworCisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CisJCWlmICgqcCAhPSAweDU1NTU1NTU1KSB7CisJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLCAodWludCkgcCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHBjaV9wcmVfaW5pdAorICoKKyAqICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGp1c3QgcHJpb3IgdG8gcmVnaXN0ZXJpbmcgdGhlIGhvc2UgYW5kIGdpdmVzCisgKiAgdGhlIGJvYXJkIHRoZSBvcHBvcnR1bml0eSB0byBjaGVjayB0aGluZ3MuIFJldHVybmluZyBhIHZhbHVlIG9mIHplcm8KKyAqICBpbmRpY2F0ZXMgdGhhdCB0aGluZ3MgYXJlIGJhZCAmIFBDSSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4KKyAqCisgKglEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCisgKgkoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KKyAqCWNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ0ZHX1BDSV9QUkVfSU5JVCkKK2ludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSApCit7CisJdW5zaWduZWQgbG9uZyBzdHJhcDsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKglUaGUgeXVjY2EgYm9hcmQgaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgdGhlIGhvc3QgJiByZXF1aXJlcyB0aGUKKwkgKglQQ0kgYXJiaXRlciB0byBiZSBlbmFibGVkLgorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbWZzZHIoc2RyX3Nkc3RwMSwgc3RyYXApOworCWlmKCAoc3RyYXAgJiBTRFIwX1NEU1RQMV9QQUVfTUFTSykgPT0gMCApIHsKKwkJcHJpbnRmKCJQQ0k6IFNEUjBfU1RSUDFbJTA4bFhdIC0gUENJIEFyYml0ZXIgZGlzYWJsZWQuXG4iLHN0cmFwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENGR19QQ0lfUFJFX0lOSVQpICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgcGNpX3RhcmdldF9pbml0CisgKgorICoJVGhlIGJvb3RzdHJhcCBjb25maWd1cmF0aW9uIHByb3ZpZGVzIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwY2kKKyAqCWluYm91bmQgbWFwIChQSU0pLiBCdXQgdGhlIGJvb3RzdHJhcCBjb25maWcgY2hvaWNlcyBhcmUgbGltaXRlZCBhbmQKKyAqCW1heSBub3QgYmUgc3VmZmljaWVudCBmb3IgYSBnaXZlbiBib2FyZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDRkdfUENJX1RBUkdFVF9JTklUKQordm9pZCBwY2lfdGFyZ2V0X2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSApCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICogRGlzYWJsZSBldmVyeXRoaW5nCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlvdXQzMnIoIFBDSVgwX1BJTTBTQSwgMCApOyAvKiBkaXNhYmxlICovCisJb3V0MzJyKCBQQ0lYMF9QSU0xU0EsIDAgKTsgLyogZGlzYWJsZSAqLworCW91dDMyciggUENJWDBfUElNMlNBLCAwICk7IC8qIGRpc2FibGUgKi8KKwlvdXQzMnIoIFBDSVgwX0VST01CQSwgMCApOyAvKiBkaXNhYmxlIGV4cGFuc2lvbiByb20gKi8KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiBNYXAgYWxsIG9mIFNEUkFNIHRvIFBDSSBhZGRyZXNzIDB4MDAwMF8wMDAwLiBOb3RlIHRoYXQgdGhlIDQ0MAorCSAqIHN0cmFwcGluZyBvcHRpb25zIHRvIG5vdCBzdXBwb3J0IHNpemVzIHN1Y2ggYXMgMTI4LzI1NiBNQi4KKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW91dDMyciggUENJWDBfUElNMExBTCwgQ0ZHX1NEUkFNX0JBU0UgKTsKKwlvdXQzMnIoIFBDSVgwX1BJTTBMQUgsIDAgKTsKKwlvdXQzMnIoIFBDSVgwX1BJTTBTQSwgfihnZC0+cmFtX3NpemUgLSAxKSB8IDEgKTsKKwlvdXQzMnIoIFBDSVgwX0JBUjAsIDAgKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiBQcm9ncmFtIHRoZSBib2FyZCdzIHN1YnN5c3RlbSBpZC92ZW5kb3IgaWQKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW91dDE2ciggUENJWDBfU0JTWVNWSUQsIENGR19QQ0lfU1VCU1lTX1ZFTkRPUklEICk7CisJb3V0MTZyKCBQQ0lYMF9TQlNZU0lELCBDRkdfUENJX1NVQlNZU19ERVZJQ0VJRCApOworCisJb3V0MTZyKCBQQ0lYMF9DTUQsIGluMTZyKFBDSVgwX0NNRCkgfCBQQ0lfQ09NTUFORF9NRU1PUlkgKTsKK30KKyNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ0ZHX1BDSV9UQVJHRVRfSU5JVCkgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgaXNfcGNpX2hvc3QKKyAqCisgKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHBjaSBzY2FuIHNob3VsZCBiZQorICoJcGVyZm9ybWVkLiBXaXRoIHZhcmlvdXMgaGFyZHdhcmUgZW52aXJvbm1lbnRzIChlc3BlY2lhbGx5IGNQQ0kgYW5kCisgKglQUE1DKSBpdCdzIGluc3VmZmljaWVudCB0byBkZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSBhcmJpdGVyIGVuYWJsZQorICoJYml0IGluIHRoZSBzdHJhcCByZWdpc3Rlciwgb3IgZ2VuZXJpYyBob3N0L2FkYXB0ZXIgYXNzdW1wdGlvbnMuCisgKgorICoJUmF0aGVyIHRoYW4gaGFyZC1jb2RlIGEgYmFkIGFzc3VtcHRpb24gaW4gdGhlIGdlbmVyYWwgNDQwIGNvZGUsIHRoZQorICoJNDQwIHBjaSBjb2RlIHJlcXVpcmVzIHRoZSBib2FyZCB0byBkZWNpZGUgYXQgcnVudGltZS4KKyAqCisgKglSZXR1cm4gMCBmb3IgYWRhcHRlciBtb2RlLCBub24temVybyBmb3IgaG9zdCAobW9uYXJjaCkgbW9kZS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJLyogVGhlIHl1Y2NhIGJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCisJcmV0dXJuIDE7Cit9CisKKworaW50IHl1Y2NhX3BjaWVfY2FyZF9wcmVzZW50KGludCBwb3J0KQoreworCXUxNiByZWc7CisKKwlyZWcgPSBpbl9iZTE2KCh1MTYgKilGUEdBX1JFRzFDKTsKKwlzd2l0Y2gocG9ydCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICEocmVnICYgRlBHQV9SRUcxQ19QRTBfUFJTTlQpOworCWNhc2UgMToKKwkJcmV0dXJuICEocmVnICYgRlBHQV9SRUcxQ19QRTFfUFJTTlQpOworCWNhc2UgMjoKKwkJcmV0dXJuICEocmVnICYgRlBHQV9SRUcxQ19QRTJfUFJTTlQpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIEZvciB0aGUgZ2l2ZW4gc2xvdCwgc2V0IHJvb3Rwb2ludCBtb2RlLCBzZW5kIHBvd2VyIHRvIHRoZSBzbG90LAorICogdHVybiBvbiB0aGUgZ3JlZW4gTEVEIGFuZCB0dXJuIG9mZiB0aGUgeWVsbG93IExFRCwgZW5hYmxlIHRoZSBjbG9jaworICogYW5kIHR1cm4gb2ZmIHJlc2V0LgorICovCit2b2lkIHl1Y2NhX3NldHVwX3BjaWVfZnBnYV9yb290cG9pbnQoaW50IHBvcnQpCit7CisJdTE2IHBvd2VyLCBjbG9jaywgZ3JlZW5fbGVkLCB5ZWxsb3dfbGVkLCByZXNldF9vZmYsIHJvb3Rwb2ludCwgZW5kcG9pbnQ7CisKKwlzd2l0Y2gocG9ydCkgeworCWNhc2UgMDoKKwkJcm9vdHBvaW50ICAgPSBGUEdBX1JFRzFDX1BFMF9ST09UUE9JTlQ7CisJCWVuZHBvaW50ICAgID0gMDsKKwkJcG93ZXIgCSAgICA9IEZQR0FfUkVHMUFfUEUwX1BXUk9OOworCQlncmVlbl9sZWQgICA9IEZQR0FfUkVHMUFfUEUwX0dMRUQ7CisJCWNsb2NrIAkgICAgPSBGUEdBX1JFRzFBX1BFMF9SRUZDTEtfRU5BQkxFOworCQl5ZWxsb3dfbGVkICA9IEZQR0FfUkVHMUFfUEUwX1lMRUQ7CisJCXJlc2V0X29mZiAgID0gRlBHQV9SRUcxQ19QRTBfUEVSU1Q7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcm9vdHBvaW50ICAgPSAwOworCQllbmRwb2ludCAgICA9IEZQR0FfUkVHMUNfUEUxX0VORFBPSU5UOworCQlwb3dlciAJICAgID0gRlBHQV9SRUcxQV9QRTFfUFdST047CisJCWdyZWVuX2xlZCAgID0gRlBHQV9SRUcxQV9QRTFfR0xFRDsKKwkJY2xvY2sgCSAgICA9IEZQR0FfUkVHMUFfUEUxX1JFRkNMS19FTkFCTEU7CisJCXllbGxvd19sZWQgID0gRlBHQV9SRUcxQV9QRTFfWUxFRDsKKwkJcmVzZXRfb2ZmICAgPSBGUEdBX1JFRzFDX1BFMV9QRVJTVDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyb290cG9pbnQgICA9IDA7CisJCWVuZHBvaW50ICAgID0gRlBHQV9SRUcxQ19QRTJfRU5EUE9JTlQ7CisJCXBvd2VyIAkgICAgPSBGUEdBX1JFRzFBX1BFMl9QV1JPTjsKKwkJZ3JlZW5fbGVkICAgPSBGUEdBX1JFRzFBX1BFMl9HTEVEOworCQljbG9jayAJICAgID0gRlBHQV9SRUcxQV9QRTJfUkVGQ0xLX0VOQUJMRTsKKwkJeWVsbG93X2xlZCAgPSBGUEdBX1JFRzFBX1BFMl9ZTEVEOworCQlyZXNldF9vZmYgICA9IEZQR0FfUkVHMUNfUEUyX1BFUlNUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlvdXRfYmUxNigodTE2ICopRlBHQV9SRUcxQSwKKwkJIH4ocG93ZXIgfCBjbG9jayB8IGdyZWVuX2xlZCkgJgorCQkgKHllbGxvd19sZWQgfCBpbl9iZTE2KCh1MTYgKilGUEdBX1JFRzFBKSkpOworCisJb3V0X2JlMTYoKHUxNiAqKUZQR0FfUkVHMUMsCisJCSB+KGVuZHBvaW50IHwgcmVzZXRfb2ZmKSAmCisJCSAocm9vdHBvaW50IHwgaW5fYmUxNigodTE2ICopRlBHQV9SRUcxQykpKTsKKwkvKgorCSAqIExlYXZlIGRldmljZSBpbiByZXNldCBmb3IgYSB3aGlsZSBhZnRlciBwb3dlcmluZyBvbiB0aGUKKwkgKiBzbG90IHRvIGdpdmUgaXQgYSBjaGFuY2UgdG8gaW5pdGlhbGl6ZS4KKwkgKi8KKwl1ZGVsYXkoMjUwICogMTAwMCk7CisKKwlvdXRfYmUxNigodTE2ICopRlBHQV9SRUcxQywgcmVzZXRfb2ZmIHwgaW5fYmUxNigodTE2ICopRlBHQV9SRUcxQykpOworfQorLyoKKyAqIEZvciB0aGUgZ2l2ZW4gc2xvdCwgc2V0IGVuZHBvaW50IG1vZGUsIHNlbmQgcG93ZXIgdG8gdGhlIHNsb3QsCisgKiB0dXJuIG9uIHRoZSBncmVlbiBMRUQgYW5kIHR1cm4gb2ZmIHRoZSB5ZWxsb3cgTEVELCBlbmFibGUgdGhlIGNsb2NrCisgKiAuSW4gZW5kIHBvaW50IG1vZGUgcmVzZXQgYml0IGlzICByZWFkIG9ubHkuCisgKi8KK3ZvaWQgeXVjY2Ffc2V0dXBfcGNpZV9mcGdhX2VuZHBvaW50KGludCBwb3J0KQoreworCXUxNiBwb3dlciwgY2xvY2ssIGdyZWVuX2xlZCwgeWVsbG93X2xlZCwgcmVzZXRfb2ZmLCByb290cG9pbnQsIGVuZHBvaW50OworCisJc3dpdGNoKHBvcnQpIHsKKwljYXNlIDA6CisJCXJvb3Rwb2ludCAgID0gRlBHQV9SRUcxQ19QRTBfUk9PVFBPSU5UOworCQllbmRwb2ludCAgICA9IDA7CisJCXBvd2VyIAkgICAgPSBGUEdBX1JFRzFBX1BFMF9QV1JPTjsKKwkJZ3JlZW5fbGVkICAgPSBGUEdBX1JFRzFBX1BFMF9HTEVEOworCQljbG9jayAJICAgID0gRlBHQV9SRUcxQV9QRTBfUkVGQ0xLX0VOQUJMRTsKKwkJeWVsbG93X2xlZCAgPSBGUEdBX1JFRzFBX1BFMF9ZTEVEOworCQlyZXNldF9vZmYgICA9IEZQR0FfUkVHMUNfUEUwX1BFUlNUOworCQlicmVhazsKKwljYXNlIDE6CisJCXJvb3Rwb2ludCAgID0gMDsKKwkJZW5kcG9pbnQgICAgPSBGUEdBX1JFRzFDX1BFMV9FTkRQT0lOVDsKKwkJcG93ZXIgCSAgICA9IEZQR0FfUkVHMUFfUEUxX1BXUk9OOworCQlncmVlbl9sZWQgICA9IEZQR0FfUkVHMUFfUEUxX0dMRUQ7CisJCWNsb2NrIAkgICAgPSBGUEdBX1JFRzFBX1BFMV9SRUZDTEtfRU5BQkxFOworCQl5ZWxsb3dfbGVkICA9IEZQR0FfUkVHMUFfUEUxX1lMRUQ7CisJCXJlc2V0X29mZiAgID0gRlBHQV9SRUcxQ19QRTFfUEVSU1Q7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcm9vdHBvaW50ICAgPSAwOworCQllbmRwb2ludCAgICA9IEZQR0FfUkVHMUNfUEUyX0VORFBPSU5UOworCQlwb3dlciAJICAgID0gRlBHQV9SRUcxQV9QRTJfUFdST047CisJCWdyZWVuX2xlZCAgID0gRlBHQV9SRUcxQV9QRTJfR0xFRDsKKwkJY2xvY2sgCSAgICA9IEZQR0FfUkVHMUFfUEUyX1JFRkNMS19FTkFCTEU7CisJCXllbGxvd19sZWQgID0gRlBHQV9SRUcxQV9QRTJfWUxFRDsKKwkJcmVzZXRfb2ZmICAgPSBGUEdBX1JFRzFDX1BFMl9QRVJTVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJb3V0X2JlMTYoKHUxNiAqKUZQR0FfUkVHMUEsCisJCSB+KHBvd2VyIHwgY2xvY2sgfCBncmVlbl9sZWQpICYKKwkJICh5ZWxsb3dfbGVkIHwgaW5fYmUxNigodTE2ICopRlBHQV9SRUcxQSkpKTsKKworCW91dF9iZTE2KCh1MTYgKilGUEdBX1JFRzFDLAorCQkgfihyb290cG9pbnQgfCByZXNldF9vZmYpICYKKwkJIChlbmRwb2ludCB8IGluX2JlMTYoKHUxNiAqKUZQR0FfUkVHMUMpKSk7Cit9CisKKworCitzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHBjaWVfaG9zZVszXSA9IHt7MH0sezB9LHswfX07CisKK3ZvaWQgcGNpZV9zZXR1cF9ob3Nlcyh2b2lkKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKwlpbnQgaSwgYnVzOworCisJLyoKKwkgKiBhc3N1bWUgd2UncmUgY2FsbGVkIGFmdGVyIHRoZSBQQ0lYIGhvc2UgaXMgaW5pdGlhbGl6ZWQsIHdoaWNoIHRha2VzCisJICogYnVzIElEIDAgYW5kIHRoZXJlZm9yZSBzdGFydCBudW1iZXJpbmcgUENJZSdzIGZyb20gMS4KKwkgKi8KKwlidXMgPSAxOworCWZvciAoaSA9IDA7IGkgPD0gMjsgaSsrKSB7CisJCS8qIENoZWNrIGZvciB5dWNjYSBjYXJkIHByZXNlbmNlICovCisJCWlmICgheXVjY2FfcGNpZV9jYXJkX3ByZXNlbnQoaSkpCisJCQljb250aW51ZTsKKworI2lmZGVmIFBDSUVfRU5EUE9JTlQKKyAJCXl1Y2NhX3NldHVwX3BjaWVfZnBnYV9lbmRwb2ludChpKTsKKyAJCWlmIChwcGM0NDBzcGVfaW5pdF9wY2llX2VuZHBvcnQoaSkpIHsKKyNlbHNlCisJCXl1Y2NhX3NldHVwX3BjaWVfZnBnYV9yb290cG9pbnQoaSk7CisJCWlmIChwcGM0NDBzcGVfaW5pdF9wY2llX3Jvb3Rwb3J0KGkpKSB7CisjZW5kaWYKKwkJCXByaW50ZigiUENJRSVkOiBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQlob3NlID0gJnBjaWVfaG9zZVtpXTsKKwkJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXM7CisJCWhvc2UtPmxhc3RfYnVzbm8gID0gYnVzOworCQlidXMrKzsKKworCQkvKiBzZXR1cCBtZW0gcmVzb3VyY2UgKi8KKwkJcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDAsCisJCQlDRkdfUENJRV9NRU1CQVNFICsgaSAqIENGR19QQ0lFX01FTVNJWkUsCisJCQlDRkdfUENJRV9NRU1CQVNFICsgaSAqIENGR19QQ0lFX01FTVNJWkUsCisJCQlDRkdfUENJRV9NRU1TSVpFLAorCQkJUENJX1JFR0lPTl9NRU0KKwkJCSk7CisJCWhvc2UtPnJlZ2lvbl9jb3VudCA9IDE7CisJCXBjaV9yZWdpc3Rlcl9ob3NlKGhvc2UpOworCisjaWZkZWYgUENJRV9FTkRQT0lOVAorCQlwcGM0NDBzcGVfc2V0dXBfcGNpZV9lbmRwb2ludChob3NlLCBpKTsKKwkJLyoKKwkJICogUmVzb24gZm9yIG5vIHNjYW5uaW5nIGlzIGVuZHBvaW50IGNhbiBub3QgZ2VuZXJhdGUKKwkJICogdXBzdHJlYW0gY29uZmlndXJhdGlvbiBhY2Nlc3Nlcy4KKwkJICovCisjZWxzZQorCQlwcGM0NDBzcGVfc2V0dXBfcGNpZV9yb290cG9pbnQoaG9zZSwgaSk7CisJCS8qCisJCSAqIENvbmZpZyBhY2Nlc3MgY2FuIG9ubHkgZ28gZG93biBzdHJlYW0KKwkJICovCisJCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOworI2VuZGlmCisJfQorfQorI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KKworaW50IG1pc2NfaW5pdF9mICh2b2lkKQoreworCXVpbnQgcmVnOworI2lmIGRlZmluZWQoQ09ORklHX1NUUkVTUykKKwl1aW50IGkgOworCXVpbnQgZGlzcDsKKyNlbmRpZgorCisJb3V0MTYoRlBHQV9SRUcxMCwgKGluMTYoRlBHQV9SRUcxMCkgJgorCQkJfihGUEdBX1JFRzEwX0FVVE9fTkVHX0RJU3xGUEdBX1JFRzEwX1JFU0VUX0VUSCkpIHwKKwkJCQlGUEdBX1JFRzEwXzEwTUhaX0VOQUJMRSB8CisJCQkJRlBHQV9SRUcxMF8xMDBNSFpfRU5BQkxFIHwKKwkJCQlGUEdBX1JFRzEwX0dJR0FCSVRfRU5BQkxFIHwKKwkJCQlGUEdBX1JFRzEwX0ZVTExfRFVQTEVYICk7CisKKwl1ZGVsYXkoMTAwMDApOwkvKiB3YWl0IDEwbXMgKi8KKworCW91dDE2KEZQR0FfUkVHMTAsIChpbjE2KEZQR0FfUkVHMTApIHwgRlBHQV9SRUcxMF9SRVNFVF9FVEgpKTsKKworCS8qIG1pbmltYWwgaW5pdCBmb3IgUENJZSAqLworCS8qIHBjaSBleHByZXNzIDAgRW5kcG9pbnQgTW9kZSAqLworCW1mc2RyKFNEUjBfUEUwRExQU0VULCByZWcpOworCXJlZyAmPSAofjB4MDA0MDAwMDApOworCW10c2RyKFNEUjBfUEUwRExQU0VULCByZWcpOworCS8qIHBjaSBleHByZXNzIDEgUm9vdHBvaW50ICBNb2RlICovCisJbWZzZHIoU0RSMF9QRTFETFBTRVQsIHJlZyk7CisJcmVnIHw9IDB4MDA0MDAwMDA7CisJbXRzZHIoU0RSMF9QRTFETFBTRVQsIHJlZyk7CisJLyogcGNpIGV4cHJlc3MgMiBSb290cG9pbnQgIE1vZGUgKi8KKwltZnNkcihTRFIwX1BFMkRMUFNFVCwgcmVnKTsKKwlyZWcgfD0gMHgwMDQwMDAwMDsKKwltdHNkcihTRFIwX1BFMkRMUFNFVCwgcmVnKTsKKworCW91dDE2KEZQR0FfUkVHMUMsKGluMTYgKEZQR0FfUkVHMUMpICYKKwkJCQl+RlBHQV9SRUcxQ19QRTBfUk9PVFBPSU5UICYKKwkJCQl+RlBHQV9SRUcxQ19QRTFfRU5EUE9JTlQgICYKKwkJCQl+RlBHQV9SRUcxQ19QRTJfRU5EUE9JTlQpKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NUUkVTUykKKwkvKgorCSAqIGFsbCB0aGlzIHNldHRpbmcgZG9uZSBieSBsaW51eCBvbmx5IG5lZWRlZCBieSBzdHJlc3MgYW4gY2hhcmFjLiB0ZXN0CisJICogcHJvY2VkdXJlCisJICogUENJZSAxIFJvb3Rwb2ludCBQQ0llMiBFbmRwb2ludAorCSAqIFBDSWUgMCBGSVIgUHJlLWVtcGhhc2lzIEZpbHRlciBDb2VmZmljaWVudHMgJiBUcmFuc21pdCBEcml2ZXIKKwkgKiBQb3dlciBMZXZlbAorCSAqLworCWZvciAoaSA9IDAsIGRpc3AgPSAwOyBpIDwgODsgaSsrLCBkaXNwICs9IDMpIHsKKwkJbWZzZHIoU0RSMF9QRTBIU1NTRVQxTDAgKyBkaXNwLCByZWcpOworCQlyZWcgfD0gMHgzMzAwMDAwMDsKKwkJbXRzZHIoU0RSMF9QRTBIU1NTRVQxTDAgKyBkaXNwLCByZWcpOworCX0KKworCS8qCisJICogUENJZSAxIEZJUiBQcmUtZW1waGFzaXMgRmlsdGVyIENvZWZmaWNpZW50cyAmIFRyYW5zbWl0IERyaXZlcgorCSAqIFBvd2VyIExldmVsCisJICovCisJZm9yIChpID0gMCwgZGlzcCA9IDA7IGkgPCA0OyBpKyssIGRpc3AgKz0gMykgeworCQltZnNkcihTRFIwX1BFMUhTU1NFVDFMMCArIGRpc3AsIHJlZyk7CisJCXJlZyB8PSAweDMzMDAwMDAwOworCQltdHNkcihTRFIwX1BFMUhTU1NFVDFMMCArIGRpc3AsIHJlZyk7CisJfQorCisJLyoKKwkgKiBQQ0lFIDIgRklSIFByZS1lbXBoYXNpcyBGaWx0ZXIgQ29lZmZpY2llbnRzICYgVHJhbnNtaXQgRHJpdmVyCisJICogUG93ZXIgTGV2ZWwKKwkgKi8KKwlmb3IgKGkgPSAwLCBkaXNwID0gMDsgaSA8IDQ7IGkrKywgZGlzcCArPSAzKSB7CisJCW1mc2RyKFNEUjBfUEUySFNTU0VUMUwwICsgZGlzcCwgcmVnKTsKKwkJcmVnIHw9IDB4MzMwMDAwMDA7CisJCW10c2RyKFNEUjBfUEUySFNTU0VUMUwwICsgZGlzcCwgcmVnKTsKKwl9CisKKwlyZWcgPSAweDIxMjQyMjIyOworCW10c2RyKFNEUjBfUEUyVVRMU0VUMSwgcmVnKTsKKwlyZWcgPSAweDExMDAwMDAwOworCW10c2RyKFNEUjBfUEUyVVRMU0VUMiwgcmVnKTsKKwkvKiBwY2kgZXhwcmVzcyAxIEVuZHBvaW50ICBNb2RlICovCisJcmVnID0gMHgwMDAwNDAwMDsKKwltdHNkcihTRFIwX1BFMkRMUFNFVCwgcmVnKTsKKworCW10c2RyKFNEUjBfVUFSVDEsIDB4MjA4MDAwNWEpOwkvKiBwYXRjaCBmb3IgVEcgKi8KKyNlbmRpZgorCXJldHVybiAwOworfQorCit2b2lkIGZwZ2FfaW5pdCh2b2lkKQoreworCS8qCisJICogYnkgZGVmYXVsdCBzZHJhbSBhY2Nlc3MgaXMgZGlzYWJsZWQgYnkgZnBnYQorCSAqLworCW91dDE2KEZQR0FfUkVHMTAsIChpbjE2IChGUEdBX1JFRzEwKSB8CisJCQkJRlBHQV9SRUcxMF9TRFJBTV9FTkFCTEUgfAorCQkJCUZQR0FfUkVHMTBfRU5BQkxFX0RJU1BMQVkgKSk7CisKKwlyZXR1cm47Cit9CisKKyNpZmRlZiBDT05GSUdfUE9TVAorLyoKKyAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cworICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCisgKi8KK2ludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQoreworCXJldHVybiAoY3RybGMoKSk7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBvbmJvYXJkX3BjaV9hcmJpdGVyX3NlbGVjdGVkID0+IGZyb20gRVBMRAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IG9uYm9hcmRfcGNpX2FyYml0ZXJfc2VsZWN0ZWQoaW50IGNvcmVfcGNpKQoreworI2lmIDAKKwl1bnNpZ25lZCBsb25nIG9uYm9hcmRfcGNpX2FyYml0ZXJfc2VsOworCisJb25ib2FyZF9wY2lfYXJiaXRlcl9zZWwgPSBpbjE2KEZQR0FfUkVHMCkgJiBGUEdBX1JFRzBfRVhUX0FSQl9TRUxfTUFTSzsKKworCWlmIChvbmJvYXJkX3BjaV9hcmJpdGVyX3NlbCA9PSBGUEdBX1JFRzBfRVhUX0FSQl9TRUxfRVhURVJOQUwpCisJCXJldHVybiAoQk9BUkRfT1BUSU9OX1NFTEVDVEVEKTsKKwllbHNlCisjZW5kaWYKKwlyZXR1cm4gKEJPQVJEX09QVElPTl9OT1RfU0VMRUNURUQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IHBwY01mY3ByLgorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordW5zaWduZWQgbG9uZyBwcGNNZmNwcih1bnNpZ25lZCBsb25nIGNwcl9yZWcpCit7CisJdW5zaWduZWQgbG9uZyBtc3I7CisJdW5zaWduZWQgbG9uZyBjcHJfY2ZnYWRkcl90ZW1wOworCXVuc2lnbmVkIGxvbmcgY3ByX3ZhbHVlOworCisJbXNyID0gKG1mbXNyICgpICYgfihNU1JfRUUpKTsKKwljcHJfY2ZnYWRkcl90ZW1wID0gIG1mZGNyKENQUjBfQ0ZHQUREUik7CisJbXRkY3IoQ1BSMF9DRkdBRERSLCBjcHJfcmVnKTsKKwljcHJfdmFsdWUgPSAgbWZkY3IoQ1BSMF9DRkdEQVRBKTsKKwltdGRjcihDUFIwX0NGR0FERFIsIGNwcl9jZmdhZGRyX3RlbXApOworCW10bXNyKG1zcik7CisKKwlyZXR1cm4gKGNwcl92YWx1ZSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5kaXJlY3QgQWNjZXNzIG9mIHRoZSBTeXN0ZW0gRENSJ3MgKFNEUikKK3wgcHBjTWZzZHIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3Vuc2lnbmVkIGxvbmcgcHBjTWZzZHIodW5zaWduZWQgbG9uZyBzZHJfcmVnKQoreworCXVuc2lnbmVkIGxvbmcgbXNyOworCXVuc2lnbmVkIGxvbmcgc2RyX2NmZ2FkZHJfdGVtcDsKKwl1bnNpZ25lZCBsb25nIHNkcl92YWx1ZTsKKworCW1zciA9IChtZm1zciAoKSAmIH4oTVNSX0VFKSk7CisJc2RyX2NmZ2FkZHJfdGVtcCA9ICBtZmRjcihTRFIwX0NGR0FERFIpOworCW10ZGNyKFNEUjBfQ0ZHQUREUiwgc2RyX3JlZyk7CisJc2RyX3ZhbHVlID0gIG1mZGNyKFNEUjBfQ0ZHREFUQSk7CisJbXRkY3IoU0RSMF9DRkdBRERSLCBzZHJfY2ZnYWRkcl90ZW1wKTsKKwltdG1zcihtc3IpOworCisJcmV0dXJuIChzZHJfdmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95dWNjYS95dWNjYS5oIGIvYm9hcmQvYW1jYy95dWNjYS95dWNjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMTMwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hbWNjL3l1Y2NhL3l1Y2NhLmgKQEAgLTAsMCArMSwzNjYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX1lVQ0NBX0hfCisjZGVmaW5lIF9fWVVDQ0FfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IERlZmluZXMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBUTVJfRlJFUV9FWFQJCTI1MDAwMDAwCisjZGVmaW5lIEJPQVJEX1VBUlRfQ0xPQ0sJMTEwNTkyMDAKKworI2RlZmluZSBCT0FSRF9PUFRJT05fU0VMRUNURUQJCTEKKyNkZWZpbmUgQk9BUkRfT1BUSU9OX05PVF9TRUxFQ1RFRAkwCisKKyNkZWZpbmUgRU5HSU5FRVJJTkdfQ0xPQ0tfQ0hFQ0tJTkcgImNsa19jaGsiCisjZGVmaW5lIEVOR0lORUVSSU5HX0VYVEVSTkFMX0NMT0NLICJleHRfY2xrIgorCisjZGVmaW5lIEVOR0lORUVSSU5HX0NMT0NLX0NIRUNLSU5HX0RBVEEJMQorI2RlZmluZSBFTkdJTkVFUklOR19FWFRFUk5BTF9DTE9DS19EQVRBCTIKKworLyogZXRoZXJuZXQgZGVmaW5pdGlvbiAqLworI2RlZmluZSBNQVhfRU5FVE1PREVfUEFSTQkzCisjZGVmaW5lIEVORVRNT0RFX05FRwkJMAorI2RlZmluZSBFTkVUTU9ERV9TUEVFRAkJMQorI2RlZmluZSBFTkVUTU9ERV9EVVBMRVgJCTIKKworI2RlZmluZSBFTkVUTU9ERV9BVVRPTkVHCTAKKyNkZWZpbmUgRU5FVE1PREVfTk9fQVVUT05FRwkxCisjZGVmaW5lIEVORVRNT0RFXzEwCQkyCisjZGVmaW5lIEVORVRNT0RFXzEwMAkJMworI2RlZmluZSBFTkVUTU9ERV8xMDAwCQk0CisjZGVmaW5lIEVORVRNT0RFX0hBTEYJCTUKKyNkZWZpbmUgRU5FVE1PREVfRlVMTAkJNgorCisjZGVmaW5lIE5VTV9UTEJfRU5UUklFUyAgICAgICAgICA2NAorCisvKiBNSUNST04gU1BEIEpFREVDIElEIENvZGUgKGZpcnN0IGJ5dGUpIC0gU1BEIGRhdGEgYnl0ZSBbNjRdICovCisjZGVmaW5lIE1JQ1JPTl9TUERfSkVERUNfSUQgMHgyYworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRMQiBzcGVjaWZpYyBkZWZpbmVzLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBUTEJfMjU2TUJfQUxJR05fTUFTSwkweEYwMDAwMDAwCisjZGVmaW5lIFRMQl8xNk1CX0FMSUdOX01BU0sJMHhGRjAwMDAwMAorI2RlZmluZSBUTEJfMU1CX0FMSUdOX01BU0sJMHhGRkYwMDAwMAorI2RlZmluZSBUTEJfMjU2S0JfQUxJR05fTUFTSwkweEZGRkMwMDAwCisjZGVmaW5lIFRMQl82NEtCX0FMSUdOX01BU0sJMHhGRkZGMDAwMAorI2RlZmluZSBUTEJfMTZLQl9BTElHTl9NQVNLCTB4RkZGRkMwMDAKKyNkZWZpbmUgVExCXzRLQl9BTElHTl9NQVNLCTB4RkZGRkYwMDAKKyNkZWZpbmUgVExCXzFLQl9BTElHTl9NQVNLCTB4RkZGRkZDMDAKKyNkZWZpbmUgVExCXzI1Nk1CX1NJWkUJCTB4MTAwMDAwMDAKKyNkZWZpbmUgVExCXzE2TUJfU0laRQkJMHgwMTAwMDAwMAorI2RlZmluZSBUTEJfMU1CX1NJWkUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgVExCXzI1NktCX1NJWkUJCTB4MDAwNDAwMDAKKyNkZWZpbmUgVExCXzY0S0JfU0laRQkJMHgwMDAxMDAwMAorI2RlZmluZSBUTEJfMTZLQl9TSVpFCQkweDAwMDA0MDAwCisjZGVmaW5lIFRMQl80S0JfU0laRQkJMHgwMDAwMTAwMAorI2RlZmluZSBUTEJfMUtCX1NJWkUJCTB4MDAwMDA0MDAKKworI2RlZmluZSBUTEJfV09SRDBfRVBOX01BU0sJMHhGRkZGRkMwMAorI2RlZmluZSBUTEJfV09SRDBfRVBOX0VOQ09ERShuKSAoKCh1bnNpZ25lZCBsb25nKShuKSkmMHhGRkZGRkMwMCkKKyNkZWZpbmUgVExCX1dPUkQwX0VQTl9ERUNPREUobikgKCgodW5zaWduZWQgbG9uZykobikpJjB4RkZGRkZDMDApCisjZGVmaW5lIFRMQl9XT1JEMF9WX01BU0sJMHgwMDAwMDIwMAorI2RlZmluZSBUTEJfV09SRDBfVl9FTkFCTEUJMHgwMDAwMDIwMAorI2RlZmluZSBUTEJfV09SRDBfVl9ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQwX1RTX01BU0sJMHgwMDAwMDEwMAorI2RlZmluZSBUTEJfV09SRDBfVFNfMQkJMHgwMDAwMDEwMAorI2RlZmluZSBUTEJfV09SRDBfVFNfMAkJMHgwMDAwMDAwMAorI2RlZmluZSBUTEJfV09SRDBfU0laRV9NQVNLCTB4MDAwMDAwRjAKKyNkZWZpbmUgVExCX1dPUkQwX1NJWkVfMUtCCTB4MDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQwX1NJWkVfNEtCCTB4MDAwMDAwMTAKKyNkZWZpbmUgVExCX1dPUkQwX1NJWkVfMTZLQgkweDAwMDAwMDIwCisjZGVmaW5lIFRMQl9XT1JEMF9TSVpFXzY0S0IJMHgwMDAwMDAzMAorI2RlZmluZSBUTEJfV09SRDBfU0laRV8yNTZLQgkweDAwMDAwMDQwCisjZGVmaW5lIFRMQl9XT1JEMF9TSVpFXzFNQgkweDAwMDAwMDUwCisjZGVmaW5lIFRMQl9XT1JEMF9TSVpFXzE2TUIJMHgwMDAwMDA3MAorI2RlZmluZSBUTEJfV09SRDBfU0laRV8yNTZNQgkweDAwMDAwMDkwCisjZGVmaW5lIFRMQl9XT1JEMF9UUEFSX01BU0sJMHgwMDAwMDAwRgorI2RlZmluZSBUTEJfV09SRDBfVFBBUl9FTkNPREUobikgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDBGKTw8MCkKKyNkZWZpbmUgVExCX1dPUkQwX1RQQVJfREVDT0RFKG4pICgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjApJjB4MEYpCisKKyNkZWZpbmUgVExCX1dPUkQxX1JQTl9NQVNLCTB4RkZGRkZDMDAKKyNkZWZpbmUgVExCX1dPUkQxX1JQTl9FTkNPREUobikgKCgodW5zaWduZWQgbG9uZykobikpJjB4RkZGRkZDMDApCisjZGVmaW5lIFRMQl9XT1JEMV9SUE5fREVDT0RFKG4pICgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweEZGRkZGQzAwKQorI2RlZmluZSBUTEJfV09SRDFfUEFSMV9NQVNLCTB4MDAwMDAzMDAKKyNkZWZpbmUgVExCX1dPUkQxX1BBUjFfRU5DT0RFKG4pICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMyk8PDgpCisjZGVmaW5lIFRMQl9XT1JEMV9QQVIxX0RFQ09ERShuKSAoKCgodW5zaWduZWQgbG9uZykobikpPj44KSYweDAzKQorI2RlZmluZSBUTEJfV09SRDFfUEFSMV8wCTB4MDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQxX1BBUjFfMQkweDAwMDAwMTAwCisjZGVmaW5lIFRMQl9XT1JEMV9QQVIxXzIJMHgwMDAwMDIwMAorI2RlZmluZSBUTEJfV09SRDFfUEFSMV8zCTB4MDAwMDAzMDAKKyNkZWZpbmUgVExCX1dPUkQxX0VSUE5fTUFTSwkweDAwMDAwMDBGCisjZGVmaW5lIFRMQl9XT1JEMV9FUlBOX0VOQ09ERShuKSAoKCgodW5zaWduZWQgbG9uZykobikpJjB4MEYpPDwwKQorI2RlZmluZSBUTEJfV09SRDFfRVJQTl9ERUNPREUobikgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MCkmMHgwRikKKworI2RlZmluZSBUTEJfV09SRDJfUEFSMl9NQVNLCTB4QzAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQyX1BBUjJfRU5DT0RFKG4pICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMyk8PDMwKQorI2RlZmluZSBUTEJfV09SRDJfUEFSMl9ERUNPREUobikgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MzApJjB4MDMpCisjZGVmaW5lIFRMQl9XT1JEMl9QQVIyXzAJMHgwMDAwMDAwMAorI2RlZmluZSBUTEJfV09SRDJfUEFSMl8xCTB4NDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQyX1BBUjJfMgkweDgwMDAwMDAwCisjZGVmaW5lIFRMQl9XT1JEMl9QQVIyXzMJMHhDMDAwMDAwMAorI2RlZmluZSBUTEJfV09SRDJfVTBfTUFTSwkweDAwMDA4MDAwCisjZGVmaW5lIFRMQl9XT1JEMl9VMF9FTkFCTEUJMHgwMDAwODAwMAorI2RlZmluZSBUTEJfV09SRDJfVTBfRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIFRMQl9XT1JEMl9VMV9NQVNLCTB4MDAwMDQwMDAKKyNkZWZpbmUgVExCX1dPUkQyX1UxX0VOQUJMRQkweDAwMDA0MDAwCisjZGVmaW5lIFRMQl9XT1JEMl9VMV9ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQyX1UyX01BU0sJMHgwMDAwMjAwMAorI2RlZmluZSBUTEJfV09SRDJfVTJfRU5BQkxFCTB4MDAwMDIwMDAKKyNkZWZpbmUgVExCX1dPUkQyX1UyX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBUTEJfV09SRDJfVTNfTUFTSwkweDAwMDAxMDAwCisjZGVmaW5lIFRMQl9XT1JEMl9VM19FTkFCTEUJMHgwMDAwMTAwMAorI2RlZmluZSBUTEJfV09SRDJfVTNfRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIFRMQl9XT1JEMl9XX01BU0sJMHgwMDAwMDgwMAorI2RlZmluZSBUTEJfV09SRDJfV19FTkFCTEUJMHgwMDAwMDgwMAorI2RlZmluZSBUTEJfV09SRDJfV19ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQyX0lfTUFTSwkweDAwMDAwNDAwCisjZGVmaW5lIFRMQl9XT1JEMl9JX0VOQUJMRQkweDAwMDAwNDAwCisjZGVmaW5lIFRMQl9XT1JEMl9JX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBUTEJfV09SRDJfTV9NQVNLCTB4MDAwMDAyMDAKKyNkZWZpbmUgVExCX1dPUkQyX01fRU5BQkxFCTB4MDAwMDAyMDAKKyNkZWZpbmUgVExCX1dPUkQyX01fRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIFRMQl9XT1JEMl9HX01BU0sJMHgwMDAwMDEwMAorI2RlZmluZSBUTEJfV09SRDJfR19FTkFCTEUJMHgwMDAwMDEwMAorI2RlZmluZSBUTEJfV09SRDJfR19ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQyX0VfTUFTSwkweDAwMDAwMDgwCisjZGVmaW5lIFRMQl9XT1JEMl9FX0VOQUJMRQkweDAwMDAwMDgwCisjZGVmaW5lIFRMQl9XT1JEMl9FX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBUTEJfV09SRDJfVVhfTUFTSwkweDAwMDAwMDIwCisjZGVmaW5lIFRMQl9XT1JEMl9VWF9FTkFCTEUJMHgwMDAwMDAyMAorI2RlZmluZSBUTEJfV09SRDJfVVhfRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIFRMQl9XT1JEMl9VV19NQVNLCTB4MDAwMDAwMTAKKyNkZWZpbmUgVExCX1dPUkQyX1VXX0VOQUJMRQkweDAwMDAwMDEwCisjZGVmaW5lIFRMQl9XT1JEMl9VV19ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQyX1VSX01BU0sJMHgwMDAwMDAwOAorI2RlZmluZSBUTEJfV09SRDJfVVJfRU5BQkxFCTB4MDAwMDAwMDgKKyNkZWZpbmUgVExCX1dPUkQyX1VSX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBUTEJfV09SRDJfU1hfTUFTSwkweDAwMDAwMDA0CisjZGVmaW5lIFRMQl9XT1JEMl9TWF9FTkFCTEUJMHgwMDAwMDAwNAorI2RlZmluZSBUTEJfV09SRDJfU1hfRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIFRMQl9XT1JEMl9TV19NQVNLCTB4MDAwMDAwMDIKKyNkZWZpbmUgVExCX1dPUkQyX1NXX0VOQUJMRQkweDAwMDAwMDAyCisjZGVmaW5lIFRMQl9XT1JEMl9TV19ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgVExCX1dPUkQyX1NSX01BU0sJMHgwMDAwMDAwMQorI2RlZmluZSBUTEJfV09SRDJfU1JfRU5BQkxFCTB4MDAwMDAwMDEKKyNkZWZpbmUgVExCX1dPUkQyX1NSX0RJU0FCTEUJMHgwMDAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEJvYXJkIHNwZWNpZmljIGRlZmluZXMuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIE5PTkNBQ0hFX01FTU9SWV9TSVpFICAgICAoNjQqMTAyNCkKKyNkZWZpbmUgTk9OQ0FDSEVfQVJFQTBfRU5ET0ZGU0VUICg2NCoxMDI0KQorI2RlZmluZSBOT05DQUNIRV9BUkVBMV9FTkRPRkZTRVQgKDMyKjEwMjQpCisKKyNkZWZpbmUgRkxBU0hfU0VDVE9SU0laRQkweDAwMDEwMDAwCisKKy8qIFNEUkFNIE1JQ1JPTiAqLworI2RlZmluZSBTRFJBTV9NSUNST04JCTB4MkMKKworI2RlZmluZSBTRFJBTV9UUlVFCQkxCisjZGVmaW5lIFNEUkFNX0ZBTFNFCQkwCisjZGVmaW5lIFNEUkFNX0REUjEJCTEKKyNkZWZpbmUgU0RSQU1fRERSMgkJMgorI2RlZmluZSBTRFJBTV9OT05FCQkwCisjZGVmaW5lIE1BWERJTU1TCQkyCQkvKiBDaGFuZ2VzIGxlIDEyLzAxLzA1IHBvdXIgMS42ICovCisjZGVmaW5lIE1BWFJBTktTCQk0CQkvKiBDaGFuZ2VzIGxlIDEyLzAxLzA1IHBvdXIgMS42ICovCisjZGVmaW5lIE1BWEJBTktTUEVSRElNTQkJMgorI2RlZmluZSBNQVhSQU5LU1BFUkRJTU0JCTIKKyNkZWZpbmUgTUFYQlhDRgkJCTQJCS8qIENoYW5nZXMgbGUgMTIvMDEvMDUgcG91ciAxLjYgKi8KKyNkZWZpbmUgTUFYU0RSQU1NRU1PUlkJCTB4RkZGRkZGRkYJLyogNEdCICovCisjZGVmaW5lIEVSUk9SX1NUUl9MRU5HVEgJMjU2CisjZGVmaW5lIE1BWF9TUERfQllURVMJCTI1NgkJLyogTWF4IG51bWJlciBvZiBieXRlcyBvbiB0aGUgRElNTSdzIFNQRCBFRVBST00gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBTRFIgQ29uZmlndXJhdGlvbiByZWdpc3RlcnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFNlcmlhbCBEZXZpY2UgU3RyYXAgUmVnIDAgKi8KKyNkZWZpbmUgc2RyX3BzdHJwMAkweDAwNDAKKworI2RlZmluZQlTRFIwX1NEU1RQMV9FQkNfUk9NX0JTX01BU0sJMHgwMDAwMDA4MCAvKiBFQkMgQm9vdCBidXMgd2lkdGggTWFzayAqLworI2RlZmluZQlTRFIwX1NEU1RQMV9FQkNfUk9NX0JTXzE2QklUCTB4MDAwMDAwODAgLyogRUJDIDE2IEJpdHMgKi8KKyNkZWZpbmUJU0RSMF9TRFNUUDFfRUJDX1JPTV9CU184QklUCTB4MDAwMDAwMDAgLyogRUJDICA4IEJpdHMgKi8KKworI2RlZmluZQlTRFIwX1NEU1RQMV9CT09UX1NFTF9NQVNLCTB4MDAwODAwMDAgLyogQm9vdCBkZXZpY2UgU2VsZWN0aW9uIE1hc2sgKi8KKyNkZWZpbmUJU0RSMF9TRFNUUDFfQk9PVF9TRUxfRUJDCTB4MDAwMDAwMDAgLyogRUJDICovCisjZGVmaW5lCVNEUjBfU0RTVFAxX0JPT1RfU0VMX1BDSQkweDAwMDgwMDAwIC8qIFBDSSAqLworCisjZGVmaW5lCVNEUjBfU0RTVFAxX0VCQ19TSVpFX01BU0sJMHgwMDAwMDA2MCAvKiBCb290IHJvbSBzaXplIE1hc2sgKi8KKyNkZWZpbmUJU0RSMF9TRFNUUDFfQk9PVF9TSVpFXzE2TUIJMHgwMDAwMDA2MCAvKiAxNiBNQiAqLworI2RlZmluZQlTRFIwX1NEU1RQMV9CT09UX1NJWkVfOE1CCTB4MDAwMDAwNDAgLyogIDggTUIgKi8KKyNkZWZpbmUJU0RSMF9TRFNUUDFfQk9PVF9TSVpFXzRNQgkweDAwMDAwMDIwIC8qICA0IE1CICovCisjZGVmaW5lCVNEUjBfU0RTVFAxX0JPT1RfU0laRV8yTUIJMHgwMDAwMDAwMCAvKiAgMiBNQiAqLworCisvKiBTZXJpYWwgRGV2aWNlIEVuYWJsZWQgLSBBZGRyID0gMHhBOCAqLworI2RlZmluZSBTRFIwX1BTVFJQMF9CT09UU1RSQVBfSUlDX0E4X0VOIFNEUjBfUFNUUlAwX0JPT1RTVFJBUF9TRVRUSU5HUzUKKy8qIFNlcmlhbCBEZXZpY2UgRW5hYmxlZCAtIEFkZHIgPSAweEE0ICovCisjZGVmaW5lIFNEUjBfUFNUUlAwX0JPT1RTVFJBUF9JSUNfQTRfRU4gU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTNworCisvKiBQaW4gU3RyYXBzIFJlZyAqLworI2RlZmluZSBTRFIwX1BTVFJQMAkJCTB4MDA0MAorI2RlZmluZSBTRFIwX1BTVFJQMF9CT09UU1RSQVBfTUFTSwkweEUwMDAwMDAwICAvKiBTdHJhcCBCaXRzICovCisKKyNkZWZpbmUgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTMAkweDAwMDAwMDAwICAvKiBEZWZhdWx0IHN0cmFwIHNldHRpbmdzIDAgKi8KKyNkZWZpbmUgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTMQkweDIwMDAwMDAwICAvKiBEZWZhdWx0IHN0cmFwIHNldHRpbmdzIDEgKi8KKyNkZWZpbmUgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTMgkweDQwMDAwMDAwICAvKiBEZWZhdWx0IHN0cmFwIHNldHRpbmdzIDIgKi8KKyNkZWZpbmUgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTMwkweDYwMDAwMDAwICAvKiBEZWZhdWx0IHN0cmFwIHNldHRpbmdzIDMgKi8KKyNkZWZpbmUgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTNAkweDgwMDAwMDAwICAvKiBEZWZhdWx0IHN0cmFwIHNldHRpbmdzIDQgKi8KKyNkZWZpbmUgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTNQkweEEwMDAwMDAwICAvKiBEZWZhdWx0IHN0cmFwIHNldHRpbmdzIDUgKi8KKyNkZWZpbmUgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTNgkweEMwMDAwMDAwICAvKiBEZWZhdWx0IHN0cmFwIHNldHRpbmdzIDYgKi8KKyNkZWZpbmUgU0RSMF9QU1RSUDBfQk9PVFNUUkFQX1NFVFRJTkdTNwkweEUwMDAwMDAwICAvKiBEZWZhdWx0IHN0cmFwIHNldHRpbmdzIDcgKi8KKworLyogZnBnYXJlZyAtIGRlZmluZXMgYXJlIGluIGluY2x1ZGUvY29uZmlnL1lVQ0NBLmggKi8KKworI2RlZmluZSBTRFIwX0NVU1QwX0VORVQzX01BU0sJCTB4MDAwMDAwODAKKyNkZWZpbmUgU0RSMF9DVVNUMF9FTkVUM19DT1BQRVIJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9DVVNUMF9FTkVUM19GSUJFUgkJMHgwMDAwMDA4MAorI2RlZmluZSBTRFIwX0NVU1QwX1JHTUlJM19NQVNLCQkweDAwMDAwMDcwCisjZGVmaW5lIFNEUjBfQ1VTVDBfUkdNSUkzX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4Nyk8PDQpCisjZGVmaW5lIFNEUjBfQ1VTVDBfUkdNSUkzX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj40KSYweDA3KQorI2RlZmluZSBTRFIwX0NVU1QwX1JHTUlJM19ESVNBQgkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX0NVU1QwX1JHTUlJM19SVEJJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNEUjBfQ1VTVDBfUkdNSUkzX1JHTUlJCQkweDAwMDAwMDUwCisjZGVmaW5lIFNEUjBfQ1VTVDBfUkdNSUkzX1RCSQkJMHgwMDAwMDA2MAorI2RlZmluZSBTRFIwX0NVU1QwX1JHTUlJM19HTUlJCQkweDAwMDAwMDcwCisjZGVmaW5lIFNEUjBfQ1VTVDBfRU5FVDJfTUFTSwkJMHgwMDAwMDAwOAorI2RlZmluZSBTRFIwX0NVU1QwX0VORVQyX0NPUFBFUgkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX0NVU1QwX0VORVQyX0ZJQkVSCQkweDAwMDAwMDA4CisjZGVmaW5lIFNEUjBfQ1VTVDBfUkdNSUkyX01BU0sJCTB4MDAwMDAwMDcKKyNkZWZpbmUgU0RSMF9DVVNUMF9SR01JSTJfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHg3KTw8MCkKKyNkZWZpbmUgU0RSMF9DVVNUMF9SR01JSTJfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjApJjB4MDcpCisjZGVmaW5lIFNEUjBfQ1VTVDBfUkdNSUkyX0RJU0FCCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfQ1VTVDBfUkdNSUkyX1JUQkkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0RSMF9DVVNUMF9SR01JSTJfUkdNSUkJCTB4MDAwMDAwMDUKKyNkZWZpbmUgU0RSMF9DVVNUMF9SR01JSTJfVEJJCQkweDAwMDAwMDA2CisjZGVmaW5lIFNEUjBfQ1VTVDBfUkdNSUkyX0dNSUkJCTB4MDAwMDAwMDcKKworI2RlZmluZSBPTkVfTUlMTElPTgkJCTEwMDAwMDAKKyNkZWZpbmUgT05FX0JJTExJT04JCQkxMDAwMDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhYCit8IFhYICBYWFggICBYWFhYWCAgIFhYIFhYWCAgICBYWFhYWAorfCBYWCAgWFggICAgICAgIFggICAgWFhYIFhYICAgIFhYCit8IFhYICBYWCAgIFhYWFhYWCAgICBYWCAgICAgICAgWFgKK3wgWFggIFhYICAgWCAgIFhYICAgIFhYICAgICAgICBYWCBYWAorfCAgWFhYIFhYICBYWFhYWCBYICBYWFhYICAgICAgICBYWFgKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRGVjbGFyZSBDb25maWd1cmF0aW9uIHZhbHVlcworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIGVudW0gY29uZmlnX3NlbGVjdGlvbiB7CisJQ09ORklHX05PVF9TRUxFQ1RFRCwKKwlDT05GSUdfU0VMRUNURUQKK30gY29uZmlnX3NlbGVjdGlvbl90OworCit0eXBlZGVmIGVudW0gY29uZmlnX2xpc3QgeworCVVBUlQyX0lOX1NFUlZJQ0VfTU9ERSwKKwlDUFVfVFJBQ0VfTU9ERSwKKwlVQVJUMV9DVFNfUlRTLAorCUNPTkZJR19OQgorfSBjb25maWdfbGlzdF90OworCisjZGVmaW5lIE1BWF9DT05GSUdfU0VMRUNUX05CCQkJMworCisjZGVmaW5lIEJPQVJEX0lORk9fVUFSVDJfSU5fU0VSVklDRV9NT0RFCTEKKyNkZWZpbmUgQk9BUkRfSU5GT19DUFVfVFJBQ0VfTU9ERQkJMgorI2RlZmluZSBCT0FSRF9JTkZPX1VBUlQxX0NUU19SVFNfTU9ERQkJNAorCit2b2lkIGZvcmNlX2J1cF9jb25maWdfc2VsZWN0aW9uKGNvbmZpZ19zZWxlY3Rpb25fdCAqY29uZmdpX3NlbGVjdF9QKTsKK3ZvaWQgdXBkYXRlX2NvbmZpZ19zZWxlY3Rpb25fdGFibGUoY29uZmlnX3NlbGVjdGlvbl90ICpjb25maWdfc2VsZWN0X1ApOwordm9pZCBkaXNwbGF5X2NvbmZpZ19zZWxlY3Rpb24oY29uZmlnX3NlbGVjdGlvbl90ICpjb25maWdfc2VsZWN0X1ApOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgWFgKK3wKK3wgICBYWFhYICAgIFhYIFhYWCAgIFhYWCAgICAgWFhYWAorfCAgWFggICAgICAgIFhYICBYWCAgIFhYICAgIFhYICBYWAorfCAgWFggIFhYWCAgIFhYICBYWCAgIFhYICAgIFhYICBYWAorfCAgWFggIFhYICAgIFhYWFhYICAgIFhYICAgIFhYICBYWAorfCAgIFhYWFggICAgIFhYICAgICAgWFhYWCAgICBYWFhYCit8ICAgICAgICAgICBYWFhYCit8Cit8Cit8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHwgIEdQSU8vU2Vjb25kYXJ5IGZ1bmMgfCBQcmltYXJ5IEZ1bmN0aW9uIHwgSS9PIHwgQWx0ZXJuYXRlMSB8IEkvTyB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rCit8IHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICB8ICAgICB8Cit8IHwgR1BJTzBfMCAgICAgICAgICAgICAgfCBQQ0lYMFJFUTJfTiAgICAgIHwgSS9PIHwgIFRSQ0NMSyAgICB8ICAgICB8Cit8IHwgR1BJTzBfMSAgICAgICAgICAgICAgfCBQQ0lYMFJFUTNfTiAgICAgIHwgSS9PIHwgIFRSQ0JTMCAgICB8ICAgICB8Cit8IHwgR1BJTzBfMiAgICAgICAgICAgICAgfCBQQ0lYMEdOVDJfTiAgICAgIHwgSS9PIHwgIFRSQ0JTMSAgICB8ICAgICB8Cit8IHwgR1BJTzBfMyAgICAgICAgICAgICAgfCBQQ0lYMEdOVDNfTiAgICAgIHwgSS9PIHwgIFRSQ0JTMiAgICB8ICAgICB8Cit8IHwgR1BJTzBfNCAgICAgICAgICAgICAgfCBQQ0lYMVJFUTJfTiAgICAgIHwgSS9PIHwgIFRSQ0VTMCAgICB8ICAgICB8Cit8IHwgR1BJTzBfNSAgICAgICAgICAgICAgfCBQQ0lYMVJFUTNfTiAgICAgIHwgSS9PIHwgIFRSQ0VTMSAgICB8ICAgICB8Cit8IHwgR1BJTzBfNiAgICAgICAgICAgICAgfCBQQ0lYMUdOVDJfTiAgICAgIHwgSS9PIHwgIFRSQ0VTMiAgICB8IE5BICB8Cit8IHwgR1BJTzBfNyAgICAgICAgICAgICAgfCBQQ0lYMUdOVDNfTiAgICAgIHwgSS9PIHwgIFRSQ0VTMyAgICB8IE5BICB8Cit8IHwgR1BJTzBfOCAgICAgICAgICAgICAgfCBQRVJSRUFEWSAgICAgICAgIHwgIEkgIHwgIFRSQ0VTNCAgICB8IE5BICB8Cit8IHwgR1BJTzBfOSAgICAgICAgICAgICAgfCBQRVJDUzFfTiAgICAgICAgIHwgIE8gIHwgIFRSQ1RTMCAgICB8IE5BICB8Cit8IHwgR1BJTzBfMTAgICAgICAgICAgICAgfCBQRVJDUzJfTiAgICAgICAgIHwgIE8gIHwgIFRSQ1RTMSAgICB8IE5BICB8Cit8IHwgR1BJTzBfMTEgICAgICAgICAgICAgfCBJUlEwICAgICAgICAgICAgIHwgIEkgIHwgIFRSQ1RTMiAgICB8IE5BICB8Cit8IHwgR1BJTzBfMTIgICAgICAgICAgICAgfCBJUlExICAgICAgICAgICAgIHwgIEkgIHwgIFRSQ1RTMyAgICB8IE5BICB8Cit8IHwgR1BJTzBfMTMgICAgICAgICAgICAgfCBJUlEyICAgICAgICAgICAgIHwgIEkgIHwgIFRSQ1RTNCAgICB8IE5BICB8Cit8IHwgR1BJTzBfMTQgICAgICAgICAgICAgfCBJUlEzICAgICAgICAgICAgIHwgIEkgIHwgIFRSQ1RTNSAgICB8IE5BICB8Cit8IHwgR1BJTzBfMTUgICAgICAgICAgICAgfCBJUlE0ICAgICAgICAgICAgIHwgIEkgIHwgIFRSQ1RTNiAgICB8IE5BICB8Cit8IHwgR1BJTzBfMTYgICAgICAgICAgICAgfCBJUlE1ICAgICAgICAgICAgIHwgIEkgIHwgIFVBUlQyUlggICB8ICBJICB8Cit8IHwgR1BJTzBfMTcgICAgICAgICAgICAgfCBQRVJCRTBfTiAgICAgICAgIHwgIE8gIHwgIFVBUlQyVFggICB8ICBPICB8Cit8IHwgR1BJTzBfMTggICAgICAgICAgICAgfCBQQ0kwR05UMF9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMTkgICAgICAgICAgICAgfCBQQ0kwR05UMV9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjAgICAgICAgICAgICAgfCBQQ0kwUkVRMF9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjEgICAgICAgICAgICAgfCBQQ0kwUkVRMV9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjIgICAgICAgICAgICAgfCBQQ0kxR05UMF9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjMgICAgICAgICAgICAgfCBQQ0kxR05UMV9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjQgICAgICAgICAgICAgfCBQQ0kxUkVRMF9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjUgICAgICAgICAgICAgfCBQQ0kxUkVRMV9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjYgICAgICAgICAgICAgfCBQQ0kyR05UMF9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjcgICAgICAgICAgICAgfCBQQ0kyR05UMV9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjggICAgICAgICAgICAgfCBQQ0kyUkVRMF9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMjkgICAgICAgICAgICAgfCBQQ0kyUkVRMV9OICAgICAgIHwgSS9PIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMzAgICAgICAgICAgICAgfCBVQVJUMVJYICAgICAgICAgIHwgIEkgIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgR1BJTzBfMzEgICAgICAgICAgICAgfCBVQVJUMVRYICAgICAgICAgIHwgIE8gIHwgIE5BICAgICAgICB8IE5BICB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICB8ICAgICB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rCit8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3Vuc2lnbmVkIGxvbmcgYXV0b19jYWxjX3NwZWVkKHZvaWQpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBQcm90b3R5cGVzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaW50X2V2YjQ0MHNwZV9pbmZvKHZvaWQpOworCitpbnQgb25ib2FyZF9wY2lfYXJiaXRlcl9zZWxlY3RlZChpbnQgY29yZV9wY2kpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIF9fWVVDQ0FfSF8gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2FtaXJpeC9hcDEwMDAvTWFrZWZpbGUgYi9ib2FyZC9hbWlyaXgvYXAxMDAwL01ha2VmaWxlCmluZGV4IDRlMWVmMjEuLjA4YTE3ZjkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtaXJpeC9hcDEwMDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvYW1pcml4L2FwMTAwMC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBzZXJpYWwubyBwY2kubyBwb3dlcnNwYW4ubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gc2VyaWFsLm8gcGNpLm8gcG93ZXJzcGFuLm8KIFNPQkpTCT0gaW5pdC5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJF4KIApAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9hcm1hZGlsbG8vTWFrZWZpbGUgYi9ib2FyZC9hcm1hZGlsbG8vTWFrZWZpbGUKaW5kZXggNTJlYTdmMi4uODBlMTY4NyAxMDA2NDQKLS0tIGEvYm9hcmQvYXJtYWRpbGxvL01ha2VmaWxlCisrKyBiL2JvYXJkL2FybWFkaWxsby9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCiAjIChDKSBDb3B5cmlnaHQgMjAwMgogIyBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KICMgTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgpAQCAtMjQsMTIgKzI3LDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gYXJtYWRpbGxvLm8gZmxhc2gubworQ09CSlMJOj0gYXJtYWRpbGxvLm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC00MCw5ICs0Nyw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYXNzYWJldC9NYWtlZmlsZSBiL2JvYXJkL2Fzc2FiZXQvTWFrZWZpbGUKaW5kZXggYzQ5ZjFiNC4uYTc0MTRlOCAxMDA2NDQKLS0tIGEvYm9hcmQvYXNzYWJldC9NYWtlZmlsZQorKysgYi9ib2FyZC9hc3NhYmV0L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCkBAIC0yNSwxMiArMjUsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBhc3NhYmV0Lm8KK0NPQkpTCTo9IGFzc2FiZXQubwogU09CSlMJOj0gc2V0dXAubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtNDEsOSArNDUsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2F0OTFybTkyMDBkay9NYWtlZmlsZSBiL2JvYXJkL2F0OTFybTkyMDBkay9NYWtlZmlsZQppbmRleCBlYzc3ZGE5Li5mMDg3YTBmIDEwMDY0NAotLS0gYS9ib2FyZC9hdDkxcm05MjAwZGsvTWFrZWZpbGUKKysrIGIvYm9hcmQvYXQ5MXJtOTIwMGRrL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDExICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGF0OTFybTkyMDBkay5vIGF0NDUubyBmbGFzaC5vCitDT0JKUwk6PSBhdDkxcm05MjAwZGsubyBhdDQ1Lm8gZmxhc2gubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2F0Yy9NYWtlZmlsZSBiL2JvYXJkL2F0Yy9NYWtlZmlsZQppbmRleCA3YTIwMTRkLi5hMDQxYzk5IDEwMDY0NAotLS0gYS9ib2FyZC9hdGMvTWFrZWZpbGUKKysrIGIvYm9hcmQvYXRjL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyB0aTExM3gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYXRjL3RpMTEzeC5jIGIvYm9hcmQvYXRjL3RpMTEzeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZTkzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9hdGMvdGkxMTN4LmMKQEAgLTAsMCArMSw2MzcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNQorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBMb3RzIG9mIGNvZGUgY29waWVkIGZyb206CisgKgorICogaTgyMzY1LmMgMS4zNTIgLSBMaW51eCBkcml2ZXIgZm9yIEludGVsIDgyMzY1IGFuZCBjb21wYXRpYmxlCisgKiBQQyBDYXJkIGNvbnRyb2xsZXJzLCBhbmQgWWVudGEtY29tcGF0aWJsZSBQQ0ktdG8tQ2FyZEJ1cyBjb250cm9sbGVycy4KKyAqIChDKSAxOTk5IERhdmlkIEEuIEhpbmRzIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZmRlZiBDT05GSUdfSTgyMzY1CisKKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8cGNpLmg+CisjaW5jbHVkZSA8cGNtY2lhLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvaTgyMzY1Lmg+CisjaW5jbHVkZSA8cGNtY2lhL3llbnRhLmg+CisjaW5jbHVkZSA8cGNtY2lhL3RpMTEzeC5oPgorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3VwcG9ydGVkW10gPSB7CisJe1BDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfMTUxMH0sCisJezAsIDB9Cit9OworCisjZGVmaW5lIENZQ0xFX1RJTUUJMTIwCisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgaTgyMzY1X2R1bXBfcmVnaW9ucyAocGNpX2Rldl90IGRldik7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X2luZm9fdCB7CisJcGNpX2Rldl90CWRldjsKKwl1X3Nob3J0CQliY3I7CisJdV9jaGFyCQlwY2lfbGF0LCBjYl9sYXQsIHN1Yl9idXMsIGNhY2hlOworCXVfaW50CQljYl9waHlzOworCisJc29ja2V0X2NhcF90CWNhcDsKKwl1X3Nob3J0CQl0eXBlOworCXVfaW50CQlmbGFnczsKKwl0aTExM3hfc3RhdGVfdAlzdGF0ZTsKK30gc29ja2V0X2luZm9fdDsKKworc3RhdGljIHNvY2tldF9pbmZvX3Qgc29ja2V0Oworc3RhdGljIHNvY2tldF9zdGF0ZV90IHN0YXRlOworc3RhdGljIHN0cnVjdCBwY2NhcmRfbWVtX21hcCBtZW07CitzdGF0aWMgc3RydWN0IHBjY2FyZF9pb19tYXAgaW87CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKiBTb21lIFBDSSBzaG9ydGN1dHMgKi8KKworc3RhdGljIGludCBwY2lfcmVhZGIgKHNvY2tldF9pbmZvX3QgKiBzLCBpbnQgciwgdV9jaGFyICogdikKK3sKKwlyZXR1cm4gcGNpX3JlYWRfY29uZmlnX2J5dGUgKHMtPmRldiwgciwgdik7Cit9CitzdGF0aWMgaW50IHBjaV93cml0ZWIgKHNvY2tldF9pbmZvX3QgKiBzLCBpbnQgciwgdV9jaGFyIHYpCit7CisJcmV0dXJuIHBjaV93cml0ZV9jb25maWdfYnl0ZSAocy0+ZGV2LCByLCB2KTsKK30KK3N0YXRpYyBpbnQgcGNpX3JlYWR3IChzb2NrZXRfaW5mb190ICogcywgaW50IHIsIHVfc2hvcnQgKiB2KQoreworCXJldHVybiBwY2lfcmVhZF9jb25maWdfd29yZCAocy0+ZGV2LCByLCB2KTsKK30KK3N0YXRpYyBpbnQgcGNpX3dyaXRldyAoc29ja2V0X2luZm9fdCAqIHMsIGludCByLCB1X3Nob3J0IHYpCit7CisJcmV0dXJuIHBjaV93cml0ZV9jb25maWdfd29yZCAocy0+ZGV2LCByLCB2KTsKK30KK3N0YXRpYyBpbnQgcGNpX3JlYWRsIChzb2NrZXRfaW5mb190ICogcywgaW50IHIsIHVfaW50ICogdikKK3sKKwlyZXR1cm4gcGNpX3JlYWRfY29uZmlnX2R3b3JkIChzLT5kZXYsIHIsIHYpOworfQorc3RhdGljIGludCBwY2lfd3JpdGVsIChzb2NrZXRfaW5mb190ICogcywgaW50IHIsIHVfaW50IHYpCit7CisJcmV0dXJuIHBjaV93cml0ZV9jb25maWdfZHdvcmQgKHMtPmRldiwgciwgdik7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIGNiX3JlYWRiKHMsIHIpCQlyZWFkYigocyktPmNiX3BoeXMgKyAocikpCisjZGVmaW5lIGNiX3JlYWRsKHMsIHIpCQlyZWFkbCgocyktPmNiX3BoeXMgKyAocikpCisjZGVmaW5lIGNiX3dyaXRlYihzLCByLCB2KQl3cml0ZWIodiwgKHMpLT5jYl9waHlzICsgKHIpKQorI2RlZmluZSBjYl93cml0ZWwocywgciwgdikJd3JpdGVsKHYsIChzKS0+Y2JfcGh5cyArIChyKSkKKworc3RhdGljIHVfY2hhciBpMzY1X2dldCAoc29ja2V0X2luZm9fdCAqIHMsIHVfc2hvcnQgcmVnKQoreworCXJldHVybiBjYl9yZWFkYiAocywgMHgwODAwICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgaTM2NV9zZXQgKHNvY2tldF9pbmZvX3QgKiBzLCB1X3Nob3J0IHJlZywgdV9jaGFyIGRhdGEpCit7CisJY2Jfd3JpdGViIChzLCAweDA4MDAgKyByZWcsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBpMzY1X2JzZXQgKHNvY2tldF9pbmZvX3QgKiBzLCB1X3Nob3J0IHJlZywgdV9jaGFyIG1hc2spCit7CisJaTM2NV9zZXQgKHMsIHJlZywgaTM2NV9nZXQgKHMsIHJlZykgfCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgaTM2NV9iY2xyIChzb2NrZXRfaW5mb190ICogcywgdV9zaG9ydCByZWcsIHVfY2hhciBtYXNrKQoreworCWkzNjVfc2V0IChzLCByZWcsIGkzNjVfZ2V0IChzLCByZWcpICYgfm1hc2spOworfQorCisjaWYgMAkvKiBub3QgdXNlZCAqLworc3RhdGljIHZvaWQgaTM2NV9iZmxpcCAoc29ja2V0X2luZm9fdCAqIHMsIHVfc2hvcnQgcmVnLCB1X2NoYXIgbWFzaywgaW50IGIpCit7CisJdV9jaGFyIGQgPSBpMzY1X2dldCAocywgcmVnKTsKKworCWkzNjVfc2V0IChzLCByZWcsIChiKSA/IChkIHwgbWFzaykgOiAoZCAmIH5tYXNrKSk7Cit9CisKK3N0YXRpYyB1X3Nob3J0IGkzNjVfZ2V0X3BhaXIgKHNvY2tldF9pbmZvX3QgKiBzLCB1X3Nob3J0IHJlZykKK3sKKwlyZXR1cm4gKGkzNjVfZ2V0IChzLCByZWcpICsgKGkzNjVfZ2V0IChzLCByZWcgKyAxKSA8PCA4KSk7Cit9CisjZW5kaWYJLyogbm90IHVzZWQgKi8KKworc3RhdGljIHZvaWQgaTM2NV9zZXRfcGFpciAoc29ja2V0X2luZm9fdCAqIHMsIHVfc2hvcnQgcmVnLCB1X3Nob3J0IGRhdGEpCit7CisJaTM2NV9zZXQgKHMsIHJlZywgZGF0YSAmIDB4ZmYpOworCWkzNjVfc2V0IChzLCByZWcgKyAxLCBkYXRhID4+IDgpOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIENvZGUgdG8gc2F2ZSBhbmQgcmVzdG9yZSBnbG9iYWwgc3RhdGUgaW5mb3JtYXRpb24gZm9yIFRJIDExMzAgYW5kCisgICAgVEkgMTEzMSBjb250cm9sbGVycywgYW5kIHRvIHNldCBhbmQgcmVwb3J0IGdsb2JhbCBjb25maWd1cmF0aW9uCisgICAgb3B0aW9ucy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIHRpMTEzeF9nZXRfc3RhdGUgKHNvY2tldF9pbmZvX3QgKiBzKQoreworCXRpMTEzeF9zdGF0ZV90ICpwID0gJnMtPnN0YXRlOworCisJcGNpX3JlYWRsIChzLCBUSTExM1hfU1lTVEVNX0NPTlRST0wsICZwLT5zeXNjdGwpOworCXBjaV9yZWFkYiAocywgVEkxMTNYX0NBUkRfQ09OVFJPTCwgJnAtPmNhcmRjdGwpOworCXBjaV9yZWFkYiAocywgVEkxMTNYX0RFVklDRV9DT05UUk9MLCAmcC0+ZGV2Y3RsKTsKKwlwY2lfcmVhZGIgKHMsIFRJMTI1MF9ESUFHTk9TVElDLCAmcC0+ZGlhZyk7CisJcGNpX3JlYWRsIChzLCBUSTEyWFhfSVJRTVVYLCAmcC0+aXJxbXV4KTsKK30KKworc3RhdGljIHZvaWQgdGkxMTN4X3NldF9zdGF0ZSAoc29ja2V0X2luZm9fdCAqIHMpCit7CisJdGkxMTN4X3N0YXRlX3QgKnAgPSAmcy0+c3RhdGU7CisKKwlwY2lfd3JpdGVsIChzLCBUSTExM1hfU1lTVEVNX0NPTlRST0wsIHAtPnN5c2N0bCk7CisJcGNpX3dyaXRlYiAocywgVEkxMTNYX0NBUkRfQ09OVFJPTCwgcC0+Y2FyZGN0bCk7CisJcGNpX3dyaXRlYiAocywgVEkxMTNYX0RFVklDRV9DT05UUk9MLCBwLT5kZXZjdGwpOworCXBjaV93cml0ZWIgKHMsIFRJMTI1MF9NVUxUSU1FRElBX0NUTCwgMCk7CisJcGNpX3dyaXRlYiAocywgVEkxMjUwX0RJQUdOT1NUSUMsIHAtPmRpYWcpOworCXBjaV93cml0ZWwgKHMsIFRJMTJYWF9JUlFNVVgsIHAtPmlycW11eCk7CisJaTM2NV9zZXRfcGFpciAocywgVEkxMTNYX0lPX09GRlNFVCAoMCksIDApOworCWkzNjVfc2V0X3BhaXIgKHMsIFRJMTEzWF9JT19PRkZTRVQgKDEpLCAwKTsKK30KKworc3RhdGljIHVfaW50IHRpMTEzeF9zZXRfb3B0cyAoc29ja2V0X2luZm9fdCAqIHMpCit7CisJdGkxMTN4X3N0YXRlX3QgKnAgPSAmcy0+c3RhdGU7CisJdV9pbnQgbWFzayA9IDB4ZmZmZjsKKworCXAtPmNhcmRjdGwgJj0gflRJMTEzWF9DQ1JfWlZFTkFCTEU7CisJcC0+Y2FyZGN0bCB8PSBUSTExM1hfQ0NSX1NQS1JPVVRFTjsKKworCXJldHVybiBtYXNrOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmVzIHRvIGhhbmRsZSBjb21tb24gQ2FyZEJ1cyBvcHRpb25zCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKiBEZWZhdWx0IHNldHRpbmdzIGZvciBQQ0kgY29tbWFuZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIENNRF9ERkxUIChQQ0lfQ09NTUFORF9JT3xQQ0lfQ09NTUFORF9NRU1PUll8IFwKKwkJICBQQ0lfQ09NTUFORF9NQVNURVJ8UENJX0NPTU1BTkRfV0FJVCkKKworc3RhdGljIHZvaWQgY2JfZ2V0X3N0YXRlIChzb2NrZXRfaW5mb190ICogcykKK3sKKwlwY2lfcmVhZGIgKHMsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZzLT5jYWNoZSk7CisJcGNpX3JlYWRiIChzLCBQQ0lfTEFURU5DWV9USU1FUiwgJnMtPnBjaV9sYXQpOworCXBjaV9yZWFkYiAocywgQ0JfTEFURU5DWV9USU1FUiwgJnMtPmNiX2xhdCk7CisJcGNpX3JlYWRiIChzLCBDQl9DQVJEQlVTX0JVUywgJnMtPmNhcC5jYXJkYnVzKTsKKwlwY2lfcmVhZGIgKHMsIENCX1NVQk9SRF9CVVMsICZzLT5zdWJfYnVzKTsKKwlwY2lfcmVhZHcgKHMsIENCX0JSSURHRV9DT05UUk9MLCAmcy0+YmNyKTsKK30KKworc3RhdGljIHZvaWQgY2Jfc2V0X3N0YXRlIChzb2NrZXRfaW5mb190ICogcykKK3sKKwlwY2lfd3JpdGVsIChzLCBDQl9MRUdBQ1lfTU9ERV9CQVNFLCAwKTsKKwlwY2lfd3JpdGVsIChzLCBQQ0lfQkFTRV9BRERSRVNTXzAsIHMtPmNiX3BoeXMpOworCXBjaV93cml0ZXcgKHMsIFBDSV9DT01NQU5ELCBDTURfREZMVCk7CisJcGNpX3dyaXRlYiAocywgUENJX0NBQ0hFX0xJTkVfU0laRSwgcy0+Y2FjaGUpOworCXBjaV93cml0ZWIgKHMsIFBDSV9MQVRFTkNZX1RJTUVSLCBzLT5wY2lfbGF0KTsKKwlwY2lfd3JpdGViIChzLCBDQl9MQVRFTkNZX1RJTUVSLCBzLT5jYl9sYXQpOworCXBjaV93cml0ZWIgKHMsIENCX0NBUkRCVVNfQlVTLCBzLT5jYXAuY2FyZGJ1cyk7CisJcGNpX3dyaXRlYiAocywgQ0JfU1VCT1JEX0JVUywgcy0+c3ViX2J1cyk7CisJcGNpX3dyaXRldyAocywgQ0JfQlJJREdFX0NPTlRST0wsIHMtPmJjcik7Cit9CisKK3N0YXRpYyB2b2lkIGNiX3NldF9vcHRzIChzb2NrZXRfaW5mb190ICogcykKK3sKKwlpZiAocy0+Y2FjaGUgPT0gMCkKKwkJcy0+Y2FjaGUgPSA4OworCWlmIChzLT5wY2lfbGF0ID09IDApCisJCXMtPnBjaV9sYXQgPSAweGE4OworCWlmIChzLT5jYl9sYXQgPT0gMCkKKwkJcy0+Y2JfbGF0ID0gMHhiMDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBQb3dlciBjb250cm9sIGZvciBDYXJkYnVzIGNvbnRyb2xsZXJzOiB1c2VkIGJvdGggZm9yIDE2LWJpdCBhbmQKKyAgICBDYXJkYnVzIGNhcmRzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBjYl9zZXRfcG93ZXIgKHNvY2tldF9pbmZvX3QgKiBzLCBzb2NrZXRfc3RhdGVfdCAqIHN0YXRlKQoreworCXVfaW50IHJlZyA9IDA7CisKKwkvKiByZXN0YXJ0IGNhcmQgdm9sdGFnZSBkZXRlY3Rpb24gaWYgaXQgc2VlbXMgYXBwcm9wcmlhdGUgKi8KKwlpZiAoKHN0YXRlLT5WY2MgPT0gMCkgJiYgKHN0YXRlLT5WcHAgPT0gMCkgJiYKKwkgICAhKGNiX3JlYWRsIChzLCBDQl9TT0NLRVRfU1RBVEUpICYgQ0JfU1NfVlNFTlNFKSkKKwkJY2Jfd3JpdGVsIChzLCBDQl9TT0NLRVRfRk9SQ0UsIENCX1NGX0NWU1RFU1QpOworCXN3aXRjaCAoc3RhdGUtPlZjYykgeworCWNhc2UgMDoKKwkJcmVnID0gMDsKKwkJYnJlYWs7CisJY2FzZSAzMzoKKwkJcmVnID0gQ0JfU0NfVkNDXzNWOworCQlicmVhazsKKwljYXNlIDUwOgorCQlyZWcgPSBDQl9TQ19WQ0NfNVY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJc3dpdGNoIChzdGF0ZS0+VnBwKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDMzOgorCQlyZWcgfD0gQ0JfU0NfVlBQXzNWOworCQlicmVhazsKKwljYXNlIDUwOgorCQlyZWcgfD0gQ0JfU0NfVlBQXzVWOworCQlicmVhazsKKwljYXNlIDEyMDoKKwkJcmVnIHw9IENCX1NDX1ZQUF8xMlY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHJlZyAhPSBjYl9yZWFkbCAocywgQ0JfU09DS0VUX0NPTlRST0wpKQorCQljYl93cml0ZWwgKHMsIENCX1NPQ0tFVF9DT05UUk9MLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgR2VuZXJpYyByb3V0aW5lcyB0byBnZXQgYW5kIHNldCBjb250cm9sbGVyIG9wdGlvbnMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGdldF9icmlkZ2Vfc3RhdGUgKHNvY2tldF9pbmZvX3QgKiBzKQoreworCXRpMTEzeF9nZXRfc3RhdGUgKHMpOworCWNiX2dldF9zdGF0ZSAocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9icmlkZ2Vfc3RhdGUgKHNvY2tldF9pbmZvX3QgKiBzKQoreworCWNiX3NldF9zdGF0ZSAocyk7CisJaTM2NV9zZXQgKHMsIEkzNjVfR0JMQ1RMLCAweDAwKTsKKwlpMzY1X3NldCAocywgSTM2NV9HRU5DVEwsIDB4MDApOworCXRpMTEzeF9zZXRfc3RhdGUgKHMpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYnJpZGdlX29wdHMgKHNvY2tldF9pbmZvX3QgKiBzKQoreworCXRpMTEzeF9zZXRfb3B0cyAocyk7CisJY2Jfc2V0X29wdHMgKHMpOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgUEQ2N19FWFRfSU5ERVgJCTB4MmUJLyogRXh0ZW5zaW9uIGluZGV4ICovCisjZGVmaW5lIFBENjdfRVhUX0RBVEEJCTB4MmYJLyogRXh0ZW5zaW9uIGRhdGEgKi8KKyNkZWZpbmUgUEQ2N19FWERfVlMxKHMpCQkoMHgwMSA8PCAoKHMpPDwxKSkKKworI2RlZmluZSBwZDY3X2V4dF9nZXQocywgcikgXAorICAgIChpMzY1X3NldChzLCBQRDY3X0VYVF9JTkRFWCwgciksIGkzNjVfZ2V0KHMsIFBENjdfRVhUX0RBVEEpKQorCitzdGF0aWMgaW50IGkzNjVfZ2V0X3N0YXR1cyAoc29ja2V0X2luZm9fdCAqIHMsIHVfaW50ICogdmFsdWUpCit7CisJdV9pbnQgc3RhdHVzOworCisJc3RhdHVzID0gaTM2NV9nZXQgKHMsIEkzNjVfSURFTlQpOworCXN0YXR1cyA9IGkzNjVfZ2V0IChzLCBJMzY1X1NUQVRVUyk7CisJKnZhbHVlID0gKChzdGF0dXMgJiBJMzY1X0NTX0RFVEVDVCkgPT0gSTM2NV9DU19ERVRFQ1QpID8gU1NfREVURUNUIDogMDsKKwlpZiAoaTM2NV9nZXQgKHMsIEkzNjVfSU5UQ1RMKSAmIEkzNjVfUENfSU9DQVJEKSB7CisJCSp2YWx1ZSB8PSAoc3RhdHVzICYgSTM2NV9DU19TVFNDSEcpID8gMCA6IFNTX1NUU0NIRzsKKwl9IGVsc2UgeworCQkqdmFsdWUgfD0gKHN0YXR1cyAmIEkzNjVfQ1NfQlZEMSkgPyAwIDogU1NfQkFUREVBRDsKKwkJKnZhbHVlIHw9IChzdGF0dXMgJiBJMzY1X0NTX0JWRDIpID8gMCA6IFNTX0JBVFdBUk47CisJfQorCSp2YWx1ZSB8PSAoc3RhdHVzICYgSTM2NV9DU19XUlBST1QpID8gU1NfV1JQUk9UIDogMDsKKwkqdmFsdWUgfD0gKHN0YXR1cyAmIEkzNjVfQ1NfUkVBRFkpID8gU1NfUkVBRFkgOiAwOworCSp2YWx1ZSB8PSAoc3RhdHVzICYgSTM2NV9DU19QT1dFUk9OKSA/IFNTX1BPV0VST04gOiAwOworCisJc3RhdHVzID0gY2JfcmVhZGwgKHMsIENCX1NPQ0tFVF9TVEFURSk7CisJKnZhbHVlIHw9IChzdGF0dXMgJiBDQl9TU18zMkJJVCkgPyBTU19DQVJEQlVTIDogMDsKKwkqdmFsdWUgfD0gKHN0YXR1cyAmIENCX1NTXzNWQ0FSRCkgPyBTU18zVkNBUkQgOiAwOworCSp2YWx1ZSB8PSAoc3RhdHVzICYgQ0JfU1NfWFZDQVJEKSA/IFNTX1hWQ0FSRCA6IDA7CisJKnZhbHVlIHw9IChzdGF0dXMgJiBDQl9TU19WU0VOU0UpID8gMCA6IFNTX1BFTkRJTkc7CisJLyogRm9yIG5vdywgaWdub3JlIGNhcmRzIHdpdGggdW5zdXBwb3J0ZWQgdm9sdGFnZSBrZXlzICovCisJaWYgKCp2YWx1ZSAmIFNTX1hWQ0FSRCkKKwkJKnZhbHVlICY9IH4oU1NfREVURUNUIHwgU1NfM1ZDQVJEIHwgU1NfWFZDQVJEKTsKKworCXJldHVybiAwOworfQkvKiBpMzY1X2dldF9zdGF0dXMgKi8KKworc3RhdGljIGludCBpMzY1X3NldF9zb2NrZXQgKHNvY2tldF9pbmZvX3QgKiBzLCBzb2NrZXRfc3RhdGVfdCAqIHN0YXRlKQoreworCXVfY2hhciByZWc7CisKKwlzZXRfYnJpZGdlX3N0YXRlIChzKTsKKworCS8qIElPIGNhcmQsIFJFU0VUIGZsYWcgKi8KKwlyZWcgPSAwOworCXJlZyB8PSAoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpID8gMCA6IEkzNjVfUENfUkVTRVQ7CisJcmVnIHw9IChzdGF0ZS0+ZmxhZ3MgJiBTU19JT0NBUkQpID8gSTM2NV9QQ19JT0NBUkQgOiAwOworCWkzNjVfc2V0IChzLCBJMzY1X0lOVENUTCwgcmVnKTsKKworCXJlZyA9IEkzNjVfUFdSX05PUkVTRVQ7CisJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1BXUl9BVVRPKQorCQlyZWcgfD0gSTM2NV9QV1JfQVVUTzsKKwlpZiAoc3RhdGUtPmZsYWdzICYgU1NfT1VUUFVUX0VOQSkKKwkJcmVnIHw9IEkzNjVfUFdSX09VVDsKKworCWNiX3NldF9wb3dlciAocywgc3RhdGUpOworCXJlZyB8PSBpMzY1X2dldCAocywgSTM2NV9QT1dFUikgJiAoSTM2NV9WQ0NfTUFTSyB8IEkzNjVfVlBQMV9NQVNLKTsKKworCWlmIChyZWcgIT0gaTM2NV9nZXQgKHMsIEkzNjVfUE9XRVIpKQorCQlpMzY1X3NldCAocywgSTM2NV9QT1dFUiwgcmVnKTsKKworCXJldHVybiAwOworfQkvKiBpMzY1X3NldF9zb2NrZXQgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgaTM2NV9zZXRfbWVtX21hcCAoc29ja2V0X2luZm9fdCAqIHMsIHN0cnVjdCBwY2NhcmRfbWVtX21hcCAqbWVtKQoreworCXVfc2hvcnQgYmFzZSwgaTsKKwl1X2NoYXIgbWFwOworCisJZGVidWcgKCJpODIzNjU6IFNldE1lbU1hcCglZCwgJSMyLjJ4LCAlZCBucywgJSM1LjVseC0lIzUuNWx4LCAlIzUuNXgpXG4iLAorCQltZW0tPm1hcCwgbWVtLT5mbGFncywgbWVtLT5zcGVlZCwKKwkJbWVtLT5zeXNfc3RhcnQsIG1lbS0+c3lzX3N0b3AsIG1lbS0+Y2FyZF9zdGFydCk7CisKKwltYXAgPSBtZW0tPm1hcDsKKwlpZiAoKG1hcCA+IDQpIHx8CisJICAgIChtZW0tPmNhcmRfc3RhcnQgPiAweDNmZmZmZmYpIHx8CisJICAgIChtZW0tPnN5c19zdGFydCA+IG1lbS0+c3lzX3N0b3ApIHx8CisJICAgIChtZW0tPnNwZWVkID4gMTAwMCkpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFR1cm4gb2ZmIHRoZSB3aW5kb3cgYmVmb3JlIGNoYW5naW5nIGFueXRoaW5nICovCisJaWYgKGkzNjVfZ2V0IChzLCBJMzY1X0FERFJXSU4pICYgSTM2NV9FTkFfTUVNIChtYXApKQorCQlpMzY1X2JjbHIgKHMsIEkzNjVfQUREUldJTiwgSTM2NV9FTkFfTUVNIChtYXApKTsKKworCS8qIFRha2UgY2FyZSBvZiBoaWdoIGJ5dGUsIGZvciBQQ0kgY29udHJvbGxlcnMgKi8KKwlpMzY1X3NldCAocywgQ0JfTUVNX1BBR0UgKG1hcCksIG1lbS0+c3lzX3N0YXJ0ID4+IDI0KTsKKworCWJhc2UgPSBJMzY1X01FTSAobWFwKTsKKwlpID0gKG1lbS0+c3lzX3N0YXJ0ID4+IDEyKSAmIDB4MGZmZjsKKwlpZiAobWVtLT5mbGFncyAmIE1BUF8xNkJJVCkKKwkJaSB8PSBJMzY1X01FTV8xNkJJVDsKKwlpZiAobWVtLT5mbGFncyAmIE1BUF8wV1MpCisJCWkgfD0gSTM2NV9NRU1fMFdTOworCWkzNjVfc2V0X3BhaXIgKHMsIGJhc2UgKyBJMzY1X1dfU1RBUlQsIGkpOworCisJaSA9IChtZW0tPnN5c19zdG9wID4+IDEyKSAmIDB4MGZmZjsKKwlzd2l0Y2ggKG1lbS0+c3BlZWQgLyBDWUNMRV9USU1FKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCWkgfD0gSTM2NV9NRU1fV1MwOworCQlicmVhazsKKwljYXNlIDI6CisJCWkgfD0gSTM2NV9NRU1fV1MxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpIHw9IEkzNjVfTUVNX1dTMSB8IEkzNjVfTUVNX1dTMDsKKwkJYnJlYWs7CisJfQorCWkzNjVfc2V0X3BhaXIgKHMsIGJhc2UgKyBJMzY1X1dfU1RPUCwgaSk7CisKKwlpID0gKChtZW0tPmNhcmRfc3RhcnQgLSBtZW0tPnN5c19zdGFydCkgPj4gMTIpICYgMHgzZmZmOworCWlmIChtZW0tPmZsYWdzICYgTUFQX1dSUFJPVCkKKwkJaSB8PSBJMzY1X01FTV9XUlBST1Q7CisJaWYgKG1lbS0+ZmxhZ3MgJiBNQVBfQVRUUklCKQorCQlpIHw9IEkzNjVfTUVNX1JFRzsKKwlpMzY1X3NldF9wYWlyIChzLCBiYXNlICsgSTM2NV9XX09GRiwgaSk7CisKKwkvKiBUdXJuIG9uIHRoZSB3aW5kb3cgaWYgbmVjZXNzYXJ5ICovCisJaWYgKG1lbS0+ZmxhZ3MgJiBNQVBfQUNUSVZFKQorCQlpMzY1X2JzZXQgKHMsIEkzNjVfQUREUldJTiwgSTM2NV9FTkFfTUVNIChtYXApKTsKKwlyZXR1cm4gMDsKK30JLyogaTM2NV9zZXRfbWVtX21hcCAqLworCitzdGF0aWMgaW50IGkzNjVfc2V0X2lvX21hcCAoc29ja2V0X2luZm9fdCAqIHMsIHN0cnVjdCBwY2NhcmRfaW9fbWFwICppbykKK3sKKwl1X2NoYXIgbWFwLCBpb2N0bDsKKworCW1hcCA9IGlvLT5tYXA7CisJLyogY29tbWVudCBvdXQ6IGNvbXBhcmlzb24gaXMgYWx3YXlzIGZhbHNlIGR1ZSB0byBsaW1pdGVkIHJhbmdlIG9mIGRhdGEgdHlwZSAqLworCWlmICgobWFwID4gMSkgfHwgLyogKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fCAqLworCSAgICAoaW8tPnN0b3AgPCBpby0+c3RhcnQpKQorCQlyZXR1cm4gLTE7CisJLyogVHVybiBvZmYgdGhlIHdpbmRvdyBiZWZvcmUgY2hhbmdpbmcgYW55dGhpbmcgKi8KKwlpZiAoaTM2NV9nZXQgKHMsIEkzNjVfQUREUldJTikgJiBJMzY1X0VOQV9JTyAobWFwKSkKKwkJaTM2NV9iY2xyIChzLCBJMzY1X0FERFJXSU4sIEkzNjVfRU5BX0lPIChtYXApKTsKKwlpMzY1X3NldF9wYWlyIChzLCBJMzY1X0lPIChtYXApICsgSTM2NV9XX1NUQVJULCBpby0+c3RhcnQpOworCWkzNjVfc2V0X3BhaXIgKHMsIEkzNjVfSU8gKG1hcCkgKyBJMzY1X1dfU1RPUCwgaW8tPnN0b3ApOworCWlvY3RsID0gaTM2NV9nZXQgKHMsIEkzNjVfSU9DVEwpICYgfkkzNjVfSU9DVExfTUFTSyAobWFwKTsKKwlpZiAoaW8tPnNwZWVkKQorCQlpb2N0bCB8PSBJMzY1X0lPQ1RMX1dBSVQgKG1hcCk7CisJaWYgKGlvLT5mbGFncyAmIE1BUF8wV1MpCisJCWlvY3RsIHw9IEkzNjVfSU9DVExfMFdTIChtYXApOworCWlmIChpby0+ZmxhZ3MgJiBNQVBfMTZCSVQpCisJCWlvY3RsIHw9IEkzNjVfSU9DVExfMTZCSVQgKG1hcCk7CisJaWYgKGlvLT5mbGFncyAmIE1BUF9BVVRPU1opCisJCWlvY3RsIHw9IEkzNjVfSU9DVExfSU9DUzE2IChtYXApOworCWkzNjVfc2V0IChzLCBJMzY1X0lPQ1RMLCBpb2N0bCk7CisJLyogVHVybiBvbiB0aGUgd2luZG93IGlmIG5lY2Vzc2FyeSAqLworCWlmIChpby0+ZmxhZ3MgJiBNQVBfQUNUSVZFKQorCQlpMzY1X2JzZXQgKHMsIEkzNjVfQUREUldJTiwgSTM2NV9FTkFfSU8gKG1hcCkpOworCXJldHVybiAwOworfQkvKiBpMzY1X3NldF9pb19tYXAgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK2ludCBpODIzNjVfaW5pdCAodm9pZCkKK3sKKwl1X2ludCB2YWw7CisJaW50IGk7CisKKwlpZiAoKHNvY2tldC5kZXYgPSBwY2lfZmluZF9kZXZpY2VzIChzdXBwb3J0ZWQsIDApKSA8IDApIHsKKwkJLyogQ29udHJvbGxlciBub3QgZm91bmQgKi8KKwkJcmV0dXJuIDE7CisJfQorCWRlYnVnICgiaTgyMzY1IERldmljZSBGb3VuZCFcbiIpOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChzb2NrZXQuZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsICZzb2NrZXQuY2JfcGh5cyk7CisJc29ja2V0LmNiX3BoeXMgJj0gfjB4ZjsKKworCWdldF9icmlkZ2Vfc3RhdGUgKCZzb2NrZXQpOworCXNldF9icmlkZ2Vfb3B0cyAoJnNvY2tldCk7CisKKwlpID0gaTM2NV9nZXRfc3RhdHVzICgmc29ja2V0LCAmdmFsKTsKKworCWlmICh2YWwgJiBTU19ERVRFQ1QpIHsKKwkJaWYgKHZhbCAmIFNTXzNWQ0FSRCkgeworCQkJc3RhdGUuVmNjID0gc3RhdGUuVnBwID0gMzM7CisJCQlwdXRzICgiIDMuM1YgY2FyZCBmb3VuZDogIik7CisJCX0gZWxzZSBpZiAoISh2YWwgJiBTU19YVkNBUkQpKSB7CisJCQlzdGF0ZS5WY2MgPSBzdGF0ZS5WcHAgPSA1MDsKKwkJCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiAiKTsKKwkJfSBlbHNlIHsKKwkJCXB1dHMgKCJpODIzNjU6IHVuc3VwcG9ydGVkIHZvbHRhZ2Uga2V5XG4iKTsKKwkJCXN0YXRlLlZjYyA9IHN0YXRlLlZwcCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQkvKiBObyBjYXJkIGluc2VydGVkICovCisJCXB1dHMgKCJObyBjYXJkXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RhdGUuZmxhZ3MgPSBTU19JT0NBUkQgfCBTU19PVVRQVVRfRU5BOworCXN0YXRlLmNzY19tYXNrID0gMDsKKwlzdGF0ZS5pb19pcnEgPSAwOworCisJaTM2NV9zZXRfc29ja2V0ICgmc29ja2V0LCAmc3RhdGUpOworCisJZm9yIChpID0gNTAwOyBpOyBpLS0pIHsKKwkJaWYgKChpMzY1X2dldCAoJnNvY2tldCwgSTM2NV9TVEFUVVMpICYgSTM2NV9DU19SRUFEWSkpCisJCQlicmVhazsKKwkJdWRlbGF5ICgxMDAwKTsKKwl9CisKKwlpZiAoaSA9PSAwKSB7CisJCS8qIFBDIENhcmQgbm90IHJlYWR5IGZvciBkYXRhIHRyYW5zZmVyICovCisJCXB1dHMgKCJpODIzNjUgUEMgQ2FyZCBub3QgcmVhZHkgZm9yIGRhdGEgdHJhbnNmZXJcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJZGVidWcgKCIgUEMgQ2FyZCByZWFkeSBmb3IgZGF0YSB0cmFuc2ZlcjogIik7CisKKwltZW0ubWFwID0gMDsKKwltZW0uZmxhZ3MgPSBNQVBfQVRUUklCIHwgTUFQX0FDVElWRTsKKwltZW0uc3BlZWQgPSAzMDA7CisJbWVtLnN5c19zdGFydCA9IENGR19QQ01DSUFfTUVNX0FERFI7CisJbWVtLnN5c19zdG9wID0gQ0ZHX1BDTUNJQV9NRU1fQUREUiArIENGR19QQ01DSUFfTUVNX1NJWkUgLSAxOworCW1lbS5jYXJkX3N0YXJ0ID0gMDsKKwlpMzY1X3NldF9tZW1fbWFwICgmc29ja2V0LCAmbWVtKTsKKworCWlvLm1hcCA9IDA7CisJaW8uZmxhZ3MgPSBNQVBfQVVUT1NaIHwgTUFQX0FDVElWRTsKKwlpby5zcGVlZCA9IDA7CisJaW8uc3RhcnQgPSAweDAxMDA7CisJaW8uc3RvcCA9IDB4MDEwRjsKKwlpMzY1X3NldF9pb19tYXAgKCZzb2NrZXQsICZpbyk7CisKKyNpZmRlZiBERUJVRworCWk4MjM2NV9kdW1wX3JlZ2lvbnMgKHNvY2tldC5kZXYpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpODIzNjVfZXhpdCAodm9pZCkKK3sKKwlpby5tYXAgPSAwOworCWlvLmZsYWdzID0gMDsKKwlpby5zcGVlZCA9IDA7CisJaW8uc3RhcnQgPSAwOworCWlvLnN0b3AgPSAweDE7CisKKwlpMzY1X3NldF9pb19tYXAgKCZzb2NrZXQsICZpbyk7CisKKwltZW0ubWFwID0gMDsKKwltZW0uZmxhZ3MgPSAwOworCW1lbS5zcGVlZCA9IDA7CisJbWVtLnN5c19zdGFydCA9IDA7CisJbWVtLnN5c19zdG9wID0gMHgxMDAwOworCW1lbS5jYXJkX3N0YXJ0ID0gMDsKKworCWkzNjVfc2V0X21lbV9tYXAgKCZzb2NrZXQsICZtZW0pOworCisJc29ja2V0LnN0YXRlLnN5c2N0bCAmPSAweEZGRkYwMEZGOworCisJc3RhdGUuVmNjID0gc3RhdGUuVnBwID0gMDsKKworCWkzNjVfc2V0X3NvY2tldCAoJnNvY2tldCwgJnN0YXRlKTsKK30KKworaW50IHBjbWNpYV9vbiAodm9pZCkKK3sKKwl1X2ludCByYzsKKworCWRlYnVnICgiRW5hYmxlIFBDTUNJQSAiIFBDTUNJQV9TTE9UX01TRyAiXG4iKTsKKworCXJjID0gaTgyMzY1X2luaXQoKTsKKwlpZiAocmMpCisJCWdvdG8gZXhpdDsKKworCXJjID0gY2hlY2tfaWRlX2RldmljZSgwKTsKKwlpZiAocmMgPT0gMCkKKwkJZ290byBleGl0OworCisJaTgyMzY1X2V4aXQoKTsKKworZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCitpbnQgcGNtY2lhX29mZiAodm9pZCkKK3sKKwlwcmludGYgKCJEaXNhYmxlIFBDTUNJQSAiIFBDTUNJQV9TTE9UX01TRyAiXG4iKTsKKworCWk4MjM2NV9leGl0KCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIERlYnVnIHN0dWZmCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkIGk4MjM2NV9kdW1wX3JlZ2lvbnMgKHBjaV9kZXZfdCBkZXYpCit7CisJdV9pbnQgdG1wWzJdOworCXVfaW50ICptZW0gPSAodm9pZCAqKSBzb2NrZXQuY2JfcGh5czsKKwl1X2NoYXIgKmNpcyA9ICh2b2lkICopIENGR19QQ01DSUFfTUVNX0FERFI7CisJdV9jaGFyICppZGUgPSAodm9pZCAqKSAoQ0ZHX0FUQV9CQVNFX0FERFIgKyBDRkdfQVRBX1JFR19PRkZTRVQpOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChkZXYsIDB4MDAsIHRtcCArIDApOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoZGV2LCAweDgwLCB0bXAgKyAxKTsKKworCXByaW50ZiAoIlBDSSBDT05GOiAlMDhYIC4uLiAlMDhYXG4iLAorCQl0bXBbMF0sIHRtcFsxXSk7CisJcHJpbnRmICgiUENJIE1FTTogIC4uLiAlMDhYIC4uLiAlMDhYXG4iLAorCQltZW1bMHg4IC8gNF0sIG1lbVsweDgwMCAvIDRdKTsKKwlwcmludGYgKCJDSVM6ICAgICAgLi4uJWMlYyVjJWMlYyVjJWMlYy4uLlxuIiwKKwkJY2lzWzB4MzhdLCBjaXNbMHgzYV0sIGNpc1sweDNjXSwgY2lzWzB4M2VdLAorCQljaXNbMHg0MF0sIGNpc1sweDQyXSwgY2lzWzB4NDRdLCBjaXNbMHg0OF0pOworCXByaW50ZiAoIkNJUyBDT05GOiAlMDJYICUwMlggJTAyWCAuLi5cbiIsCisJCWNpc1sweDIwMF0sIGNpc1sweDIwMl0sIGNpc1sweDIwNF0pOworCXByaW50ZiAoIklERTogICAgICAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlhcbiIsCisJCWlkZVswXSwgaWRlWzFdLCBpZGVbMl0sIGlkZVszXSwKKwkJaWRlWzRdLCBpZGVbNV0sIGlkZVs2XSwgaWRlWzddKTsKK30KKyNlbmRpZgkvKiBERUJVRyAqLworCisjZW5kaWYgLyogQ09ORklHX0k4MjM2NSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvYmFyY28vTWFrZWZpbGUgYi9ib2FyZC9iYXJjby9NYWtlZmlsZQppbmRleCBkNmJiZjJmLi45YWM2YTRkIDEwMDY0NAotLS0gYS9ib2FyZC9iYXJjby9NYWtlZmlsZQorKysgYi9ib2FyZC9iYXJjby9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUyA9ICAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTID0gICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYmMzNDUwL01ha2VmaWxlIGIvYm9hcmQvYmMzNDUwL01ha2VmaWxlCmluZGV4IDRkZWM0NGYuLjEyMmEyMmEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2JjMzQ1MC9NYWtlZmlsZQorKysgYi9ib2FyZC9iYzM0NTAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGNtZF9iYzM0NTAubworQ09CSlMJOj0gJChCT0FSRCkubyBjbWRfYmMzNDUwLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9ibXcvTWFrZWZpbGUgYi9ib2FyZC9ibXcvTWFrZWZpbGUKaW5kZXggNjIxNjQwYi4uYjc3NWRhMiAxMDA2NDQKLS0tIGEvYm9hcmQvYm13L01ha2VmaWxlCisrKyBiL2JvYXJkL2Jtdy9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCiAjIChDKSBDb3B5cmlnaHQgMjAwMgogIyBKYW1lcyBGLiBEb3VnaGVydHksIEJyb2FkY29tIENvcnBvcmF0aW9uLCBqZmRAYnJvYWRjb20uY29tCiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCkBAIC0yNCwyMCArMjcsMjQgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBuczE2NTUwLm8gc2VyaWFsLm8gbTQ4dDU5eS5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBuczE2NTUwLm8gc2VyaWFsLm8gbTQ4dDU5eS5vCiAKIFNPQkpTCT0gZWFybHlfaW5pdC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9jMm1vbi9NYWtlZmlsZSBiL2JvYXJkL2MybW9uL01ha2VmaWxlCmluZGV4IDdhMjAxNGQuLjYyZGIyZjQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2MybW9uL01ha2VmaWxlCisrKyBiL2JvYXJkL2MybW9uL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBwY21jaWEubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvYzJtb24vcGNtY2lhLmMgYi9ib2FyZC9jMm1vbi9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTUwYzRkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvYzJtb24vcGNtY2lhLmMKQEAgLTAsMCArMSwyODQgQEAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM4eHguaD4KKyNpbmNsdWRlIDxwY21jaWEuaD4KKworI3VuZGVmCUNPTkZJR19QQ01DSUEKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19QQ01DSUEKKworI2RlZmluZSBQQ01DSUFfQk9BUkRfTVNHICJDMk1PTiIKKworc3RhdGljIHZvaWQgY2ZnX3BvcnRzICh2b2lkKQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKwl1c2hvcnQgc3JlZzsKKworCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7CisKKwkvKgorCSogQ29uZmlndXJlIFBvcnQgQyBmb3IgVFBTMjIxMSBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2gKKwkqCisJKiBTd2l0Y2ggb2ZmIGFsbCB2b2x0YWdlcywgYXNzZXJ0IHNodXRkb3duCisJKi8KKwlzcmVnID0gaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQ7CisJc3JlZyB8PSAgKFRQUzIyMTFfVlBQRDAgfCBUUFMyMjExX1ZQUEQxKTsJLyogVkFWUFAgPT4gSGktWiAqLworCXNyZWcgJj0gfihUUFMyMjExX1ZDQ0QwIHwgVFBTMjIxMV9WQ0NEMSk7CS8qIDNWIGFuZCA1ViBvZmYgKi8KKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCA9IHNyZWc7CisKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3BhciAmPSB+KFRQUzIyMTFfT1VUUFVUUyk7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIgfD0gICBUUFMyMjExX09VVFBVVFM7CisKKwlkZWJ1ZyAoIlNldCBQb3J0IEM6IFBBUjogICAgICUwNHggRElSOiAgICAgJTA0eCBEQVQ6ICAgICAlMDR4XG4iLAorCSAgICAgICBpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3BhciwKKwkgICAgICAgaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIsCisJICAgICAgIGltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0KTsKKworCS8qCisJKiBDb25maWd1cmUgUG9ydCBCIGZvciBUUFMyMjExIFBDLUNhcmQgUG93ZXItSW50ZXJmYWNlIFN3aXRjaAorCSoKKwkqIE92ZXItQ3VycmVudCBJbnB1dCBvbmx5CisJKi8KKwljcC0+Y3BfcGJwYXIgJj0gfihUUFMyMjExX0lOUFVUUyk7CisJY3AtPmNwX3BiZGlyICY9IH4oVFBTMjIxMV9JTlBVVFMpOworCisJZGVidWcgKCJTZXQgUG9ydCBCOiBQQVI6ICUwOHggRElSOiAlMDh4IERBVDogJTA4eFxuIiwKKwkgICAgICAgY3AtPmNwX3BicGFyLCBjcC0+Y3BfcGJkaXIsIGNwLT5jcF9wYmRhdCk7Cit9CisKK2ludCBwY21jaWFfaGFyZHdhcmVfZW5hYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdm9sYXRpbGUgc3lzY29uZjh4eF90CSpzeXNwOworCXVpbnQgcmVnLCBwaXByLCBtYXNrOworCXVzaG9ydCBzcmVnOworCWludCBpOworCisJZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKKworCXVkZWxheSgxMDAwMCk7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJc3lzcCAgPSAoc3lzY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9zaXVfY29uZikpOworCXBjbXAgID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7CisJY3AgICAgPSAoY3BtOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX2NwbSkpOworCisJLyogQ29uZmlndXJlIFBvcnRzIGZvciBUUFMyMjExQSBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2ggKi8KKwljZmdfcG9ydHMgKCk7CisKKwkvKgorCSogQ29uZmlndXJlIFNJVU1DUiB0byBlbmFibGUgUENNQ0lBIHBvcnQgQgorCSogKFZGTFNbMDoxXSBhcmUgbm90IHVzZWQgZm9yIGRlYnVnZ2luZywgd2UgY29ubmVjdCBGUlojIGluc3RlYWQpCisJKi8KKwlzeXNwLT5zY19zaXVtY3IgJj0gflNJVU1DUl9EQkdDMTE7CS8qIHNldCBEQkdDIHRvIDAwICovCisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soX3Nsb3RfKTsKKwlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0soX3Nsb3RfKTsKKworCS8qCisJKiBEaXNhYmxlIGludGVycnVwdHMsIERNQSwgYW5kIFBDTUNJQSBidWZmZXJzCisJKiAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKSBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAorCSovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSAwOworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7CisJdWRlbGF5KDUwMCk7CisKKwkvKgorCSogTWFrZSBzdXJlIHRoZXJlIGlzIGEgY2FyZCBpbiB0aGUgc2xvdCwgdGhlbiBjb25maWd1cmUgdGhlIGludGVyZmFjZS4KKwkqLworCXVkZWxheSgxMDAwMCk7CisJZGVidWcgKCJbJWRdICVzOiBQSVBSKCVwKT0weCV4XG4iLAorCSAgICAgICBfX0xJTkVfXyxfX0ZVTkNUSU9OX18sCisJICAgICAgICYocGNtcC0+cGNtY19waXByKSxwY21wLT5wY21jX3BpcHIpOworCWlmIChwY21wLT5wY21jX3BpcHIgJiAoMHgxODAwMDAwMCA+PiAoc2xvdCA8PCA0KSkpIHsKKwkJcHJpbnRmICgiICAgTm8gQ2FyZCBmb3VuZFxuIik7CisJCXJldHVybiAoMSk7CisJfQorCisJLyoKKwkqIFBvd2VyIE9uOiBTZXQgVkFWQ0MgdG8gMy4zViBvciA1Viwgc2V0IFZBVlBQIHRvIEhpLVoKKwkqLworCW1hc2sgPSBQQ01DSUFfVlMxKHNsb3QpIHwgUENNQ0lBX1ZTMihzbG90KTsKKwlwaXByID0gcGNtcC0+cGNtY19waXByOworCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwKKwkgICAgICAgcGlwciwKKwkgICAgICAgKHJlZyZQQ01DSUFfVlMxKHNsb3QpKT8ibiI6ImZmIiwKKwkgICAgICAgKHJlZyZQQ01DSUFfVlMyKHNsb3QpKT8ibiI6ImZmIik7CisKKwlzcmVnID0gaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQ7CisJaWYgKChwaXByICYgbWFzaykgPT0gbWFzaykgeworCQlzcmVnIHw9ICAoVFBTMjIxMV9WUFBEMCB8IFRQUzIyMTFfVlBQRDEgfAkvKiBWQVZQUCA9PiBIaS1aICovCisJCQkJVFBTMjIxMV9WQ0NEMSk7CQkJLyogNVYgb24JKi8KKwkJc3JlZyAmPSB+KFRQUzIyMTFfVkNDRDApOwkJCS8qIDNWIG9mZgkqLworCQlwdXRzICgiIDUuMFYgY2FyZCBmb3VuZDogIik7CisJfSBlbHNlIHsKKwkJc3JlZyB8PSAgKFRQUzIyMTFfVlBQRDAgfCBUUFMyMjExX1ZQUEQxIHwJLyogVkFWUFAgPT4gSGktWiAqLworCQkJCVRQUzIyMTFfVkNDRDApOwkJCS8qIDNWIG9uCSovCisJCXNyZWcgJj0gfihUUFMyMjExX1ZDQ0QxKTsJCQkvKiA1ViBvZmYJKi8KKwkJcHV0cyAoIiAzLjNWIGNhcmQgZm91bmQ6ICIpOworCX0KKworCWRlYnVnICgiXG5QQyBEQVQ6ICUwNHggLT4gMy4zViAlcyA1LjBWICVzXG4iLAorCSAgICAgICBzcmVnLAorCSAgICAgICAoIChzcmVnICYgVFBTMjIxMV9WQ0NEMCkgJiYgIShzcmVnICYgVFBTMjIxMV9WQ0NEMSkpID8gIm9uIiA6ICJvZmYiLAorCSAgICAgICAoIShzcmVnICYgVFBTMjIxMV9WQ0NEMCkgJiYgIChzcmVnICYgVFBTMjIxMV9WQ0NEMSkpID8gIm9uIiA6ICJvZmYiCisJICAgICAgKTsKKworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0ID0gc3JlZzsKKworCS8qICBXYWl0IDUwMCBtczsgdXNlIHRoaXMgdG8gY2hlY2sgZm9yIG92ZXItY3VycmVudCAqLworCWZvciAoaT0wOyBpPDUwMDA7ICsraSkgeworCQlpZiAoKGNwLT5jcF9wYmRhdCAmIFRQUzIyMTFfT0MpID09IDApIHsKKwkJCXByaW50ZiAoIiAgICoqKiBPdmVyY3VycmVudCAtIFNhZmV0eSBzaHV0ZG93biAqKipcbiIpOworCQkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgJj0gfihUUFMyMjExX1ZDQ0QwfFRQUzIyMTFfVkNDRDEpOworCQkJcmV0dXJuICgxKTsKKwkJfQorCQl1ZGVsYXkgKDEwMCk7CisJfQorCisJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCisJdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCisKKwlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOworCisJcmV0dXJuICgwKTsKK30KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdV9sb25nIHJlZzsKKworCWRlYnVnICgiaGFyZHdhcmVfZGlzYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOworCisJaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXBjbXAgID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7CisKKwkvKiBDb25maWd1cmUgUENNQ0lBIEdlbmVyYWwgQ29udHJvbCBSZWdpc3RlciAqLworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgID0gMDsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCisJLyogQUxsIHZvbHRhZ2VzIG9mZiAvIEhpLVogKi8KKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCB8PSAoVFBTMjIxMV9WUFBEMCB8IFRQUzIyMTFfVlBQRDEgfAorCQkJVFBTMjIxMV9WQ0NEMCB8IFRQUzIyMTFfVkNDRDEgKTsKKworCXVkZWxheSgxMDAwMCk7CisKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCS8qIENGR19DTURfUENNQ0lBICovCisKKworaW50IHBjbWNpYV92b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKKwl2b2xhdGlsZSBjcG04eHhfdAkqY3A7CisJdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOworCXVfbG9uZyByZWc7CisJdXNob3J0IHNyZWc7CisKKwlkZWJ1ZyAoInZvbHRhZ2Vfc2V0OiAiCisJCQlQQ01DSUFfQk9BUkRfTVNHCisJCQkiIFNsb3QgJWMsIFZjYz0lZC4lZCwgVnBwPSVkLiVkXG4iLAorCSdBJytzbG90LCB2Y2MvMTAsIHZjYyUxMCwgdnBwLzEwLCB2Y2MlMTApOworCisJaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKKwlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCS8qCisJKiBEaXNhYmxlIFBDTUNJQSBidWZmZXJzIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpCisJKiBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAorCSovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCXVkZWxheSg1MDApOworCisJLyoKKwkqIENvbmZpZ3VyZSBQb3J0IEMgcGlucyBmb3IKKwkqIDUgVm9sdHMgRW5hYmxlIGFuZCAzIFZvbHRzIGVuYWJsZSwKKwkqIFR1cm4gYWxsIHBvd2VyIHBpbnMgdG8gSGktWgorCSovCisJZGVidWcgKCJQQ01DSUEgcG93ZXIgT0ZGXG4iKTsKKwljZmdfcG9ydHMgKCk7CS8qIEVuYWJsZXMgc3dpdGNoLCBidXQgYWxsIGluIEhpLVogKi8KKworCXNyZWcgID0gaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQ7CisJc3JlZyB8PSBUUFMyMjExX1ZQUEQwIHwgVFBTMjIxMV9WUFBEMTsJCS8qIFZBVlBQIGFsd2F5cyBIaS1aICovCisKKwlzd2l0Y2godmNjKSB7CisJCWNhc2UgIDA6IAkJCWJyZWFrOwkvKiBTd2l0Y2ggb2ZmCQkqLworCQljYXNlIDMzOiBzcmVnIHw9ICBUUFMyMjExX1ZDQ0QwOwkvKiBTd2l0Y2ggb24gMy4zVgkqLworCQlzcmVnICY9IH5UUFMyMjExX1ZDQ0QxOworCQlicmVhazsKKwkJY2FzZSA1MDogc3JlZyAmPSB+VFBTMjIxMV9WQ0NEMDsJLyogU3dpdGNoIG9uIDUuMFYJKi8KKwkJc3JlZyB8PSAgVFBTMjIxMV9WQ0NEMTsKKwkJYnJlYWs7CisJCWRlZmF1bHQ6IAkJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBDaGVja2luZyBzdXBwb3J0ZWQgdm9sdGFnZXMgKi8KKworCWRlYnVnICgiUElQUjogMHgleCAtLT4gJXNcbiIsCisJICAgICAgIHBjbXAtPnBjbWNfcGlwciwKKwkgICAgICAgKHBjbXAtPnBjbWNfcGlwciAmIDB4MDAwMDgwMDApID8gIm9ubHkgNSBWIiA6ICJjYW4gZG8gMy4zViIpOworCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgPSBzcmVnOworCisjaWZkZWYgREVCVUcKK3sKKwljaGFyICpzOworCisJaWYgKChzcmVnICYgVFBTMjIxMV9WQ0NEMCkgJiYgIShzcmVnICYgVFBTMjIxMV9WQ0NEMSkpIHsKKwkJcyA9ICJhdCAzLjNWIjsKKwl9IGVsc2UgaWYgKCEoc3JlZyAmIFRQUzIyMTFfVkNDRDApICYmICAoc3JlZyAmIFRQUzIyMTFfVkNDRDEpKSB7CisJCXMgPSAiYXQgNS4wViI7CisJfSBlbHNlIHsKKwkJcyA9ICJkb3duIjsKKwl9CisJcHJpbnRmICgiUENNQ0lBIHBvd2VyZWQgJXNcbiIsIHMpOworfQorI2VuZGlmCisKK2RvbmU6CisJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCXVkZWxheSg1MDApOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlYywgRE9ORVxuIiwKKwkgICAgICAgc2xvdCsnQScpOworCXJldHVybiAoMCk7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfUENNQ0lBICovCmRpZmYgLS1naXQgYS9ib2FyZC9jYW5tYi9NYWtlZmlsZSBiL2JvYXJkL2Nhbm1iL01ha2VmaWxlCmluZGV4IDYwNzgzM2YuLjQ3YTNlOGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nhbm1iL01ha2VmaWxlCisrKyBiL2JvYXJkL2Nhbm1iL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDUKKyMgKEMpIENvcHlyaWdodCAyMDA1LTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDEzICsyMiwyMCBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKyNpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorIyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorI2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vCitDT0JKUwk6PSAkKEJPQVJEKS5vCiAjLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL3ZwZC5vIC4uL2NvbW1vbi9hbTc5Yzg3NC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOSw5ICs0Niw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDFjZHMvTWFrZWZpbGUgYi9ib2FyZC9jZHMvbXBjODU0MWNkcy9NYWtlZmlsZQppbmRleCBkMjAyMjgxLi45YWFkNWQ1IDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU0MWNkcy9NYWtlZmlsZQorKysgYi9ib2FyZC9jZHMvbXBjODU0MWNkcy9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMKICMgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTAgKzIzLDEzIEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9ICQoQk9BUkQpLm8gXAorQ09CSlMJOj0gJChCT0FSRCkubyBcCiAJICAgLi4vY29tbW9uL2NhZG11cy5vIFwKIAkgICAuLi9jb21tb24vZWVwcm9tLm8gXAogCSAgIC4uL2NvbW1vbi9mdF9ib2FyZC5vIFwKQEAgLTM0LDcgKzM3LDExIEBACiAKIFNPQkpTCTo9IGluaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtNDUsOSArNTIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL01ha2VmaWxlIGIvYm9hcmQvY2RzL21wYzg1NDhjZHMvTWFrZWZpbGUKaW5kZXggZDIwMjI4MS4uOWFhZDVkNSAxMDA2NDQKLS0tIGEvYm9hcmQvY2RzL21wYzg1NDhjZHMvTWFrZWZpbGUKKysrIGIvYm9hcmQvY2RzL21wYzg1NDhjZHMvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAjCiAjIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEwICsyMywxMyBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIFwKK0NPQkpTCTo9ICQoQk9BUkQpLm8gXAogCSAgIC4uL2NvbW1vbi9jYWRtdXMubyBcCiAJICAgLi4vY29tbW9uL2VlcHJvbS5vIFwKIAkgICAuLi9jb21tb24vZnRfYm9hcmQubyBcCkBAIC0zNCw3ICszNywxMSBAQAogCiBTT0JKUwk6PSBpbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTQ1LDkgKzUyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU1NWNkcy9NYWtlZmlsZSBiL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL01ha2VmaWxlCmluZGV4IGQyMDIyODEuLjlhYWQ1ZDUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL01ha2VmaWxlCisrKyBiL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIwogIyBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMCArMjMsMTMgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubyBcCitDT0JKUwk6PSAkKEJPQVJEKS5vIFwKIAkgICAuLi9jb21tb24vY2FkbXVzLm8gXAogCSAgIC4uL2NvbW1vbi9lZXByb20ubyBcCiAJICAgLi4vY29tbW9uL2Z0X2JvYXJkLm8gXApAQCAtMzQsNyArMzcsMTEgQEAKIAogU09CSlMJOj0gaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC00NSw5ICs1Miw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY2VyZjI1MC9NYWtlZmlsZSBiL2JvYXJkL2NlcmYyNTAvTWFrZWZpbGUKaW5kZXggODNlM2JhNC4uNTI3MTJiZSAxMDA2NDQKLS0tIGEvYm9hcmQvY2VyZjI1MC9NYWtlZmlsZQorKysgYi9ib2FyZC9jZXJmMjUwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEyICsyMywxNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGNlcmYyNTAubyBmbGFzaC5vCitDT0JKUwk6PSBjZXJmMjUwLm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY200MDA4L01ha2VmaWxlIGIvYm9hcmQvY200MDA4L01ha2VmaWxlCmluZGV4IGM2NmRkNzEuLmZiMThhZDggMTAwNjQ0Ci0tLSBhL2JvYXJkL2NtNDAwOC9NYWtlZmlsZQorKysgYi9ib2FyZC9jbTQwMDgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gY200MDA4Lm8gZmxhc2gubworQ09CSlMJOj0gY200MDA4Lm8gZmxhc2gubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9jbTQxeHgvTWFrZWZpbGUgYi9ib2FyZC9jbTQxeHgvTWFrZWZpbGUKaW5kZXggZjBkMzQ1MS4uZDQyZTJhOCAxMDA2NDQKLS0tIGEvYm9hcmQvY200MXh4L01ha2VmaWxlCisrKyBiL2JvYXJkL2NtNDF4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMiArMjMsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBjbTQxeHgubyBmbGFzaC5vCitDT0JKUwk6PSBjbTQxeHgubyBmbGFzaC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2NtY19wdTIvTWFrZWZpbGUgYi9ib2FyZC9jbWNfcHUyL01ha2VmaWxlCmluZGV4IGQwZGVmMDUuLmNjYmYzMDggMTAwNjQ0Ci0tLSBhL2JvYXJkL2NtY19wdTIvTWFrZWZpbGUKKysrIGIvYm9hcmQvY21jX3B1Mi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBjbWNfcHUyLm8gYXQ0NS5vIGZsYXNoLm8gbG9hZF9zZXJudW1fZXRoYWRkci5vCitDT0JKUwk6PSBjbWNfcHUyLm8gYXQ0NS5vIGZsYXNoLm8gbG9hZF9zZXJudW1fZXRoYWRkci5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC0zOCw5ICs0Miw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY21pL01ha2VmaWxlIGIvYm9hcmQvY21pL01ha2VmaWxlCmluZGV4IDIzMjRkODcuLmQ5MzUwNDQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NtaS9NYWtlZmlsZQorKysgYi9ib2FyZC9jbWkvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQlXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlCi0jCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUKICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICMgcHJvamVjdC4KQEAgLTIzLDEyICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGZsYXNoLm8gY21pLm8KLVNPQkpTCTo9CitDT0JKUwk6PSBmbGFzaC5vIGNtaS5vCiAKLSQoTElCKToJJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOSw5ICs0Miw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY29icmE1MjcyL01ha2VmaWxlIGIvYm9hcmQvY29icmE1MjcyL01ha2VmaWxlCmluZGV4IGU1ZDg0NDYuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NvYnJhNTI3Mi9NYWtlZmlsZQorKysgYi9ib2FyZC9jb2JyYTUyNzIvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2NvZ2VudC9NYWtlZmlsZSBiL2JvYXJkL2NvZ2VudC9NYWtlZmlsZQppbmRleCA0MDg0YzdlLi44NDk4YWNlIDEwMDY0NAotLS0gYS9ib2FyZC9jb2dlbnQvTWFrZWZpbGUKKysrIGIvYm9hcmQvY29nZW50L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEyICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IG1iLm8gZmxhc2gubyBkaXBzdy5vIGxjZC5vIHNlcmlhbC5vICMgcGNpLm8gcnRjLm8gcGFyLm8ga2JtLm8KLVNPQkpTCTo9CitDT0JKUwk6PSBtYi5vIGZsYXNoLm8gZGlwc3cubyBsY2QubyBzZXJpYWwubyAjIHBjaS5vIHJ0Yy5vIHBhci5vIGtibS5vCiAKLSQoTElCKToJJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOSw5ICs0Miw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3BjNDUvTWFrZWZpbGUgYi9ib2FyZC9jcGM0NS9NYWtlZmlsZQppbmRleCBjY2I4MTFiLi4zNDY4MzNhIDEwMDY0NAotLS0gYS9ib2FyZC9jcGM0NS9NYWtlZmlsZQorKysgYi9ib2FyZC9jcGM0NS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIHBseDkwMzAubyBwZDY3MjkwLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIHBseDkwMzAubyBwZDY3MjkwLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2NwYzQ1L3BkNjcyOTAuYyBiL2JvYXJkL2NwYzQ1L3BkNjcyOTAuYwppbmRleCBjODRmYmFlLi42Y2EzZTdiIDEwMDY0NAotLS0gYS9ib2FyZC9jcGM0NS9wZDY3MjkwLmMKKysrIGIvYm9hcmQvY3BjNDUvcGQ2NzI5MC5jCkBAIC0xLDQgKzEsNiBAQAotLyogcGQ2NzI5MC5jIC0gc3lzdGVtIGNvbmZpZ3VyYXRpb24gbW9kdWxlIGZvciBTUEQ2NzI5MAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA1CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgpAQCAtMTgsNTEgKzIwLDc5OSBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKgotICogKEMpIDIwMDQgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBMb3RzIG9mIGNvZGUgY29waWVkIGZyb206CisgKgorICogaTgyMzY1LmMgMS4zNTIgLSBMaW51eCBkcml2ZXIgZm9yIEludGVsIDgyMzY1IGFuZCBjb21wYXRpYmxlCisgKiBQQyBDYXJkIGNvbnRyb2xsZXJzLCBhbmQgWWVudGEtY29tcGF0aWJsZSBQQ0ktdG8tQ2FyZEJ1cyBjb250cm9sbGVycy4KKyAqIChDKSAxOTk5IERhdmlkIEEuIEhpbmRzIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bmV0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8cGNpLmg+CiAKLS8qIGltcG9ydHMgKi8KLSNpbmNsdWRlIDxtcGM4MjR4Lmg+CisjaWZkZWYgQ09ORklHX0k4MjM2NQorCisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPHBjbWNpYS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2k4MjM2NS5oPgorI2luY2x1ZGUgPHBjbWNpYS95ZW50YS5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXJydXMuaD4KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN1cHBvcnRlZFtdID0gewogCXtQQ0lfVkVORE9SX0lEX0NJUlJVUywgUENJX0RFVklDRV9JRF9DSVJSVVNfNjcyOX0sCi0Je30KKwl7MCwgMH0KIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKLSogU1BENjcyOTBJbml0IC0KLSoKLSogUkVUVVJOUzogLTEgb24gZXJyb3IsIDAgaWYgT0sKLSovCisjZGVmaW5lIENZQ0xFX1RJTUUJMTIwCiAKLWludCBTUEQ2NzI5MEluaXQgKHZvaWQpCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkIGk4MjM2NV9kdW1wX3JlZ2lvbnMgKHBjaV9kZXZfdCBkZXYpOworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHNvY2tldF9pbmZvX3QgeworCXBjaV9kZXZfdAlkZXY7CisJdV9zaG9ydAkJYmNyOworCXVfY2hhcgkJcGNpX2xhdCwgY2JfbGF0LCBzdWJfYnVzLCBjYWNoZTsKKwl1X2ludAkJY2JfcGh5czsKKworCXNvY2tldF9jYXBfdAljYXA7CisJdV9zaG9ydAkJdHlwZTsKKwl1X2ludAkJZmxhZ3M7CisJY2lycnVzX3N0YXRlX3QJY19zdGF0ZTsKK30gc29ja2V0X2luZm9fdDsKKworLyogVGhlc2UgZGVmaW5pdGlvbnMgbXVzdCBtYXRjaCB0aGUgcGNpYyB0YWJsZSEgKi8KK3R5cGVkZWYgZW51bSBwY2ljX2lkIHsKKwlJU19QRDY3MTAsIElTX1BENjcyWCwgSVNfVlQ4M0M0NjkKK30gcGNpY19pZDsKKwordHlwZWRlZiBzdHJ1Y3QgcGNpY190IHsKKwljaGFyICpuYW1lOworfSBwY2ljX3Q7CisKK3N0YXRpYyBwY2ljX3QgcGNpY1tdID0geworCXsiIENpcnJ1cyBQRDY3MTA6ICJ9LAorCXsiIENpcnJ1cyBQRDY3Mng6ICJ9LAorCXsiIFZJQSBWVDgzQzQ2OTogIn0sCit9OworCitzdGF0aWMgc29ja2V0X2luZm9fdCBzb2NrZXQ7CitzdGF0aWMgc29ja2V0X3N0YXRlX3Qgc3RhdGU7CitzdGF0aWMgc3RydWN0IHBjY2FyZF9tZW1fbWFwIG1lbTsKK3N0YXRpYyBzdHJ1Y3QgcGNjYXJkX2lvX21hcCBpbzsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIFNvbWUgUENJIHNob3J0Y3V0cyAqLworCitzdGF0aWMgaW50IHBjaV9yZWFkYiAoc29ja2V0X2luZm9fdCAqIHMsIGludCByLCB1X2NoYXIgKiB2KQogewotCXBjaV9kZXZfdCBkZXZubzsKLQlpbnQgaWR4ID0gMDsJCS8qIGdlbmVyYWwgaW5kZXggKi8KLQl1bG9uZyBtZW1iYXNlQ3NyOwkvKiBiYXNlIGFkZHJlc3Mgb2YgZGV2aWNlIG1lbW9yeSBzcGFjZSAqLworCXJldHVybiBwY2lfcmVhZF9jb25maWdfYnl0ZSAocy0+ZGV2LCByLCB2KTsKK30KK3N0YXRpYyBpbnQgcGNpX3dyaXRlYiAoc29ja2V0X2luZm9fdCAqIHMsIGludCByLCB1X2NoYXIgdikKK3sKKwlyZXR1cm4gcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChzLT5kZXYsIHIsIHYpOworfQorc3RhdGljIGludCBwY2lfcmVhZHcgKHNvY2tldF9pbmZvX3QgKiBzLCBpbnQgciwgdV9zaG9ydCAqIHYpCit7CisJcmV0dXJuIHBjaV9yZWFkX2NvbmZpZ193b3JkIChzLT5kZXYsIHIsIHYpOworfQorc3RhdGljIGludCBwY2lfd3JpdGV3IChzb2NrZXRfaW5mb190ICogcywgaW50IHIsIHVfc2hvcnQgdikKK3sKKwlyZXR1cm4gcGNpX3dyaXRlX2NvbmZpZ193b3JkIChzLT5kZXYsIHIsIHYpOworfQogCi0JLyogZmluZCBQRDY3MjkwIGRldmljZSAqLwotCWlmICgoZGV2bm8gPSBwY2lfZmluZF9kZXZpY2VzIChzdXBwb3J0ZWQsIGlkeCsrKSkgPCAwKSB7Ci0JCXByaW50ZiAoIk5vIFBENjcyOTAgZGV2aWNlIGZvdW5kICEhXG4iKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIGNiX3JlYWRiKHMpCQlyZWFkYigocyktPmNiX3BoeXMgKyAxKQorI2RlZmluZSBjYl93cml0ZWIocywgdikJCXdyaXRlYih2LCAocyktPmNiX3BoeXMpCisjZGVmaW5lIGNiX3dyaXRlYjIocywgdikJd3JpdGViKHYsIChzKS0+Y2JfcGh5cyArIDEpCisjZGVmaW5lIGNiX3JlYWRsKHMsIHIpCQlyZWFkbCgocyktPmNiX3BoeXMgKyAocikpCisjZGVmaW5lIGNiX3dyaXRlbChzLCByLCB2KQl3cml0ZWwodiwgKHMpLT5jYl9waHlzICsgKHIpKQorCisKK3N0YXRpYyB1X2NoYXIgaTM2NV9nZXQgKHNvY2tldF9pbmZvX3QgKiBzLCB1X3Nob3J0IHJlZykKK3sKKwl1X2NoYXIgdmFsOworI2lmZGVmIENPTkZJR19QQ01DSUFfU0xPVF9BCisJaW50IHNsb3QgPSAwOworI2Vsc2UKKwlpbnQgc2xvdCA9IDE7CisjZW5kaWYKKworCXZhbCA9IEkzNjVfUkVHIChzbG90LCByZWcpOworCisJY2Jfd3JpdGViIChzLCB2YWwpOworCXZhbCA9IGNiX3JlYWRiIChzKTsKKworCWRlYnVnICgiaTM2NV9nZXQgc2xvdDoleCByZWc6ICV4IHZhbDogJXhcbiIsIHNsb3QsIHJlZywgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBpMzY1X3NldCAoc29ja2V0X2luZm9fdCAqIHMsIHVfc2hvcnQgcmVnLCB1X2NoYXIgZGF0YSkKK3sKKyNpZmRlZiBDT05GSUdfUENNQ0lBX1NMT1RfQQorCWludCBzbG90ID0gMDsKKyNlbHNlCisJaW50IHNsb3QgPSAxOworI2VuZGlmCisJdV9jaGFyIHZhbDsKKworCXZhbCA9IEkzNjVfUkVHIChzbG90LCByZWcpOworCisJY2Jfd3JpdGViIChzLCB2YWwpOworCWNiX3dyaXRlYjIgKHMsIGRhdGEpOworCisJZGVidWcgKCJpMzY1X3NldCBzbG90OiV4IHJlZzogJXggZGF0YToleFxuIiwgc2xvdCwgcmVnLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgaTM2NV9ic2V0IChzb2NrZXRfaW5mb190ICogcywgdV9zaG9ydCByZWcsIHVfY2hhciBtYXNrKQoreworCWkzNjVfc2V0IChzLCByZWcsIGkzNjVfZ2V0IChzLCByZWcpIHwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGkzNjVfYmNsciAoc29ja2V0X2luZm9fdCAqIHMsIHVfc2hvcnQgcmVnLCB1X2NoYXIgbWFzaykKK3sKKwlpMzY1X3NldCAocywgcmVnLCBpMzY1X2dldCAocywgcmVnKSAmIH5tYXNrKTsKK30KKworI2lmIDAJLyogbm90IHVzZWQgKi8KK3N0YXRpYyB2b2lkIGkzNjVfYmZsaXAgKHNvY2tldF9pbmZvX3QgKiBzLCB1X3Nob3J0IHJlZywgdV9jaGFyIG1hc2ssIGludCBiKQoreworCXVfY2hhciBkID0gaTM2NV9nZXQgKHMsIHJlZyk7CisKKwlpMzY1X3NldCAocywgcmVnLCAoYikgPyAoZCB8IG1hc2spIDogKGQgJiB+bWFzaykpOworfQorCitzdGF0aWMgdV9zaG9ydCBpMzY1X2dldF9wYWlyIChzb2NrZXRfaW5mb190ICogcywgdV9zaG9ydCByZWcpCit7CisJcmV0dXJuIChpMzY1X2dldCAocywgcmVnKSArIChpMzY1X2dldCAocywgcmVnICsgMSkgPDwgOCkpOworfQorI2VuZGlmCS8qIG5vdCB1c2VkICovCisKK3N0YXRpYyB2b2lkIGkzNjVfc2V0X3BhaXIgKHNvY2tldF9pbmZvX3QgKiBzLCB1X3Nob3J0IHJlZywgdV9zaG9ydCBkYXRhKQoreworCWkzNjVfc2V0IChzLCByZWcsIGRhdGEgJiAweGZmKTsKKwlpMzY1X3NldCAocywgcmVnICsgMSwgZGF0YSA+PiA4KTsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBDb2RlIHRvIHNhdmUgYW5kIHJlc3RvcmUgZ2xvYmFsIHN0YXRlIGluZm9ybWF0aW9uIGZvciBDaXJydXMKKyAgICBQRDY3eHggY29udHJvbGxlcnMsIGFuZCB0byBzZXQgYW5kIHJlcG9ydCBnbG9iYWwgY29uZmlndXJhdGlvbgorICAgIG9wdGlvbnMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIGZsaXAodixiLGYpICh2ID0gKChmKTwwKSA/IHYgOiAoKGYpID8gKCh2KXwoYikpIDogKCh2KSYofmIpKSkpCisKK3N0YXRpYyB2b2lkIGNpcnJ1c19nZXRfc3RhdGUgKHNvY2tldF9pbmZvX3QgKiBzKQoreworCWludCBpOworCWNpcnJ1c19zdGF0ZV90ICpwID0gJnMtPmNfc3RhdGU7CisKKwlwLT5taXNjMSA9IGkzNjVfZ2V0IChzLCBQRDY3X01JU0NfQ1RMXzEpOworCXAtPm1pc2MxICY9IChQRDY3X01DMV9NRURJQV9FTkEgfCBQRDY3X01DMV9JTlBBQ0tfRU5BKTsKKwlwLT5taXNjMiA9IGkzNjVfZ2V0IChzLCBQRDY3X01JU0NfQ1RMXzIpOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXAtPnRpbWVyW2ldID0gaTM2NV9nZXQgKHMsIFBENjdfVElNRV9TRVRVUCAoMCkgKyBpKTsKKworfQorCitzdGF0aWMgdm9pZCBjaXJydXNfc2V0X3N0YXRlIChzb2NrZXRfaW5mb190ICogcykKK3sKKwlpbnQgaTsKKwl1X2NoYXIgbWlzYzsKKwljaXJydXNfc3RhdGVfdCAqcCA9ICZzLT5jX3N0YXRlOworCisJbWlzYyA9IGkzNjVfZ2V0IChzLCBQRDY3X01JU0NfQ1RMXzIpOworCWkzNjVfc2V0IChzLCBQRDY3X01JU0NfQ1RMXzIsIHAtPm1pc2MyKTsKKwlpZiAobWlzYyAmIFBENjdfTUMyX1NVU1BFTkQpCisJCXVkZWxheSAoNTAwMDApOworCW1pc2MgPSBpMzY1X2dldCAocywgUEQ2N19NSVNDX0NUTF8xKTsKKwltaXNjICY9IH4oUEQ2N19NQzFfTUVESUFfRU5BIHwgUEQ2N19NQzFfSU5QQUNLX0VOQSk7CisJaTM2NV9zZXQgKHMsIFBENjdfTUlTQ19DVExfMSwgbWlzYyB8IHAtPm1pc2MxKTsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlpMzY1X3NldCAocywgUEQ2N19USU1FX1NFVFVQICgwKSArIGksIHAtPnRpbWVyW2ldKTsKK30KKworc3RhdGljIHVfaW50IGNpcnJ1c19zZXRfb3B0cyAoc29ja2V0X2luZm9fdCAqIHMpCit7CisJY2lycnVzX3N0YXRlX3QgKnAgPSAmcy0+Y19zdGF0ZTsKKwl1X2ludCBtYXNrID0gMHhmZmZmOworI2lmIERFQlVHCisJY2hhciBidWZbMjAwXTsKKworCW1lbXNldCAoYnVmLCAwLCAyMDApOworI2VuZGlmCisKKwlpZiAoaGFzX3JpbmcgPT0gLTEpCisJCWhhc19yaW5nID0gMTsKKwlmbGlwIChwLT5taXNjMiwgUEQ2N19NQzJfSVJRMTVfUkksIGhhc19yaW5nKTsKKwlmbGlwIChwLT5taXNjMiwgUEQ2N19NQzJfRFlOQU1JQ19NT0RFLCBkeW5hbWljX21vZGUpOworI2lmIERFQlVHCisJaWYgKHAtPm1pc2MyICYgUEQ2N19NQzJfSVJRMTVfUkkpCisJCXN0cmNhdCAoYnVmLCAiIFtyaW5nXSIpOworCWlmIChwLT5taXNjMiAmIFBENjdfTUMyX0RZTkFNSUNfTU9ERSkKKwkJc3RyY2F0IChidWYsICIgW2R5biBtb2RlXSIpOworCWlmIChwLT5taXNjMSAmIFBENjdfTUMxX0lOUEFDS19FTkEpCisJCXN0cmNhdCAoYnVmLCAiIFtpbnBhY2tdIik7CisjZW5kaWYKKworCWlmIChwLT5taXNjMiAmIFBENjdfTUMyX0lSUTE1X1JJKQorCQltYXNrICY9IH4weDgwMDA7CisJaWYgKGhhc19sZWQgPiAwKSB7CisjaWYgREVCVUcKKwkJc3RyY2F0IChidWYsICIgW2xlZF0iKTsKKyNlbmRpZgorCQltYXNrICY9IH4weDEwMDA7CisJfQorCWlmIChoYXNfZG1hID4gMCkgeworI2lmIERFQlVHCisJCXN0cmNhdCAoYnVmLCAiIFtkbWFdIik7CisjZW5kaWYKKwkJbWFzayAmPSB+MHgwNjAwOworCQlmbGlwIChwLT5taXNjMiwgUEQ2N19NQzJfRlJFUV9CWVBBU1MsIGZyZXFfYnlwYXNzKTsKKyNpZiBERUJVRworCQlpZiAocC0+bWlzYzIgJiBQRDY3X01DMl9GUkVRX0JZUEFTUykKKwkJCXN0cmNhdCAoYnVmLCAiIFtmcmVxIGJ5cGFzc10iKTsKKyNlbmRpZgorCX0KKworCWlmIChzZXR1cF90aW1lID49IDApCisJCXAtPnRpbWVyWzBdID0gcC0+dGltZXJbM10gPSBzZXR1cF90aW1lOworCWlmIChjbWRfdGltZSA+IDApIHsKKwkJcC0+dGltZXJbMV0gPSBjbWRfdGltZTsKKwkJcC0+dGltZXJbNF0gPSBjbWRfdGltZSAqIDIgKyA0OworCX0KKwlpZiAocC0+dGltZXJbMV0gPT0gMCkgeworCQlwLT50aW1lclsxXSA9IDY7CisJCXAtPnRpbWVyWzRdID0gMTY7CisJCWlmIChwLT50aW1lclswXSA9PSAwKQorCQkJcC0+dGltZXJbMF0gPSBwLT50aW1lclszXSA9IDE7CisJfQorCWlmIChyZWNvdl90aW1lID49IDApCisJCXAtPnRpbWVyWzJdID0gcC0+dGltZXJbNV0gPSByZWNvdl90aW1lOworCisJZGVidWcgKCJpODIzNjUgT3B0OiAlcyBbJWQvJWQvJWRdIFslZC8lZC8lZF1cbiIsCisJCWJ1ZiwKKwkJcC0+dGltZXJbMF0sIHAtPnRpbWVyWzFdLCBwLT50aW1lclsyXSwKKwkJcC0+dGltZXJbM10sIHAtPnRpbWVyWzRdLCBwLT50aW1lcls1XSk7CisKKwlyZXR1cm4gbWFzazsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lcyB0byBoYW5kbGUgY29tbW9uIENhcmRCdXMgb3B0aW9ucworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyogRGVmYXVsdCBzZXR0aW5ncyBmb3IgUENJIGNvbW1hbmQgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBDTURfREZMVCAoUENJX0NPTU1BTkRfSU98UENJX0NPTU1BTkRfTUVNT1JZfCBcCisJCSAgUENJX0NPTU1BTkRfTUFTVEVSfFBDSV9DT01NQU5EX1dBSVQpCisKK3N0YXRpYyB2b2lkIGNiX2dldF9zdGF0ZSAoc29ja2V0X2luZm9fdCAqIHMpCit7CisJcGNpX3JlYWRiIChzLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmcy0+Y2FjaGUpOworCXBjaV9yZWFkYiAocywgUENJX0xBVEVOQ1lfVElNRVIsICZzLT5wY2lfbGF0KTsKKwlwY2lfcmVhZGIgKHMsIENCX0xBVEVOQ1lfVElNRVIsICZzLT5jYl9sYXQpOworCXBjaV9yZWFkYiAocywgQ0JfQ0FSREJVU19CVVMsICZzLT5jYXAuY2FyZGJ1cyk7CisJcGNpX3JlYWRiIChzLCBDQl9TVUJPUkRfQlVTLCAmcy0+c3ViX2J1cyk7CisJcGNpX3JlYWR3IChzLCBDQl9CUklER0VfQ09OVFJPTCwgJnMtPmJjcik7Cit9CisKK3N0YXRpYyB2b2lkIGNiX3NldF9zdGF0ZSAoc29ja2V0X2luZm9fdCAqIHMpCit7CisJcGNpX3dyaXRldyAocywgUENJX0NPTU1BTkQsIENNRF9ERkxUKTsKKwlwY2lfd3JpdGViIChzLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCBzLT5jYWNoZSk7CisJcGNpX3dyaXRlYiAocywgUENJX0xBVEVOQ1lfVElNRVIsIHMtPnBjaV9sYXQpOworCXBjaV93cml0ZWIgKHMsIENCX0xBVEVOQ1lfVElNRVIsIHMtPmNiX2xhdCk7CisJcGNpX3dyaXRlYiAocywgQ0JfQ0FSREJVU19CVVMsIHMtPmNhcC5jYXJkYnVzKTsKKwlwY2lfd3JpdGViIChzLCBDQl9TVUJPUkRfQlVTLCBzLT5zdWJfYnVzKTsKKwlwY2lfd3JpdGV3IChzLCBDQl9CUklER0VfQ09OVFJPTCwgcy0+YmNyKTsKK30KKworc3RhdGljIHZvaWQgY2Jfc2V0X29wdHMgKHNvY2tldF9pbmZvX3QgKiBzKQoreworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFBvd2VyIGNvbnRyb2wgZm9yIENhcmRidXMgY29udHJvbGxlcnM6IHVzZWQgYm90aCBmb3IgMTYtYml0IGFuZAorICAgIENhcmRidXMgY2FyZHMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGNiX3NldF9wb3dlciAoc29ja2V0X2luZm9fdCAqIHMsIHNvY2tldF9zdGF0ZV90ICogc3RhdGUpCit7CisJdV9pbnQgcmVnID0gMDsKKworCXJlZyA9IEkzNjVfUFdSX05PUkVTRVQ7CisJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1BXUl9BVVRPKQorCQlyZWcgfD0gSTM2NV9QV1JfQVVUTzsKKwlpZiAoc3RhdGUtPmZsYWdzICYgU1NfT1VUUFVUX0VOQSkKKwkJcmVnIHw9IEkzNjVfUFdSX09VVDsKKwlpZiAoc3RhdGUtPlZwcCAhPSAwKSB7CisJCWlmIChzdGF0ZS0+VnBwID09IDEyMCkgeworCQkJcmVnIHw9IEkzNjVfVlBQMV8xMlY7CisJCQlwdXRzICgiIDEyViBjYXJkIGZvdW5kOiAiKTsKKwkJfSBlbHNlIGlmIChzdGF0ZS0+VnBwID09IHN0YXRlLT5WY2MpIHsKKwkJCXJlZyB8PSBJMzY1X1ZQUDFfNVY7CisJCX0gZWxzZSB7CisJCQlwdXRzICgiIHBvd2VyIG5vdCBmb3VuZDogIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKHN0YXRlLT5WY2MgIT0gMCkgeworCQlyZWcgfD0gSTM2NV9WQ0NfNVY7CisJCWlmIChzdGF0ZS0+VmNjID09IDMzKSB7CisJCQlwdXRzICgiIDMuM1YgY2FyZCBmb3VuZDogIik7CisJCQlpMzY1X2JzZXQgKHMsIFBENjdfTUlTQ19DVExfMSwgUEQ2N19NQzFfVkNDXzNWKTsKKwkJfSBlbHNlIGlmIChzdGF0ZS0+VmNjID09IDUwKSB7CisJCQlwdXRzICgiIDVWIGNhcmQgZm91bmQ6ICIpOworCQkJaTM2NV9iY2xyIChzLCBQRDY3X01JU0NfQ1RMXzEsIFBENjdfTUMxX1ZDQ18zVik7CisJCX0gZWxzZSB7CisJCQlwdXRzICgiIHBvd2VyIG5vdCBmb3VuZDogIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAocmVnICE9IGkzNjVfZ2V0IChzLCBJMzY1X1BPV0VSKSkgeworCQlyZWcgPSAoSTM2NV9QV1JfT1VUIHwgSTM2NV9QV1JfTk9SRVNFVCB8IEkzNjVfVkNDXzVWIHwgSTM2NV9WUFAxXzVWKTsKKwkJaTM2NV9zZXQgKHMsIEkzNjVfUE9XRVIsIHJlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgR2VuZXJpYyByb3V0aW5lcyB0byBnZXQgYW5kIHNldCBjb250cm9sbGVyIG9wdGlvbnMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGdldF9icmlkZ2Vfc3RhdGUgKHNvY2tldF9pbmZvX3QgKiBzKQoreworCWNpcnJ1c19nZXRfc3RhdGUgKHMpOworCWNiX2dldF9zdGF0ZSAocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9icmlkZ2Vfc3RhdGUgKHNvY2tldF9pbmZvX3QgKiBzKQoreworCWNiX3NldF9zdGF0ZSAocyk7CisJaTM2NV9zZXQgKHMsIEkzNjVfR0JMQ1RMLCAweDAwKTsKKwlpMzY1X3NldCAocywgSTM2NV9HRU5DVEwsIDB4MDApOworCWNpcnJ1c19zZXRfc3RhdGUgKHMpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYnJpZGdlX29wdHMgKHNvY2tldF9pbmZvX3QgKiBzKQoreworCWNpcnJ1c19zZXRfb3B0cyAocyk7CisJY2Jfc2V0X29wdHMgKHMpOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgUEQ2N19FWFRfSU5ERVgJCTB4MmUJLyogRXh0ZW5zaW9uIGluZGV4ICovCisjZGVmaW5lIFBENjdfRVhUX0RBVEEJCTB4MmYJLyogRXh0ZW5zaW9uIGRhdGEgKi8KKyNkZWZpbmUgUEQ2N19FWERfVlMxKHMpCQkoMHgwMSA8PCAoKHMpPDwxKSkKKworI2RlZmluZSBwZDY3X2V4dF9nZXQocywgcikgXAorICAgIChpMzY1X3NldChzLCBQRDY3X0VYVF9JTkRFWCwgciksIGkzNjVfZ2V0KHMsIFBENjdfRVhUX0RBVEEpKQorCitzdGF0aWMgaW50IGkzNjVfZ2V0X3N0YXR1cyAoc29ja2V0X2luZm9fdCAqIHMsIHVfaW50ICogdmFsdWUpCit7CisJdV9pbnQgc3RhdHVzOworCXVfY2hhciB2YWw7CisJdV9jaGFyIHBvd2VyLCB2Y2MsIHZwcDsKKwl1X2ludCBwb3dlcnN0YXRlOworCisJc3RhdHVzID0gaTM2NV9nZXQgKHMsIEkzNjVfSURFTlQpOworCXN0YXR1cyA9IGkzNjVfZ2V0IChzLCBJMzY1X1NUQVRVUyk7CisJKnZhbHVlID0gKChzdGF0dXMgJiBJMzY1X0NTX0RFVEVDVCkgPT0gSTM2NV9DU19ERVRFQ1QpID8gU1NfREVURUNUIDogMDsKKwlpZiAoaTM2NV9nZXQgKHMsIEkzNjVfSU5UQ1RMKSAmIEkzNjVfUENfSU9DQVJEKSB7CisJCSp2YWx1ZSB8PSAoc3RhdHVzICYgSTM2NV9DU19TVFNDSEcpID8gMCA6IFNTX1NUU0NIRzsKKwl9IGVsc2UgeworCQkqdmFsdWUgfD0gKHN0YXR1cyAmIEkzNjVfQ1NfQlZEMSkgPyAwIDogU1NfQkFUREVBRDsKKwkJKnZhbHVlIHw9IChzdGF0dXMgJiBJMzY1X0NTX0JWRDIpID8gMCA6IFNTX0JBVFdBUk47CisJfQorCSp2YWx1ZSB8PSAoc3RhdHVzICYgSTM2NV9DU19XUlBST1QpID8gU1NfV1JQUk9UIDogMDsKKwkqdmFsdWUgfD0gKHN0YXR1cyAmIEkzNjVfQ1NfUkVBRFkpID8gU1NfUkVBRFkgOiAwOworCSp2YWx1ZSB8PSAoc3RhdHVzICYgSTM2NV9DU19QT1dFUk9OKSA/IFNTX1BPV0VST04gOiAwOworCisJLyogQ2hlY2sgZm9yIENpcnJ1cyBDTC1QRDY3eHggY2hpcHMgKi8KKwlpMzY1X3NldCAocywgUEQ2N19DSElQX0lORk8sIDApOworCXZhbCA9IGkzNjVfZ2V0IChzLCBQRDY3X0NISVBfSU5GTyk7CisJcy0+dHlwZSA9IC0xOworCWlmICgodmFsICYgUEQ2N19JTkZPX0NISVBfSUQpID09IFBENjdfSU5GT19DSElQX0lEKSB7CisJCXZhbCA9IGkzNjVfZ2V0IChzLCBQRDY3X0NISVBfSU5GTyk7CisJCWlmICgodmFsICYgUEQ2N19JTkZPX0NISVBfSUQpID09IDApIHsKKwkJCXMtPnR5cGUgPSAodmFsICYgUEQ2N19JTkZPX1NMT1RTKSA/IElTX1BENjcyWCA6IElTX1BENjcxMDsKKwkJCWkzNjVfc2V0IChzLCBQRDY3X0VYVF9JTkRFWCwgMHhlNSk7CisJCQlpZiAoaTM2NV9nZXQgKHMsIFBENjdfRVhUX0lOREVYKSAhPSAweGU1KQorCQkJCXMtPnR5cGUgPSBJU19WVDgzQzQ2OTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ZiAoIm5vIENpcnJ1cyBDaGlwIGZvdW5kXG4iKTsKKwkJKnZhbHVlID0gMDsKIAkJcmV0dXJuIC0xOwogCX0KLQkvKiAtIDB4ZmUwMDAwMDAgc2VlIE1QQyA4MjQ1IFVzZXJzIE1hbnVhbCBBZHJlc3MgTWFwIEIgKi8KLQltZW1iYXNlQ3NyID0gUENNQ0lBX0lPX0JBU0UgLSAweGZlMDAwMDAwOworCisJcG93ZXIgPSBpMzY1X2dldCAocywgSTM2NV9QT1dFUik7CisJc3RhdGUuZmxhZ3MgfD0gKHBvd2VyICYgSTM2NV9QV1JfQVVUTykgPyBTU19QV1JfQVVUTyA6IDA7CisJc3RhdGUuZmxhZ3MgfD0gKHBvd2VyICYgSTM2NV9QV1JfT1VUKSA/IFNTX09VVFBVVF9FTkEgOiAwOworCXZjYyA9IHBvd2VyICYgSTM2NV9WQ0NfTUFTSzsKKwl2cHAgPSBwb3dlciAmIEkzNjVfVlBQMV9NQVNLOworCXN0YXRlLlZjYyA9IHN0YXRlLlZwcCA9IDA7CisJaWYoKHZjYz09IDApIHx8ICh2cHAgPT0gMCkpIHsKKwkJLyoKKwkJICogT24gdGhlIENpcnJ1cyB3ZSBnZXQgdGhlIGluZm8gd2hpY2ggY2FyZCB2b2x0YWdlCisJCSAqIHdlIGhhdmUgaW4gRVhURVJOIERBVEEgYW5kIHdyaXRlIGl0IHRvIE1JU0NfQ1RMMQorCQkgKi8KKwkJcG93ZXJzdGF0ZSA9IHBkNjdfZXh0X2dldChzLCBQRDY3X0VYVEVSTl9EQVRBKTsKKwkJaWYgKHBvd2Vyc3RhdGUgJiBQRDY3X0VYRF9WUzEoMCkpIHsKKwkJCS8qIDVWIENhcmQgKi8KKwkJCWkzNjVfYmNsciAocywgUEQ2N19NSVNDX0NUTF8xLCBQRDY3X01DMV9WQ0NfM1YpOworCQl9IGVsc2UgeworCQkJLyogMy4zViBDYXJkICovCisJCQlpMzY1X2JzZXQgKHMsIFBENjdfTUlTQ19DVExfMSwgUEQ2N19NQzFfVkNDXzNWKTsKKwkJfQorCQlpMzY1X3NldCAocywgSTM2NV9QT1dFUiwgKEkzNjVfUFdSX09VVCB8IEkzNjVfUFdSX05PUkVTRVQgfCBJMzY1X1ZDQ181ViB8IEkzNjVfVlBQMV81VikpOworCQlwb3dlciA9IGkzNjVfZ2V0IChzLCBJMzY1X1BPV0VSKTsKKwl9CisJaWYgKHBvd2VyICYgSTM2NV9WQ0NfNVYpIHsKKwkJc3RhdGUuVmNjID0gKGkzNjVfZ2V0KHMsIFBENjdfTUlTQ19DVExfMSkgJiBQRDY3X01DMV9WQ0NfM1YpID8gMzMgOiA1MDsKKwl9CisKKwlpZiAocG93ZXIgPT0gSTM2NV9WUFAxXzEyVikKKwkJc3RhdGUuVnBwID0gMTIwOworCisJLyogSU8gY2FyZCwgUkVTRVQgZmxhZ3MsIElPIGludGVycnVwdCAqLworCXBvd2VyID0gaTM2NV9nZXQgKHMsIEkzNjVfSU5UQ1RMKTsKKwlzdGF0ZS5mbGFncyB8PSAocG93ZXIgJiBJMzY1X1BDX1JFU0VUKSA/IDAgOiBTU19SRVNFVDsKKwlpZiAocG93ZXIgJiBJMzY1X1BDX0lPQ0FSRCkKKwkJc3RhdGUuZmxhZ3MgfD0gU1NfSU9DQVJEOworCXN0YXRlLmlvX2lycSA9IHBvd2VyICYgSTM2NV9JUlFfTUFTSzsKKworCS8qIENhcmQgc3RhdHVzIGNoYW5nZSBtYXNrICovCisJcG93ZXIgPSBpMzY1X2dldCAocywgSTM2NV9DU0NJTlQpOworCXN0YXRlLmNzY19tYXNrID0gKHBvd2VyICYgSTM2NV9DU0NfREVURUNUKSA/IFNTX0RFVEVDVCA6IDA7CisJaWYgKHN0YXRlLmZsYWdzICYgU1NfSU9DQVJEKQorCQlzdGF0ZS5jc2NfbWFzayB8PSAocG93ZXIgJiBJMzY1X0NTQ19TVFNDSEcpID8gU1NfU1RTQ0hHIDogMDsKKwllbHNlIHsKKwkJc3RhdGUuY3NjX21hc2sgfD0gKHBvd2VyICYgSTM2NV9DU0NfQlZEMSkgPyBTU19CQVRERUFEIDogMDsKKwkJc3RhdGUuY3NjX21hc2sgfD0gKHBvd2VyICYgSTM2NV9DU0NfQlZEMikgPyBTU19CQVRXQVJOIDogMDsKKwkJc3RhdGUuY3NjX21hc2sgfD0gKHBvd2VyICYgSTM2NV9DU0NfUkVBRFkpID8gU1NfUkVBRFkgOiAwOworCX0KKwlkZWJ1ZyAoImk4MjM2NTogR2V0U3RhdHVzKDApID0gZmxhZ3MgJSMzLjN4LCBWY2MgJWQsIFZwcCAlZCwgIgorCQkiaW9faXJxICVkLCBjc2NfbWFzayAlIzIuMnhcbiIsIHN0YXRlLmZsYWdzLAorCQlzdGF0ZS5WY2MsIHN0YXRlLlZwcCwgc3RhdGUuaW9faXJxLCBzdGF0ZS5jc2NfbWFzayk7CisKKwlyZXR1cm4gMDsKK30JLyogaTM2NV9nZXRfc3RhdHVzICovCisKK3N0YXRpYyBpbnQgaTM2NV9zZXRfc29ja2V0IChzb2NrZXRfaW5mb190ICogcywgc29ja2V0X3N0YXRlX3QgKiBzdGF0ZSkKK3sKKwl1X2NoYXIgcmVnOworCisJc2V0X2JyaWRnZV9zdGF0ZSAocyk7CisKKwkvKiBJTyBjYXJkLCBSRVNFVCBmbGFnICovCisJcmVnID0gMDsKKwlyZWcgfD0gKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSA/IDAgOiBJMzY1X1BDX1JFU0VUOworCXJlZyB8PSAoc3RhdGUtPmZsYWdzICYgU1NfSU9DQVJEKSA/IEkzNjVfUENfSU9DQVJEIDogMDsKKwlpMzY1X3NldCAocywgSTM2NV9JTlRDVEwsIHJlZyk7CisKKwljYl9zZXRfcG93ZXIgKHMsIHN0YXRlKTsKKworI2lmIDAKKwkvKiBDYXJkIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IG1hc2sgKi8KKwlyZWcgPSBzLT5jc19pcnEgPDwgNDsKKwlpZiAoc3RhdGUtPmNzY19tYXNrICYgU1NfREVURUNUKQorCQlyZWcgfD0gSTM2NV9DU0NfREVURUNUOworCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19JT0NBUkQpIHsKKwkJaWYgKHN0YXRlLT5jc2NfbWFzayAmIFNTX1NUU0NIRykKKwkJCXJlZyB8PSBJMzY1X0NTQ19TVFNDSEc7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXRlLT5jc2NfbWFzayAmIFNTX0JBVERFQUQpCisJCQlyZWcgfD0gSTM2NV9DU0NfQlZEMTsKKwkJaWYgKHN0YXRlLT5jc2NfbWFzayAmIFNTX0JBVFdBUk4pCisJCQlyZWcgfD0gSTM2NV9DU0NfQlZEMjsKKwkJaWYgKHN0YXRlLT5jc2NfbWFzayAmIFNTX1JFQURZKQorCQkJcmVnIHw9IEkzNjVfQ1NDX1JFQURZOworCX0KKwlpMzY1X3NldCAocywgSTM2NV9DU0NJTlQsIHJlZyk7CisJaTM2NV9nZXQgKHMsIEkzNjVfQ1NDKTsKKyNlbmRpZgkvKiAwICovCisKKwlyZXR1cm4gMDsKK30JLyogaTM2NV9zZXRfc29ja2V0ICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGkzNjVfc2V0X21lbV9tYXAgKHNvY2tldF9pbmZvX3QgKiBzLCBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1lbSkKK3sKKwl1X3Nob3J0IGJhc2UsIGk7CisJdV9jaGFyIG1hcDsKKworCWRlYnVnICgiaTgyMzY1OiBTZXRNZW1NYXAoJWQsICUjMi4yeCwgJWQgbnMsICUjNS41bHgtJSM1LjVseCwgJSM1LjV4KVxuIiwKKwkJbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsIG1lbS0+c3BlZWQsCisJCW1lbS0+c3lzX3N0YXJ0LCBtZW0tPnN5c19zdG9wLCBtZW0tPmNhcmRfc3RhcnQpOworCisJbWFwID0gbWVtLT5tYXA7CisJaWYgKChtYXAgPiA0KSB8fAorCSAgICAobWVtLT5jYXJkX3N0YXJ0ID4gMHgzZmZmZmZmKSB8fAorCSAgICAobWVtLT5zeXNfc3RhcnQgPiBtZW0tPnN5c19zdG9wKSB8fAorCSAgICAobWVtLT5zcGVlZCA+IDEwMDApKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBUdXJuIG9mZiB0aGUgd2luZG93IGJlZm9yZSBjaGFuZ2luZyBhbnl0aGluZyAqLworCWlmIChpMzY1X2dldCAocywgSTM2NV9BRERSV0lOKSAmIEkzNjVfRU5BX01FTSAobWFwKSkKKwkJaTM2NV9iY2xyIChzLCBJMzY1X0FERFJXSU4sIEkzNjVfRU5BX01FTSAobWFwKSk7CisKKwkvKiBUYWtlIGNhcmUgb2YgaGlnaCBieXRlLCBmb3IgUENJIGNvbnRyb2xsZXJzICovCisJaTM2NV9zZXQgKHMsIENCX01FTV9QQUdFIChtYXApLCBtZW0tPnN5c19zdGFydCA+PiAyNCk7CisKKwliYXNlID0gSTM2NV9NRU0gKG1hcCk7CisJaSA9IChtZW0tPnN5c19zdGFydCA+PiAxMikgJiAweDBmZmY7CisJaWYgKG1lbS0+ZmxhZ3MgJiBNQVBfMTZCSVQpCisJCWkgfD0gSTM2NV9NRU1fMTZCSVQ7CisJaWYgKG1lbS0+ZmxhZ3MgJiBNQVBfMFdTKQorCQlpIHw9IEkzNjVfTUVNXzBXUzsKKwlpMzY1X3NldF9wYWlyIChzLCBiYXNlICsgSTM2NV9XX1NUQVJULCBpKTsKKworCWkgPSAobWVtLT5zeXNfc3RvcCA+PiAxMikgJiAweDBmZmY7CisJc3dpdGNoIChtZW0tPnNwZWVkIC8gQ1lDTEVfVElNRSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpIHw9IEkzNjVfTUVNX1dTMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpIHw9IEkzNjVfTUVNX1dTMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaSB8PSBJMzY1X01FTV9XUzEgfCBJMzY1X01FTV9XUzA7CisJCWJyZWFrOworCX0KKwlpMzY1X3NldF9wYWlyIChzLCBiYXNlICsgSTM2NV9XX1NUT1AsIGkpOworCisJaSA9IDA7CisJaWYgKG1lbS0+ZmxhZ3MgJiBNQVBfV1JQUk9UKQorCQlpIHw9IEkzNjVfTUVNX1dSUFJPVDsKKwlpZiAobWVtLT5mbGFncyAmIE1BUF9BVFRSSUIpCisJCWkgfD0gSTM2NV9NRU1fUkVHOworCWkzNjVfc2V0X3BhaXIgKHMsIGJhc2UgKyBJMzY1X1dfT0ZGLCBpKTsKKworCS8qIHNldCBTeXN0ZW0gTWVtb3J5IG1hcCBVcHBlciBBZHJlc3MgKi8KKwlpMzY1X3NldChzLCBQRDY3X0VYVF9JTkRFWCwgUEQ2N19NRU1fUEFHRShtYXApKTsKKwlpMzY1X3NldChzLCBQRDY3X0VYVF9EQVRBLCAoKG1lbS0+c3lzX3N0YXJ0ID4+IDI0KSAmIDB4ZmYpKTsKKworCS8qIFR1cm4gb24gdGhlIHdpbmRvdyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobWVtLT5mbGFncyAmIE1BUF9BQ1RJVkUpCisJCWkzNjVfYnNldCAocywgSTM2NV9BRERSV0lOLCBJMzY1X0VOQV9NRU0gKG1hcCkpOworCXJldHVybiAwOworfQkvKiBpMzY1X3NldF9tZW1fbWFwICovCisKK3N0YXRpYyBpbnQgaTM2NV9zZXRfaW9fbWFwIChzb2NrZXRfaW5mb190ICogcywgc3RydWN0IHBjY2FyZF9pb19tYXAgKmlvKQoreworCXVfY2hhciBtYXAsIGlvY3RsOworCisJbWFwID0gaW8tPm1hcDsKKwkvKiBjb21tZW50IG91dDogY29tcGFyaXNvbiBpcyBhbHdheXMgZmFsc2UgZHVlIHRvIGxpbWl0ZWQgcmFuZ2Ugb2YgZGF0YSB0eXBlICovCisJaWYgKChtYXAgPiAxKSB8fCAvKiAoaW8tPnN0YXJ0ID4gMHhmZmZmKSB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8ICovCisJICAgIChpby0+c3RvcCA8IGlvLT5zdGFydCkpCisJCXJldHVybiAtMTsKKwkvKiBUdXJuIG9mZiB0aGUgd2luZG93IGJlZm9yZSBjaGFuZ2luZyBhbnl0aGluZyAqLworCWlmIChpMzY1X2dldCAocywgSTM2NV9BRERSV0lOKSAmIEkzNjVfRU5BX0lPIChtYXApKQorCQlpMzY1X2JjbHIgKHMsIEkzNjVfQUREUldJTiwgSTM2NV9FTkFfSU8gKG1hcCkpOworCWkzNjVfc2V0X3BhaXIgKHMsIEkzNjVfSU8gKG1hcCkgKyBJMzY1X1dfU1RBUlQsIGlvLT5zdGFydCk7CisJaTM2NV9zZXRfcGFpciAocywgSTM2NV9JTyAobWFwKSArIEkzNjVfV19TVE9QLCBpby0+c3RvcCk7CisJaW9jdGwgPSBpMzY1X2dldCAocywgSTM2NV9JT0NUTCkgJiB+STM2NV9JT0NUTF9NQVNLIChtYXApOworCWlmIChpby0+c3BlZWQpCisJCWlvY3RsIHw9IEkzNjVfSU9DVExfV0FJVCAobWFwKTsKKwlpZiAoaW8tPmZsYWdzICYgTUFQXzBXUykKKwkJaW9jdGwgfD0gSTM2NV9JT0NUTF8wV1MgKG1hcCk7CisJaWYgKGlvLT5mbGFncyAmIE1BUF8xNkJJVCkKKwkJaW9jdGwgfD0gSTM2NV9JT0NUTF8xNkJJVCAobWFwKTsKKwlpZiAoaW8tPmZsYWdzICYgTUFQX0FVVE9TWikKKwkJaW9jdGwgfD0gSTM2NV9JT0NUTF9JT0NTMTYgKG1hcCk7CisJaTM2NV9zZXQgKHMsIEkzNjVfSU9DVEwsIGlvY3RsKTsKKwkvKiBUdXJuIG9uIHRoZSB3aW5kb3cgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGlvLT5mbGFncyAmIE1BUF9BQ1RJVkUpCisJCWkzNjVfYnNldCAocywgSTM2NV9BRERSV0lOLCBJMzY1X0VOQV9JTyAobWFwKSk7CisJcmV0dXJuIDA7Cit9CS8qIGkzNjVfc2V0X2lvX21hcCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAqIFBDSV9BRERSID0gKEhPU1RfQUREUiAtIDB4ZmUwMDAwMDApCisgKiBzZWUgTVBDIDgyNDUgVXNlcnMgTWFudWFsIEFkcmVzcyBNYXAgQgorICovCisjZGVmaW5lCUhPU1RfVE9fUENJKGFkZHIpCSgoYWRkcikgLSAweGZlMDAwMDAwKQorI2RlZmluZQlQQ0lfVE9fSE9TVChhZGRyKQkoKGFkZHIpICsgMHhmZTAwMDAwMCkKKworaW50IGk4MjM2NV9pbml0ICh2b2lkKQoreworCXVfaW50IHZhbDsKKwlpbnQgaTsKKworCWlmICgoc29ja2V0LmRldiA9IHBjaV9maW5kX2RldmljZXMgKHN1cHBvcnRlZCwgMCkpIDwgMCkgeworCQkvKiBDb250cm9sbGVyIG5vdCBmb3VuZCAqLworCQlwcmludGYgKCJObyBQRDY3MjkwIGRldmljZSBmb3VuZCAhIVxuIik7CisJCXJldHVybiAxOworCX0KKwlkZWJ1ZyAoImk4MjM2NSBEZXZpY2UgRm91bmQhXG4iKTsKKworCXNvY2tldC5jYl9waHlzID0gUENNQ0lBX0lPX0JBU0U7CiAKIAkvKiBzZXQgYmFzZSBhZGRyZXNzICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoZGV2bm8sIFBDSV9CQVNFX0FERFJFU1NfMCwgbWVtYmFzZUNzcik7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoc29ja2V0LmRldiwgUENJX0JBU0VfQUREUkVTU18wLAorCQlIT1NUX1RPX1BDSShzb2NrZXQuY2JfcGh5cykpOwogCiAJLyogZW5hYmxlIG1hcHBlZCBtZW1vcnkgYW5kIElPIGFkZHJlc3NlcyAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKGRldm5vLAorCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKHNvY2tldC5kZXYsCiAJCQkJUENJX0NPTU1BTkQsCiAJCQkJUENJX0NPTU1BTkRfTUVNT1JZIHwKIAkJCQlQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX1dBSVQpOworCisJZ2V0X2JyaWRnZV9zdGF0ZSAoJnNvY2tldCk7CisJc2V0X2JyaWRnZV9vcHRzICgmc29ja2V0KTsKKworCWkgPSBpMzY1X2dldF9zdGF0dXMgKCZzb2NrZXQsICZ2YWwpOworCisJaWYgKGkgPiAtMSkgeworCQlwdXRzIChwY2ljW3NvY2tldC50eXBlXS5uYW1lKTsKKwl9IGVsc2UgeworCQlwcmludGYgKCJpODIzNjU6IENvbnRyb2xsZXIgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiAxOworCX0KKwlpZigodmFsICYgU1NfREVURUNUKSAhPSBTU19ERVRFQ1QpeworCQlwdXRzICgiTm8gY2FyZFxuIik7CisJCXJldHVybiAxOworCX0KKworCXN0YXRlLmZsYWdzIHw9IFNTX09VVFBVVF9FTkE7CisKKwlpMzY1X3NldF9zb2NrZXQgKCZzb2NrZXQsICZzdGF0ZSk7CisKKwlmb3IgKGkgPSA1MDA7IGk7IGktLSkgeworCQlpZiAoKGkzNjVfZ2V0ICgmc29ja2V0LCBJMzY1X1NUQVRVUykgJiBJMzY1X0NTX1JFQURZKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkgKDEwMDApOworCX0KKworCWlmIChpID09IDApIHsKKwkJLyogUEMgQ2FyZCBub3QgcmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIgKi8KKwkJcHV0cyAoImk4MjM2NSBQQyBDYXJkIG5vdCByZWFkeSBmb3IgZGF0YSB0cmFuc2ZlclxuIik7CisJCXJldHVybiAxOworCX0KKwlkZWJ1ZyAoIiBQQyBDYXJkIHJlYWR5IGZvciBkYXRhIHRyYW5zZmVyOiAiKTsKKworCW1lbS5tYXAgPSAwOworCW1lbS5mbGFncyA9IE1BUF9BVFRSSUIgfCBNQVBfQUNUSVZFOworCW1lbS5zcGVlZCA9IDMwMDsKKwltZW0uc3lzX3N0YXJ0ID0gQ0ZHX1BDTUNJQV9NRU1fQUREUjsKKwltZW0uc3lzX3N0b3AgPSBDRkdfUENNQ0lBX01FTV9BRERSICsgQ0ZHX1BDTUNJQV9NRU1fU0laRSAtIDE7CisJbWVtLmNhcmRfc3RhcnQgPSAwOworCWkzNjVfc2V0X21lbV9tYXAgKCZzb2NrZXQsICZtZW0pOworCisJbWVtLm1hcCA9IDE7CisJbWVtLmZsYWdzID0gTUFQX0FDVElWRTsKKwltZW0uc3BlZWQgPSAzMDA7CisJbWVtLnN5c19zdGFydCA9IENGR19QQ01DSUFfTUVNX0FERFIgKyBDRkdfUENNQ0lBX01FTV9TSVpFOworCW1lbS5zeXNfc3RvcCA9IENGR19QQ01DSUFfTUVNX0FERFIgKyAoMiAqIENGR19QQ01DSUFfTUVNX1NJWkUpIC0gMTsKKwltZW0uY2FyZF9zdGFydCA9IDA7CisJaTM2NV9zZXRfbWVtX21hcCAoJnNvY2tldCwgJm1lbSk7CisKKyNpZmRlZiBERUJVRworCWk4MjM2NV9kdW1wX3JlZ2lvbnMgKHNvY2tldC5kZXYpOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KKwordm9pZCBpODIzNjVfZXhpdCAodm9pZCkKK3sKKwlpby5tYXAgPSAwOworCWlvLmZsYWdzID0gMDsKKwlpby5zcGVlZCA9IDA7CisJaW8uc3RhcnQgPSAwOworCWlvLnN0b3AgPSAweDE7CisKKwlpMzY1X3NldF9pb19tYXAgKCZzb2NrZXQsICZpbyk7CisKKwltZW0ubWFwID0gMDsKKwltZW0uZmxhZ3MgPSAwOworCW1lbS5zcGVlZCA9IDA7CisJbWVtLnN5c19zdGFydCA9IDA7CisJbWVtLnN5c19zdG9wID0gMHgxMDAwOworCW1lbS5jYXJkX3N0YXJ0ID0gMDsKKworCWkzNjVfc2V0X21lbV9tYXAgKCZzb2NrZXQsICZtZW0pOworCisJbWVtLm1hcCA9IDE7CisJbWVtLmZsYWdzID0gMDsKKwltZW0uc3BlZWQgPSAwOworCW1lbS5zeXNfc3RhcnQgPSAwOworCW1lbS5zeXNfc3RvcCA9IDB4MTAwMDsKKwltZW0uY2FyZF9zdGFydCA9IDA7CisKKwlpMzY1X3NldF9tZW1fbWFwICgmc29ja2V0LCAmbWVtKTsKKworCXN0YXRlLlZjYyA9IHN0YXRlLlZwcCA9IDA7CisKKwlpMzY1X3NldF9zb2NrZXQgKCZzb2NrZXQsICZzdGF0ZSk7Cit9CisKK2ludCBwY21jaWFfb24gKHZvaWQpCit7CisJdV9pbnQgcmM7CisKKwlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgIiBQQ01DSUFfU0xPVF9NU0cgIlxuIik7CisKKwlyYyA9IGk4MjM2NV9pbml0KCk7CisJaWYgKHJjKQorCQlnb3RvIGV4aXQ7CisKKwlyYyA9IGNoZWNrX2lkZV9kZXZpY2UoMCk7CisJaWYgKHJjID09IDApCisJCWdvdG8gZXhpdDsKKworCWk4MjM2NV9leGl0KCk7CisKK2V4aXQ6CisJcmV0dXJuIHJjOworfQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9vZmYgKHZvaWQpCit7CisJcHJpbnRmICgiRGlzYWJsZSBQQ01DSUEgIiBQQ01DSUFfU0xPVF9NU0cgIlxuIik7CisKKwlpODIzNjVfZXhpdCgpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBEZWJ1ZyBzdHVmZgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBpODIzNjVfZHVtcF9yZWdpb25zIChwY2lfZGV2X3QgZGV2KQoreworCXVfaW50IHRtcFsyXTsKKwl1X2ludCAqbWVtID0gKHZvaWQgKikgc29ja2V0LmNiX3BoeXM7CisJdV9jaGFyICpjaXMgPSAodm9pZCAqKSBDRkdfUENNQ0lBX01FTV9BRERSOworCXVfY2hhciAqaWRlID0gKHZvaWQgKikgKENGR19BVEFfQkFTRV9BRERSICsgQ0ZHX0FUQV9SRUdfT0ZGU0VUKTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoZGV2LCAweDAwLCB0bXAgKyAwKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQgKGRldiwgMHg4MCwgdG1wICsgMSk7CisKKwlwcmludGYgKCJQQ0kgQ09ORjogJTA4WCAuLi4gJTA4WFxuIiwKKwkJdG1wWzBdLCB0bXBbMV0pOworCXByaW50ZiAoIlBDSSBNRU06ICAuLi4gJTA4WCAuLi4gJTA4WFxuIiwKKwkJbWVtWzB4OCAvIDRdLCBtZW1bMHg4MDAgLyA0XSk7CisJcHJpbnRmICgiQ0lTOiAgICAgIC4uLiVjJWMlYyVjJWMlYyVjJWMuLi5cbiIsCisJCWNpc1sweDM4XSwgY2lzWzB4M2FdLCBjaXNbMHgzY10sIGNpc1sweDNlXSwKKwkJY2lzWzB4NDBdLCBjaXNbMHg0Ml0sIGNpc1sweDQ0XSwgY2lzWzB4NDhdKTsKKwlwcmludGYgKCJDSVMgQ09ORjogJTAyWCAlMDJYICUwMlggLi4uXG4iLAorCQljaXNbMHgyMDBdLCBjaXNbMHgyMDJdLCBjaXNbMHgyMDRdKTsKKwlwcmludGYgKCJJREU6ICAgICAgJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAorCQlpZGVbMF0sIGlkZVsxXSwgaWRlWzJdLCBpZGVbM10sCisJCWlkZVs0XSwgaWRlWzVdLCBpZGVbNl0sIGlkZVs3XSk7Cit9CisjZW5kaWYJLyogREVCVUcgKi8KKworI2VuZGlmIC8qIENPTkZJR19JODIzNjUgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2NwdTg2L01ha2VmaWxlIGIvYm9hcmQvY3B1ODYvTWFrZWZpbGUKaW5kZXggN2EyMDE0ZC4uMWI1N2QyYiAxMDA2NDQKLS0tIGEvYm9hcmQvY3B1ODYvTWFrZWZpbGUKKysrIGIvYm9hcmQvY3B1ODYvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9jcHU4Ny9NYWtlZmlsZSBiL2JvYXJkL2NwdTg3L01ha2VmaWxlCmluZGV4IDI2ZjUzZWQuLjFiNTdkMmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NwdTg3L01ha2VmaWxlCisrKyBiL2JvYXJkL2NwdTg3L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9jcHU4Ny9jcHU4Ny5jIGIvYm9hcmQvY3B1ODcvY3B1ODcuYwppbmRleCA4MzYzZDg2Li45ZmVjZGQwIDEwMDY0NAotLS0gYS9ib2FyZC9jcHU4Ny9jcHU4Ny5jCisrKyBiL2JvYXJkL2NwdTg3L2NwdTg3LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICovCiBpbnQgY2hlY2tib2FyZCAodm9pZCkKIHsKLQlwcmludGYgKCJCb2FyZDogQ1BVODcgKFJldiAlMDJ4KVxuIiwgQ1BVODZfUkVWKTsKKwlwcmludGYgKCJCb2FyZDogQ1BVODcgKFJldiAlMDJ4KVxuIiwgQ1BVODZfUkVWICYgMHg3Zik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MCw3ICsyODAsNyBAQAogCXZvbGF0aWxlIG1lbWN0bDgyNjBfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7CiAKICNpZm5kZWYgQ0ZHX1JBTUJPT1QKLQl1bG9uZyBzaXplOCwgc2l6ZTk7CisJdWxvbmcgc2l6ZTgsIHNpemU5LCBzaXplMTA7CiAjZW5kaWYKIAlsb25nIHBzaXplOwogCkBAIC0yOTQsMTcgKzI5NCwyNSBAQAogCSAqLwogCXNpemU4ID0gdHJ5X2luaXQgKG1lbWN0bCwgQ0ZHX1BTRE1SXzhDT0wsIENGR19PUjJfOENPTCwKIAkJCSAgKHVjaGFyICopIENGR19TRFJBTV9CQVNFKTsKKwogCXNpemU5ID0gdHJ5X2luaXQgKG1lbWN0bCwgQ0ZHX1BTRE1SXzlDT0wsIENGR19PUjJfOUNPTCwKIAkJCSAgKHVjaGFyICopIENGR19TRFJBTV9CQVNFKTsKIAotCWlmIChzaXplOCA8IHNpemU5KSB7Ci0JCXBzaXplID0gc2l6ZTk7Ci0JCXByaW50ZiAoIig2MHg6OUNPTCkgIik7Ci0JfSBlbHNlIHsKKwlzaXplMTAgPSB0cnlfaW5pdCAobWVtY3RsLCBDRkdfUFNETVJfMTBDT0wsIENGR19PUjJfMTBDT0wsCisJCQkgICh1Y2hhciAqKSBDRkdfU0RSQU1fQkFTRSk7CisKKwlwc2l6ZSA9IG1heChzaXplOCxtYXgoc2l6ZTksc2l6ZTEwKSk7CisKKwlpZiAocHNpemUgPT0gc2l6ZTgpIHsKIAkJcHNpemUgPSB0cnlfaW5pdCAobWVtY3RsLCBDRkdfUFNETVJfOENPTCwgQ0ZHX09SMl84Q09MLAogCQkJCSAgKHVjaGFyICopIENGR19TRFJBTV9CQVNFKTsKIAkJcHJpbnRmICgiKDYweDo4Q09MKSAiKTsKLQl9CisJfSBlbHNlIGlmIChwc2l6ZSA9PSBzaXplOSl7CisJCXBzaXplID0gdHJ5X2luaXQgKG1lbWN0bCwgQ0ZHX1BTRE1SXzlDT0wsIENGR19PUjJfOUNPTCwKKwkJCQkgICh1Y2hhciAqKSBDRkdfU0RSQU1fQkFTRSk7CisJCXByaW50ZiAoIig2MHg6OUNPTCkgIik7CisJfSBlbHNlCisJCXByaW50ZiAoIig2MHg6MTBDT0wpICIpOwogCiAjZW5kaWYJLyogQ0ZHX1JBTUJPT1QgKi8KIApkaWZmIC0tZ2l0IGEvYm9hcmQvY3JhZGxlL01ha2VmaWxlIGIvYm9hcmQvY3JhZGxlL01ha2VmaWxlCmluZGV4IDI2NWQ1MDAuLmM2YTVhMGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NyYWRsZS9NYWtlZmlsZQorKysgYi9ib2FyZC9jcmFkbGUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gY3JhZGxlLm8gZmxhc2gubworQ09CSlMJOj0gY3JhZGxlLm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3JheS9MMS9NYWtlZmlsZSBiL2JvYXJkL2NyYXkvTDEvTWFrZWZpbGUKaW5kZXggYmZlMDkyMi4uNDRlZjljMiAxMDA2NDQKLS0tIGEvYm9hcmQvY3JheS9MMS9NYWtlZmlsZQorKysgYi9ib2FyZC9jcmF5L0wxL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDM1ICsyMyw0MSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogU09CSlMJPSBpbml0Lm8KIAorCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKwogIyBIQUNLOiBkZXBlbmQgbmVlZHMgYm9vdHNjcmlwdC5jLCB3aGljaCBuZWVkcyB0b29scy9ta2ltYWdlLCB3aGljaCBpcyBub3QKICMgYnVpbHQgaW4gdGhlIGRlcGVuZCBzdGFnZS4gIFNvLi4uIHB1dCBib290c2NyaXB0Lm8gaGVyZSwgbm90IGluIE9CSlMKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKSBib290c2NyaXB0Lm8KKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKSAkKG9iailib290c2NyaXB0Lm8KIAkkKEFSKSBjcnYgJEAgJF4KIAogY2xlYW46Ci0Jcm0gLWYgJChTT0JKUykgJChPQkpTKSBib290c2NyaXB0LmMgYm9vdHNjcmlwdC5pbWFnZSBib290c2NyaXB0Lm8KKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpICQob2JqKWJvb3RzY3JpcHQuYyBcCisJCSQob2JqKWJvb3RzY3JpcHQuaW1hZ2UgJChvYmopYm9vdHNjcmlwdC5vCiAKIGRpc3RjbGVhbjoJY2xlYW4KIAlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCiAKLSQoQk9BUkQpLm8gOiAkKEJPQVJEKS5jIGJvb3RzY3JpcHQubworJChvYmopJChCT0FSRCkubyA6ICQoc3JjKSQoQk9BUkQpLmMgJChvYmopYm9vdHNjcmlwdC5vCiAKLWJvb3RzY3JpcHQuYzogYm9vdHNjcmlwdC5pbWFnZQorJChvYmopYm9vdHNjcmlwdC5jOiAkKG9iailib290c2NyaXB0LmltYWdlCiAJb2QgLXQgeDEgLXYgLUEgeCAkXiB8IGF3ayAtZiB4MmMuYXdrID4gJEAKIAotYm9vdHNjcmlwdC5pbWFnZTogYm9vdHNjcmlwdC5odXNoIE1ha2VmaWxlCi0JLSQoVE9QRElSKS90b29scy9ta2ltYWdlIC1BIHBwYyAtTyBsaW51eCAtVCBzY3JpcHQgLUMgbm9uZSAtYSAwIC1lIDAgLW4gYm9vdHNjcmlwdCAtZCAgYm9vdHNjcmlwdC5odXNoICRACiskKG9iailib290c2NyaXB0LmltYWdlOiAkKHNyYylib290c2NyaXB0Lmh1c2ggJChzcmMpTWFrZWZpbGUKKwktJChPQkpUUkVFKS90b29scy9ta2ltYWdlIC1BIHBwYyAtTyBsaW51eCAtVCBzY3JpcHQgLUMgbm9uZSAtYSAwIC1lIDAgLW4gYm9vdHNjcmlwdCAtZCAkKHNyYylib290c2NyaXB0Lmh1c2ggJEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlIGIvYm9hcmQvY3NiMjI2L01ha2VmaWxlCmluZGV4IDViMzExYTkuLjM0YzA3MWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NzYjIyNi9NYWtlZmlsZQorKysgYi9ib2FyZC9jc2IyMjYvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gY3NiMjI2Lm8gZmxhc2gubworQ09CSlMJOj0gY3NiMjI2Lm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjcyL01ha2VmaWxlIGIvYm9hcmQvY3NiMjcyL01ha2VmaWxlCmluZGV4IDkyNmUwNjUuLjdhY2I3YzggMTAwNjQ0Ci0tLSBhL2JvYXJkL2NzYjI3Mi9NYWtlZmlsZQorKysgYi9ib2FyZC9jc2IyNzIvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxNCArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotI09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KLSNPQkpTCT0gJChCT0FSRCkubyBzdHJhdGFmbGFzaC5vCi1PQkpTCT0gJChCT0FSRCkubworI0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCisjQ09CSlMJPSAkKEJPQVJEKS5vIHN0cmF0YWZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubwogCiBTT0JKUwk9IGluaXQubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICReCkBAIC00Myw5ICs0Niw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjQ3Mi9NYWtlZmlsZSBiL2JvYXJkL2NzYjQ3Mi9NYWtlZmlsZQppbmRleCA5MjZlMDY1Li43YWNiN2M4IDEwMDY0NAotLS0gYS9ib2FyZC9jc2I0NzIvTWFrZWZpbGUKKysrIGIvYm9hcmQvY3NiNDcyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTQgKzIzLDE3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLSNPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCi0jT0JKUwk9ICQoQk9BUkQpLm8gc3RyYXRhZmxhc2gubwotT0JKUwk9ICQoQk9BUkQpLm8KKyNDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworI0NPQkpTCT0gJChCT0FSRCkubyBzdHJhdGFmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8KIAogU09CSlMJPSBpbml0Lm8KIAorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkXgpAQCAtNDMsOSArNDYsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9jc2I2MzcvTWFrZWZpbGUgYi9ib2FyZC9jc2I2MzcvTWFrZWZpbGUKaW5kZXggNjFkNWEzNS4uZDc2NmVhMiAxMDA2NDQKLS0tIGEvYm9hcmQvY3NiNjM3L01ha2VmaWxlCisrKyBiL2JvYXJkL2NzYjYzNy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBjc2I2MzcubworQ09CSlMJOj0gY3NiNjM3Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9jdTgyNC9NYWtlZmlsZSBiL2JvYXJkL2N1ODI0L01ha2VmaWxlCmluZGV4IDdhMjAxNGQuLjFiNTdkMmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2N1ODI0L01ha2VmaWxlCisrKyBiL2JvYXJkL2N1ODI0L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2ZS9CMi9NYWtlZmlsZSBiL2JvYXJkL2RhdmUvQjIvTWFrZWZpbGUKaW5kZXggNTQ4ZmQ1Mi4uMTA2MDI1ZCAxMDA2NDQKLS0tIGEvYm9hcmQvZGF2ZS9CMi9NYWtlZmlsZQorKysgYi9ib2FyZC9kYXZlL0IyL01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMgCiAjIChDKSBDb3B5cmlnaHQgMjAwMgogIyBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KICMgTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgpAQCAtMjQsMTIgKzI3LDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gQjIubyBmbGFzaC5vCitDT0JKUwk6PSBCMi5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtNDAsOSArNDcsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmUvUFBDaGFtZWxlb25FVkIvTWFrZWZpbGUgYi9ib2FyZC9kYXZlL1BQQ2hhbWVsZW9uRVZCL01ha2VmaWxlCmluZGV4IDU4MWE1ODAuLmU2Mjk4MWMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RhdmUvUFBDaGFtZWxlb25FVkIvTWFrZWZpbGUKKysrIGIvYm9hcmQvZGF2ZS9QUENoYW1lbGVvbkVWQi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMyw5ICsyMywxMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIG5hbmQubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gbmFuZC5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJF4KQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGJhdTF4MDAvTWFrZWZpbGUgYi9ib2FyZC9kYmF1MXgwMC9NYWtlZmlsZQppbmRleCBkOWIwZTJkLi4xMzk4NmI4IDEwMDY0NAotLS0gYS9ib2FyZC9kYmF1MXgwMC9NYWtlZmlsZQorKysgYi9ib2FyZC9kYmF1MXgwMC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOSArMjMsMjMgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIFNPQkpTCT0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9kZWx0YS9NYWtlZmlsZSBiL2JvYXJkL2RlbHRhL01ha2VmaWxlCmluZGV4IGU3NDRlZWMuLjUxNGNhOWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RlbHRhL01ha2VmaWxlCisrKyBiL2JvYXJkL2RlbHRhL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjQsMTIgKzI0LDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gZGVsdGEubyBuYW5kLm8KK0NPQkpTCTo9IGRlbHRhLm8gbmFuZC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTQwLDkgKzQ0LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9kbnAxMTEwL01ha2VmaWxlIGIvYm9hcmQvZG5wMTExMC9NYWtlZmlsZQppbmRleCBlYWEzOGJjLi4zNjdkOGFlIDEwMDY0NAotLS0gYS9ib2FyZC9kbnAxMTEwL01ha2VmaWxlCisrKyBiL2JvYXJkL2RucDExMTAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gZG5wMTExMC5vIGZsYXNoLm8KK0NPQkpTCTo9IGRucDExMTAubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lWGFsaW9uL01ha2VmaWxlIGIvYm9hcmQvZVhhbGlvbi9NYWtlZmlsZQppbmRleCBjZmJmNDY1Li4wYWNiMDUyIDEwMDY0NAotLS0gYS9ib2FyZC9lWGFsaW9uL01ha2VmaWxlCisrKyBiL2JvYXJkL2VYYWxpb24vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTkgKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vCi1TT0JKUwk9CitDT0JKUwk9ICQoQk9BUkQpLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvYmFiN3h4L01ha2VmaWxlIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L01ha2VmaWxlCmluZGV4IDdkOGVkMjYuLjVjNmI2NTQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL2JhYjd4eC9NYWtlZmlsZQorKysgYi9ib2FyZC9lbHRlYy9iYWI3eHgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTMgKzIzLDE3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gcGNpLm8gbWlzYy5vIGVsX3Nyb20ubyBkY19zcm9tLm8gbDJjYWNoZS5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBwY2kubyBtaXNjLm8gZWxfc3JvbS5vIGRjX3Nyb20ubyBsMmNhY2hlLm8KIAogU09CSlMJPSBhc21faW5pdC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTQwLDkgKzQ0LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvZWxwcGMvTWFrZWZpbGUgYi9ib2FyZC9lbHRlYy9lbHBwYy9NYWtlZmlsZQppbmRleCA3NmIyY2ZlLi41ZDE4NmQ5IDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9lbHBwYy9NYWtlZmlsZQorKysgYi9ib2FyZC9lbHRlYy9lbHBwYy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxNCArMjMsMTggQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBwY2kubyBtaXNjLm8gbXBjMTA3X2kyYy5vIGVlcHJvMTAwX3Nyb20ubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gcGNpLm8gbWlzYy5vIG1wYzEwN19pMmMubyBlZXBybzEwMF9zcm9tLm8KIAogU09CSlMJPSBhc21faW5pdC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC00MCw5ICs0NCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL21ocGMvTWFrZWZpbGUgYi9ib2FyZC9lbHRlYy9taHBjL01ha2VmaWxlCmluZGV4IDEzY2U5ZmMuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL21ocGMvTWFrZWZpbGUKKysrIGIvYm9hcmQvZWx0ZWMvbWhwYy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2Vtay90b3A1MjAwL01ha2VmaWxlIGIvYm9hcmQvZW1rL3RvcDUyMDAvTWFrZWZpbGUKaW5kZXggOTg2NjA4Yi4uMzA3ZWY0YSAxMDA2NDQKLS0tIGEvYm9hcmQvZW1rL3RvcDUyMDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZW1rL3RvcDUyMDAvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMiArMjMsMTkgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vdnBkLm8gLi4vY29tbW9uL2FtNzljODc0Lm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL3ZwZC5vIC4uL2NvbW1vbi9hbTc5Yzg3NC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOSw5ICs0Niw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZW1rL3RvcDg2MC9NYWtlZmlsZSBiL2JvYXJkL2Vtay90b3A4NjAvTWFrZWZpbGUKaW5kZXggYTc0ZGQyZi4uYmQ5MjNhZiAxMDA2NDQKLS0tIGEvYm9hcmQvZW1rL3RvcDg2MC9NYWtlZmlsZQorKysgYi9ib2FyZC9lbWsvdG9wODYwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDE5ICsyMiwyNiBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL3ZwZC5vIC4uL2NvbW1vbi9hbTc5Yzg3NC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL3ZwZC5vIC4uL2NvbW1vbi9hbTc5Yzg3NC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lcDczMTIvTWFrZWZpbGUgYi9ib2FyZC9lcDczMTIvTWFrZWZpbGUKaW5kZXggYzUzYTNjNy4uYzhjODM0ZiAxMDA2NDQKLS0tIGEvYm9hcmQvZXA3MzEyL01ha2VmaWxlCisrKyBiL2JvYXJkL2VwNzMxMi9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCiAjIChDKSBDb3B5cmlnaHQgMjAwMgogIyBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KICMgTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgpAQCAtMjQsMTIgKzI3LDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gZXA3MzEyLm8gZmxhc2gubworQ09CSlMJOj0gZXA3MzEyLm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC00MCw5ICs0Nyw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXA4MjQ4L01ha2VmaWxlIGIvYm9hcmQvZXA4MjQ4L01ha2VmaWxlCmluZGV4IDhiMTA5OTMuLmU4ODBmODcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VwODI0OC9NYWtlZmlsZQorKysgYi9ib2FyZC9lcDgyNDgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubworQ09CSlMJOj0gJChCT0FSRCkubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VwODI2MC9NYWtlZmlsZSBiL2JvYXJkL2VwODI2MC9NYWtlZmlsZQppbmRleCA0NzdlNWVlLi44NzQ0MzU5IDEwMDY0NAotLS0gYS9ib2FyZC9lcDgyNjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXA4MjYwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAyLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDExICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIG1paV9waHkubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gbWlpX3BoeS5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXA4OHgvTWFrZWZpbGUgYi9ib2FyZC9lcDg4eC9NYWtlZmlsZQppbmRleCA5MTIzYTgwLi5kMDIyM2I1IDEwMDY0NAotLS0gYS9ib2FyZC9lcDg4eC9NYWtlZmlsZQorKysgYi9ib2FyZC9lcDg4eC9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCiAjIENvcHlyaWdodCAoQykgMjAwNCBBcmFiZWxsYSBTb2Z0d2FyZSBMdGQuCiAjIFl1bGkgQmFyY29oZW4gPHl1bGlAYXJhYmVsbGFzdy5jb20+CiAjCkBAIC0yMywxMSArMjYsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vCitDT0JKUwk6PSAkKEJPQVJEKS5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOCw5ICs0NSw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXJpYy9NYWtlZmlsZSBiL2JvYXJkL2VyaWMvTWFrZWZpbGUKaW5kZXggZjU1ZTdlMi4uZmZmMjVhYiAxMDA2NDQKLS0tIGEvYm9hcmQvZXJpYy9NYWtlZmlsZQorKysgYi9ib2FyZC9lcmljL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDExICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogU09CSlMJPSBpbml0Lm8KIAorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2FkY2lvcC9NYWtlZmlsZSBiL2JvYXJkL2VzZC9hZGNpb3AvTWFrZWZpbGUKaW5kZXggNjdjZjI5Yi4uNjk5YTg0OCAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2FkY2lvcC9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvYWRjaW9wL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTAgKzIzLDE3IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8gLi4vY29tbW9uL3BjaS5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vIC4uL2NvbW1vbi9wY2kubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTM5LDkgKzQ2LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2FwYzQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9hcGM0MDUvTWFrZWZpbGUKaW5kZXggODUyOWVjNy4uYTUwNjBkMiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2FwYzQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvYXBjNDA1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDEwICsyMiwxNyBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gc3RyYXRhZmxhc2gubyAuLi9jb21tb24vbWlzYy5vCitDT0JKUwk9ICQoQk9BUkQpLm8gc3RyYXRhZmxhc2gubyAuLi9jb21tb24vbWlzYy5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJF4KQEAgLTM4LDkgKzQ1LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2FyNDA1L01ha2VmaWxlIGIvYm9hcmQvZXNkL2FyNDA1L01ha2VmaWxlCmluZGV4IGE2MDQ5NWEuLmRlYzUyYWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9hcjQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvYXI0MDUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTAgKzIyLDE3IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC0zOCw5ICs0NSw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hc2g0MDUvTWFrZWZpbGUgYi9ib2FyZC9lc2QvYXNoNDA1L01ha2VmaWxlCmluZGV4IGE2MDQ5NWEuLmRlYzUyYWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9hc2g0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2FzaDQwNS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxMCArMjIsMTcgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTM4LDkgKzQ1LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2NhbmJ0L01ha2VmaWxlIGIvYm9hcmQvZXNkL2NhbmJ0L01ha2VmaWxlCmluZGV4IGE2MDQ5NWEuLmRlYzUyYWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9jYW5idC9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvY2FuYnQvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTAgKzIyLDE3IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC0zOCw5ICs0NSw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jbXM3MDAvTWFrZWZpbGUgYi9ib2FyZC9lc2QvY21zNzAwL01ha2VmaWxlCmluZGV4IGExMWVlODIuLmFiOWQ4MzIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9jbXM3MDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2NtczcwMC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxNSArMjIsMjIgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24veGlsaW54X2p0YWcpCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKICMgT2JqZWN0cyBmb3IgWGlsaW54IEpUQUcgcHJvZ3JhbW1pbmcgKENQTEQpCiBDUExEICAgID0gLi4vY29tbW9uL3hpbGlueF9qdGFnL2xlbnZhbC5vIFwKIAkgIC4uL2NvbW1vbi94aWxpbnhfanRhZy9taWNyby5vIFwKIAkgIC4uL2NvbW1vbi94aWxpbnhfanRhZy9wb3J0cy5vCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyAkKENQTEQpCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vICQoQ1BMRCkKKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC00Myw5ICs1MCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpMmRwL01ha2VmaWxlIGIvYm9hcmQvZXNkL2NwY2kyZHAvTWFrZWZpbGUKaW5kZXggODhiMGFlMy4uNzJjMjU2MiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2kyZHAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2NwY2kyZHAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTAgKzIyLDE3IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8gLi4vY29tbW9uL2NtZF9sb2FkcGNpLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8gLi4vY29tbW9uL2NtZF9sb2FkcGNpLm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC0zOCw5ICs0NSw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNDA1L01ha2VmaWxlIGIvYm9hcmQvZXNkL2NwY2k0MDUvTWFrZWZpbGUKaW5kZXggOTM0MGEzMi4uOGYyNTRkZCAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2NwY2k0MDUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTAgKzIyLDE3IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8gLi4vY29tbW9uL2F1dG9fdXBkYXRlLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8gLi4vY29tbW9uL2F1dG9fdXBkYXRlLm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC0zOCw5ICs0NSw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNDQwL01ha2VmaWxlIGIvYm9hcmQvZXNkL2NwY2k0NDAvTWFrZWZpbGUKaW5kZXggODRkNDRmYi4uYjRjNzRmYyAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k0NDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2NwY2k0NDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTIgKzIyLDE5IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBzdHJhdGFmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8KK0NPQkpTCT0gJChCT0FSRCkubyBzdHJhdGFmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8KIFNPQkpTCT0gaW5pdC5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCkBAIC0zOSw5ICs0Niw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNTIwMC9NYWtlZmlsZSBiL2JvYXJkL2VzZC9jcGNpNTIwMC9NYWtlZmlsZQppbmRleCAyY2E3M2E5Li43OGZmYTBmIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaTUyMDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2NwY2k1MjAwL01ha2VmaWxlCkBAIC0xLDYgKzEsNSBAQAotCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIyLDI1IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworIyBpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorIyAkKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbi94aWxpbnhfanRhZykKKyMgZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCiAjIE9iamVjdHMgZm9yIFhpbGlueCBKVEFHIHByb2dyYW1taW5nIChDUExEKQogIyBDUExEICA9IC4uL2NvbW1vbi94aWxpbnhfanRhZy9sZW52YWwubyBcCiAjIAkgIC4uL2NvbW1vbi94aWxpbnhfanRhZy9taWNyby5vIFwKICMgCSAgLi4vY29tbW9uL3hpbGlueF9qdGFnL3BvcnRzLm8KIAotIyBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vICQoQ1BMRCkKLU9CSlMJPSAkKEJPQVJEKS5vIHN0cmF0YWZsYXNoLm8KKyMgQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gJChDUExEKQorQ09CSlMJPSAkKEJPQVJEKS5vIHN0cmF0YWZsYXNoLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTQ1LDkgKzUxLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaTUyMDAvY29uZmlnLm1rIGIvYm9hcmQvZXNkL2NwY2k1MjAwL2NvbmZpZy5tawppbmRleCAwN2I1ZGUxLi4xNzA3NzlkIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaTUyMDAvY29uZmlnLm1rCisrKyBiL2JvYXJkL2VzZC9jcGNpNTIwMC9jb25maWcubWsKQEAgLTMyLDcgKzMyLDcgQEAKICMJMHgwMDEwMDAwMCAgIGJvb3QgZnJvbSBSQU0gKGZvciB0ZXN0aW5nIG9ubHkpCiAjCiAKLXNpbmNsdWRlICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCitzaW5jbHVkZSAkKE9CSlRSRUUpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKIAogaWZuZGVmIFRFWFRfQkFTRQogIyMgU3RhbmRhcmQ6IGJvb3QgaGlnaApkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2NwY2k3NTAvTWFrZWZpbGUgYi9ib2FyZC9lc2QvY3BjaTc1MC9NYWtlZmlsZQppbmRleCBjZDM4YjJkLi4wZGZlYzYwIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaTc1MC9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvY3BjaTc1MC9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjIAogIyAoQykgQ29weXJpZ2h0IDIwMDEKICMgSm9zaCBIdWJlciA8aHViZXJAbWNseC5jb20+LCBNaXNzaW9uIENyaXRpY2FsIExpbnV4LCBJbmMuCiAjCkBAIC0yMiwyMyArMjUsMzAgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi8uLi9NYXJ2ZWxsL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAogU09CSlMJPSBtaXNjLm8KIAotT0JKUwk9ICQoQk9BUkQpLm8gc2VyaWFsLm8gLi4vLi4vTWFydmVsbC9jb21tb24vbWVtb3J5Lm8gcGNpLm8gXAorQ09CSlMJPSAkKEJPQVJEKS5vIHNlcmlhbC5vIC4uLy4uL01hcnZlbGwvY29tbW9uL21lbW9yeS5vIHBjaS5vIFwKIAkgIG12X2V0aC5vICBtcHNjLm8gaTJjLm8gXAogCSAgc2RyYW1faW5pdC5vIGlkZS5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaWlzZXI0L01ha2VmaWxlIGIvYm9hcmQvZXNkL2NwY2lpc2VyNC9NYWtlZmlsZQppbmRleCBhNjA0OTVhLi5kZWM1MmFmIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaWlzZXI0L01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9jcGNpaXNlcjQvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTAgKzIyLDE3IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC0zOCw5ICs0NSw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9kYXNhX3NpbS9NYWtlZmlsZQppbmRleCBlM2IxYzg3Li5jNzRkMWFiIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTAgKzIzLDE3IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGNtZF9kYXNhX3NpbS5vIGVlcHJvbS5vIC4uL2NvbW1vbi9wY2kubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gY21kX2Rhc2Ffc2ltLm8gZWVwcm9tLm8gLi4vY29tbW9uL3BjaS5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQpAQCAtMzksOSArNDYsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvZHA0MDUvTWFrZWZpbGUgYi9ib2FyZC9lc2QvZHA0MDUvTWFrZWZpbGUKaW5kZXggYTExZWU4Mi4uYWI5ZDgzMiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2RwNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9kcDQwNS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxNSArMjIsMjIgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24veGlsaW54X2p0YWcpCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKICMgT2JqZWN0cyBmb3IgWGlsaW54IEpUQUcgcHJvZ3JhbW1pbmcgKENQTEQpCiBDUExEICAgID0gLi4vY29tbW9uL3hpbGlueF9qdGFnL2xlbnZhbC5vIFwKIAkgIC4uL2NvbW1vbi94aWxpbnhfanRhZy9taWNyby5vIFwKIAkgIC4uL2NvbW1vbi94aWxpbnhfanRhZy9wb3J0cy5vCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyAkKENQTEQpCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vICQoQ1BMRCkKKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC00Myw5ICs1MCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kdTQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9kdTQwNS9NYWtlZmlsZQppbmRleCA1ZWM0YTRmLi5kZWM1MmFmIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvZHU0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2R1NDA1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDEwICsyMiwxNyBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQpAQCAtMzgsOSArNDUsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvaGg0MDUvTWFrZWZpbGUgYi9ib2FyZC9lc2QvaGg0MDUvTWFrZWZpbGUKaW5kZXggOTM0MGEzMi4uOGYyNTRkZCAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2hoNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9oaDQwNS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxMCArMjIsMTcgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyAuLi9jb21tb24vYXV0b191cGRhdGUubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyAuLi9jb21tb24vYXV0b191cGRhdGUubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTM4LDkgKzQ1LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2h1YjQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9odWI0MDUvTWFrZWZpbGUKaW5kZXggYTYwNDk1YS4uZGVjNTJhZiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2h1YjQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvaHViNDA1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDEwICsyMiwxNyBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQpAQCAtMzgsOSArNDUsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lc2Qvb2NydGMvTWFrZWZpbGUgYi9ib2FyZC9lc2Qvb2NydGMvTWFrZWZpbGUKaW5kZXggYjMwMzljNi4uMWRhM2Y3ZSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL29jcnRjL01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9vY3J0Yy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxMCArMjIsMTcgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyBjbWRfb2NydGMubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyBjbWRfb2NydGMubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTM4LDkgKzQ1LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BjaTQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9wY2k0MDUvTWFrZWZpbGUKaW5kZXggNmRiNTY0Zi4uOWFlNzI4ZCAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3BjaTQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvcGNpNDA1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDEyICsyMiwxOSBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vIGNtZF9wY2k0MDUubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyBjbWRfcGNpNDA1Lm8KIFNPQkpTCT0gd3JpdGVpYm0ubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKwogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAjCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKQEAgLTQwLDkgKzQ3LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BmNTIwMC9NYWtlZmlsZSBiL2JvYXJkL2VzZC9wZjUyMDAvTWFrZWZpbGUKaW5kZXggNjAzYmJlMi4uODIzNThhZiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3BmNTIwMC9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvcGY1MjAwL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDI1IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworIyBpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorIyAkKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbi94aWxpbnhfanRhZykKKyMgZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCiAjIE9iamVjdHMgZm9yIFhpbGlueCBKVEFHIHByb2dyYW1taW5nIChDUExEKQogIyBDUExEICA9IC4uL2NvbW1vbi94aWxpbnhfanRhZy9sZW52YWwubyBcCiAjIAkgIC4uL2NvbW1vbi94aWxpbnhfanRhZy9taWNyby5vIFwKICMgCSAgLi4vY29tbW9uL3hpbGlueF9qdGFnL3BvcnRzLm8KIAotIyBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vICQoQ1BMRCkKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KKyMgQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gJChDUExEKQorQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTQ1LDkgKzUyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvcGY1MjAwL2NvbmZpZy5tayBiL2JvYXJkL2VzZC9wZjUyMDAvY29uZmlnLm1rCmluZGV4IDA3YjVkZTEuLjE3MDc3OWQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9wZjUyMDAvY29uZmlnLm1rCisrKyBiL2JvYXJkL2VzZC9wZjUyMDAvY29uZmlnLm1rCkBAIC0zMiw3ICszMiw3IEBACiAjCTB4MDAxMDAwMDAgICBib290IGZyb20gUkFNIChmb3IgdGVzdGluZyBvbmx5KQogIwogCi1zaW5jbHVkZSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLnRtcAorc2luY2x1ZGUgJChPQkpUUkVFKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCiAKIGlmbmRlZiBURVhUX0JBU0UKICMjIFN0YW5kYXJkOiBib290IGhpZ2gKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9wbHU0MDUvTWFrZWZpbGUgYi9ib2FyZC9lc2QvcGx1NDA1L01ha2VmaWxlCmluZGV4IDkzNDBhMzIuLjhmMjU0ZGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9wbHU0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL3BsdTQwNS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxMCArMjIsMTcgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyAuLi9jb21tb24vYXV0b191cGRhdGUubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubyAuLi9jb21tb24vYXV0b191cGRhdGUubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTM4LDkgKzQ1LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BtYzQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9wbWM0MDUvTWFrZWZpbGUKaW5kZXggNzQxZTRhYS4uMjc3NWI4YSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3BtYzQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvcG1jNDA1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDE1ICsyMiwyMiBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbi94aWxpbnhfanRhZykKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAogIyBPYmplY3RzIGZvciBYaWxpbnggSlRBRyBwcm9ncmFtbWluZyAoQ1BMRCkKIENQTEQgICAgPSAuLi9jb21tb24veGlsaW54X2p0YWcvbGVudmFsLm8gXAogCSAgLi4vY29tbW9uL3hpbGlueF9qdGFnL21pY3JvLm8gXAogCSAgLi4vY29tbW9uL3hpbGlueF9qdGFnL3BvcnRzLm8KIAotT0JKUwk9ICQoQk9BUkQpLm8gLi4vY29tbW9uL21pc2MubyAuLi9jb21tb24vY21kX2xvYWRwY2kubyAkKENQTEQpCitDT0JKUwk9ICQoQk9BUkQpLm8gLi4vY29tbW9uL21pc2MubyAuLi9jb21tb24vY21kX2xvYWRwY2kubyAkKENQTEQpCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQpAQCAtNDMsOSArNTAsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvdGFzcmVnL01ha2VmaWxlIGIvYm9hcmQvZXNkL3Rhc3JlZy9NYWtlZmlsZQppbmRleCBlNWQ4NDQ2Li5lM2QyNGIzIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvdGFzcmVnL01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC90YXNyZWcvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC92b2g0MDUvTWFrZWZpbGUgYi9ib2FyZC9lc2Qvdm9oNDA1L01ha2VmaWxlCmluZGV4IGE2MDQ5NWEuLmRlYzUyYWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC92b2g0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL3ZvaDQwNS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxMCArMjIsMTcgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL21pc2MubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTM4LDkgKzQ1LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3ZvbTQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC92b200MDUvTWFrZWZpbGUKaW5kZXggYTExZWU4Mi4uYWI5ZDgzMiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3ZvbTQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2Qvdm9tNDA1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDE1ICsyMiwyMiBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbi94aWxpbnhfanRhZykKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAogIyBPYmplY3RzIGZvciBYaWxpbnggSlRBRyBwcm9ncmFtbWluZyAoQ1BMRCkKIENQTEQgICAgPSAuLi9jb21tb24veGlsaW54X2p0YWcvbGVudmFsLm8gXAogCSAgLi4vY29tbW9uL3hpbGlueF9qdGFnL21pY3JvLm8gXAogCSAgLi4vY29tbW9uL3hpbGlueF9qdGFnL3BvcnRzLm8KIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vICQoQ1BMRCkKK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIC4uL2NvbW1vbi9taXNjLm8gJChDUExEKQorCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTQzLDkgKzUwLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3d1aDQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC93dWg0MDUvTWFrZWZpbGUKaW5kZXggYTYwNDk1YS4uZGVjNTJhZiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3d1aDQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2Qvd3VoNDA1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDEwICsyMiwxNyBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi9jb21tb24vbWlzYy5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQpAQCAtMzgsOSArNDUsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9lc3RlZW0xOTJlL01ha2VmaWxlIGIvYm9hcmQvZXN0ZWVtMTkyZS9NYWtlZmlsZQppbmRleCAxM2NlOWZjLi5lM2QyNGIzIDEwMDY0NAotLS0gYS9ib2FyZC9lc3RlZW0xOTJlL01ha2VmaWxlCisrKyBiL2JvYXJkL2VzdGVlbTE5MmUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9ldGluL2RlYnJpcy9NYWtlZmlsZSBiL2JvYXJkL2V0aW4vZGVicmlzL01ha2VmaWxlCmluZGV4IDMwNWExYmYuLjE3ZWYyM2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V0aW4vZGVicmlzL01ha2VmaWxlCisrKyBiL2JvYXJkL2V0aW4vZGVicmlzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTID0gICQoQk9BUkQpLm8gZmxhc2gubyBwaGFudG9tLm8KK0NPQkpTID0gICQoQk9BUkQpLm8gZmxhc2gubyBwaGFudG9tLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2V0aW4va3ZtZTA4MC9NYWtlZmlsZSBiL2JvYXJkL2V0aW4va3ZtZTA4MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGVjZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZXRpbi9rdm1lMDgwL01ha2VmaWxlCkBAIC0wLDAgKzEsNDQgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJPSAkKEJPQVJEKS5vIG11bHRpdmVyc2UubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXRpbi9rdm1lMDgwL2NvbmZpZy5tayBiL2JvYXJkL2V0aW4va3ZtZTA4MC9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhYmRjMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2V0aW4va3ZtZTA4MC9jb25maWcubWsKQEAgLTAsMCArMSwzMCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDUKKyMgU2FuZ21vb24sIEV0aW4gU3lzdGVtcywgZG9nb2lsQGV0aW5zeXMuY29tLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIEtWTUUwODAgYm9hcmQKKyMKKworVEVYVF9CQVNFID0gMHhGRkYwMDAwMAorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRFRFWFRfQkFTRT0kKFRFWFRfQkFTRSkKZGlmZiAtLWdpdCBhL2JvYXJkL2V0aW4va3ZtZTA4MC9rdm1lMDgwLmMgYi9ib2FyZC9ldGluL2t2bWUwODAva3ZtZTA4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjJmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9ldGluL2t2bWUwODAva3ZtZTA4MC5jCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA1CisgKiBTYW5nbW9vbiBLaW0sIEV0aW4gU3lzdGVtcy4gZG9nb2lsQGV0aW5zeXMuY29tLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM4MjR4Lmg+CisjaW5jbHVkZSA8cGNpLmg+CisjaW5jbHVkZSA8aTJjLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitpbnQgY2hlY2tib2FyZCh2b2lkKQoreworCXB1dHMgKCJCb2FyZDogS1ZNRTA4MFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc2V0ZHJhbShpbnQgbSwgaW50IHJvdywgaW50IGNvbCwgaW50IGJhbmspCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCXVpbnQzMl90IG1jY3IxOworCXVpbnQzMl90IG1lYXIxID0gMCwgZW1lYXIxID0gMCwgbXNhcjEgPSAwLCBlbXNhcjEgPSAwOworCXVpbnQzMl90IG1lYXIyID0gMCwgZW1lYXIyID0gMCwgbXNhcjIgPSAwLCBlbXNhcjIgPSAwOworCXVpbnQ4X3QgbWJlciA9IDA7CisKKwlDT05GSUdfUkVBRF9XT1JEKE1DQ1IxLCBtY2NyMSk7CisJbWNjcjEgJj0gMHhmZmZmMDAwMDsKKworCXN0YXJ0ID0gQ0ZHX1NEUkFNX0JBU0U7CisJZW5kID0gc3RhcnQgKyAoMSA8PCAoY29sICsgcm93ICsgMykgKSAqIGJhbmsgLSAxOworCisJZm9yIChpID0gMDsgaSA8IG07IGkrKykgeworCQltY2NyMSB8PSAoKHJvdyA9PSAxMyk/IDIgOiAoYmFuayA9PSA0KT8gMCA6IDMpIDw8IGkgKiAyOworCQlpZiAoaSA8IDQpIHsKKwkJCW1zYXIxICB8PSAoKHN0YXJ0ID4+IDIwKSAmIDB4ZmYpIDw8IGkgKiA4OworCQkJZW1zYXIxIHw9ICgoc3RhcnQgPj4gMjgpICYgMHhmZikgPDwgaSAqIDg7CisJCQltZWFyMSAgfD0gKChlbmQgPj4gMjApICYgMHhmZikgPDwgaSAqIDg7CisJCQllbWVhcjEgfD0gKChlbmQgPj4gMjgpICYgMHhmZikgPDwgaSAqIDg7CisJCX0gZWxzZSB7CisJCQltc2FyMiAgfD0gKChzdGFydCA+PiAyMCkgJiAweGZmKSA8PCAoaS00KSAqIDg7CisJCQllbXNhcjIgfD0gKChzdGFydCA+PiAyOCkgJiAweGZmKSA8PCAoaS00KSAqIDg7CisJCQltZWFyMiAgfD0gKChlbmQgPj4gMjApICYgMHhmZikgPDwgKGktNCkgKiA4OworCQkJZW1lYXIyIHw9ICgoZW5kID4+IDI4KSAmIDB4ZmYpIDw8IChpLTQpICogODsKKwkJfQorCQltYmVyIHw9IDEgPDwgaTsKKwkJc3RhcnQgKz0gKDEgPDwgKGNvbCArIHJvdyArIDMpICkgKiBiYW5rOworCQllbmQgKz0gKDEgPDwgKGNvbCArIHJvdyArIDMpICkgKiBiYW5rOworCX0KKwlmb3IgKDsgaSA8IDg7IGkrKykgeworCQlpZiAoaSA8IDQpIHsKKwkJCW1zYXIxICB8PSAweGZmIDw8IGkgKiA4OworCQkJZW1zYXIxIHw9IDB4MzAgPDwgaSAqIDg7CisJCQltZWFyMSAgfD0gMHhmZiA8PCBpICogODsKKwkJCWVtZWFyMSB8PSAweDMwIDw8IGkgKiA4OworCQl9IGVsc2UgeworCQkJbXNhcjIgIHw9IDB4ZmYgPDwgKGktNCkgKiA4OworCQkJZW1zYXIyIHw9IDB4MzAgPDwgKGktNCkgKiA4OworCQkJbWVhcjIgIHw9IDB4ZmYgPDwgKGktNCkgKiA4OworCQkJZW1lYXIyIHw9IDB4MzAgPDwgKGktNCkgKiA4OworCQl9CisJfQorCisJQ09ORklHX1dSSVRFX1dPUkQoTUNDUjEsIG1jY3IxKTsKKwlDT05GSUdfV1JJVEVfV09SRChNU0FSMSwgbXNhcjEpOworCUNPTkZJR19XUklURV9XT1JEKEVNU0FSMSwgZW1zYXIxKTsKKwlDT05GSUdfV1JJVEVfV09SRChNRUFSMSwgbWVhcjEpOworCUNPTkZJR19XUklURV9XT1JEKEVNRUFSMSwgZW1lYXIxKTsKKwlDT05GSUdfV1JJVEVfV09SRChNU0FSMiwgbXNhcjIpOworCUNPTkZJR19XUklURV9XT1JEKEVNU0FSMiwgZW1zYXIyKTsKKwlDT05GSUdfV1JJVEVfV09SRChNRUFSMiwgbWVhcjIpOworCUNPTkZJR19XUklURV9XT1JEKEVNRUFSMiwgZW1lYXIyKTsKKwlDT05GSUdfV1JJVEVfQllURShNQkVSLCBtYmVyKTsKKworCXJldHVybiAoMSA8PCAoY29sICsgcm93ICsgMykgKSAqIGJhbmsgKiBtOworfQorCitsb25nIGludCBpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgbXNyOworCWxvbmcgaW50IHNpemUgPSAwOworCisJbXNyID0gbWZtc3IoKTsKKwltdG1zcihtc3IgJiB+KE1TUl9JUiB8IE1TUl9EUikpOworCW10c3ByKElCQVQyTCwgQ0ZHX0lCQVQwTCArIDB4MTAwMDAwMDApOworCW10c3ByKElCQVQyVSwgQ0ZHX0lCQVQwVSArIDB4MTAwMDAwMDApOworCW10c3ByKERCQVQyTCwgQ0ZHX0RCQVQwTCArIDB4MTAwMDAwMDApOworCW10c3ByKERCQVQyVSwgQ0ZHX0RCQVQwVSArIDB4MTAwMDAwMDApOworCW10bXNyKG1zcik7CisKKwlpZiAoc2V0ZHJhbSgyLDEzLDEwLDQpID09IGdldF9yYW1fc2l6ZShDRkdfU0RSQU1fQkFTRSwgMHgyMDAwMDAwMCkpCisJCXNpemUgPSAweDIwMDAwMDAwOwkvKiA1MTJNQiAqLworCWVsc2UgaWYgKHNldGRyYW0oMSwxMywxMCw0KSA9PSBnZXRfcmFtX3NpemUoQ0ZHX1NEUkFNX0JBU0UsIDB4MTAwMDAwMDApKQorCQlzaXplID0gMHgxMDAwMDAwMDsJLyogMjU2TUIgKi8KKwllbHNlIGlmIChzZXRkcmFtKDIsMTMsOSw0KSA9PSBnZXRfcmFtX3NpemUoQ0ZHX1NEUkFNX0JBU0UsIDB4MTAwMDAwMDApKQorCQlzaXplID0gMHgxMDAwMDAwMDsJLyogMjU2TUIgKi8KKwllbHNlIGlmIChzZXRkcmFtKDEsMTMsOSw0KSA9PSBnZXRfcmFtX3NpemUoQ0ZHX1NEUkFNX0JBU0UsIDB4MDgwMDAwMDApKQorCQlzaXplID0gMHgwODAwMDAwMDsJLyogMTI4TUIgKi8KKwllbHNlIGlmIChzZXRkcmFtKDIsMTIsOSw0KSA9PSBnZXRfcmFtX3NpemUoQ0ZHX1NEUkFNX0JBU0UsIDB4MDgwMDAwMDApKQorCQlzaXplID0gMHgwODAwMDAwMDsJLyogMTI4TUIgKi8KKwllbHNlIGlmIChzZXRkcmFtKDEsMTIsOSw0KSA9PSBnZXRfcmFtX3NpemUoQ0ZHX1NEUkFNX0JBU0UsIDB4MDQwMDAwMDApKQorCQlzaXplID0gMHgwNDAwMDAwMDsJLyogNjRNQiAqLworCisJbXNyID0gbWZtc3IoKTsKKwltdG1zcihtc3IgJiB+KE1TUl9JUiB8IE1TUl9EUikpOworCW10c3ByKElCQVQyTCwgQ0ZHX0lCQVQyTCk7CisJbXRzcHIoSUJBVDJVLCBDRkdfSUJBVDJVKTsKKwltdHNwcihEQkFUMkwsIENGR19EQkFUMkwpOworCW10c3ByKERCQVQyVSwgQ0ZHX0RCQVQyVSk7CisJbXRtc3IobXNyKTsKKworCXJldHVybiBzaXplOworfQorCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgaG9zZTsKKwordm9pZCBwY2lfaW5pdF9ib2FyZCh2b2lkKQoreworCXBjaV9tcGM4MjR4X2luaXQoJmhvc2UpOworfQorCitpbnQgYm9hcmRfZWFybHlfaW5pdF9mKHZvaWQpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKDB4ZmYwODAxMjApID0gMHhmYjsKKworCXJldHVybiAwOworfQorCitpbnQgYm9hcmRfZWFybHlfaW5pdF9yKHZvaWQpCit7CisJdW5zaWduZWQgaW50IG1zcjsKKworCUNPTkZJR19XUklURV9XT1JEKEVSQ1IxLCAweDk1ZmY4MDAwKTsKKwlDT05GSUdfV1JJVEVfV09SRChFUkNSMywgMHgwYzAwMDAwZSk7CisJQ09ORklHX1dSSVRFX1dPUkQoRVJDUjQsIDB4MDgwMDAwMGUpOworCisJbXNyID0gbWZtc3IoKTsKKwltdG1zcihtc3IgJiB+KE1TUl9JUiB8IE1TUl9EUikpOworCW10c3ByKElCQVQxTCwgMHg3MDAwMDAwMCB8IEJBVExfUFBfMTAgfCBCQVRMX0NBQ0hFSU5ISUJJVCk7CisJbXRzcHIoSUJBVDFVLCAweDcwMDAwMDAwIHwgQkFUVV9CTF8yNTZNIHwgQkFUVV9WUyB8IEJBVFVfVlApOworCW10c3ByKERCQVQxTCwgMHg3MDAwMDAwMCB8IEJBVExfUFBfMTAgfCBCQVRMX0NBQ0hFSU5ISUJJVCk7CisJbXRzcHIoREJBVDFVLCAweDcwMDAwMDAwIHwgQkFUVV9CTF8yNTZNIHwgQkFUVV9WUyB8IEJBVFVfVlApOworCW10bXNyKG1zcik7CisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIGludCBtdWx0aXZlcnNlX2luaXQodm9pZCk7CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCW11bHRpdmVyc2VfaW5pdCgpOworCXJldHVybiAwOworfQorCit2b2lkICpudnJhbV9yZWFkKHZvaWQgKmRlc3QsIGNvbnN0IGxvbmcgc3JjLCBzaXplX3QgY291bnQpCit7CisJdm9sYXRpbGUgdWNoYXIgKmQgPSAodm9sYXRpbGUgdWNoYXIqKSBkZXN0OworCXZvbGF0aWxlIHVjaGFyICpzID0gKHZvbGF0aWxlIHVjaGFyKikgc3JjOworCXdoaWxlKGNvdW50LS0pIHsKKwkJKmQrKyA9ICpzKys7CisJCWFzbSB2b2xhdGlsZSgic3luYyIpOworCX0KKwlyZXR1cm4gZGVzdDsKK30KKwordm9pZCBudnJhbV93cml0ZShsb25nIGRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQoreworCXZvbGF0aWxlIHVjaGFyICpkID0gKHZvbGF0aWxlIHVjaGFyKilkZXN0OworCXZvbGF0aWxlIHVjaGFyICpzID0gKHZvbGF0aWxlIHVjaGFyKilzcmM7CisJd2hpbGUoY291bnQtLSkgeworCQkqZCsrID0gKnMrKzsKKwkJYXNtIHZvbGF0aWxlKCJzeW5jIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXRpbi9rdm1lMDgwL211bHRpdmVyc2UuYyBiL2JvYXJkL2V0aW4va3ZtZTA4MC9tdWx0aXZlcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4OTU4MQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2V0aW4va3ZtZTA4MC9tdWx0aXZlcnNlLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBtdWx0aXZlcnNlLmMKKyAqCisgKiBWTUUgZHJpdmVyIGZvciBNdWx0aXZlcnNlCisgKgorICogQXV0aG9yIDogU2FuZ21vb24gS2ltCisgKgkgICAgZG9nb2lsQGV0aW5zeXMuY29tCisgKgorICogQ29weXJpZ2h0IDIwMDUgRVRJTiBTWVNURU1TIENvLixMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKworI2luY2x1ZGUgIm11bHRpdmVyc2UuaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1lX2FzaV9hZGRyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1lX2lhY2tfYWRkcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBjaV9yZWdfYWRkcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHZtZV9yZWdfYWRkcjsKKworaW50IG11bHRpdl9yZXNldCh1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJd3JpdGViKDB4MDksIGJhc2UgKyBWTUVfU0xBVkUzMl9BTSk7CisJd3JpdGViKDB4MzksIGJhc2UgKyBWTUVfU0xBVkUyNF9BTSk7CisJd3JpdGViKDB4MjksIGJhc2UgKyBWTUVfU0xBVkUxNl9BTSk7CisJd3JpdGViKDB4MmYsIGJhc2UgKyBWTUVfU0xBVkVfUkVHX0FNKTsKKwl3cml0ZWIoKFZNRV9BMzJfU0xWX0JVUyA+PiAyNCkgJiAweGZmLCBiYXNlICsgVk1FX1NMQVZFMzJfQSk7CisJd3JpdGViKChWTUVfQTI0X1NMVl9CVVMgPj4gMTYpICYgMHhmZiwgYmFzZSArIFZNRV9TTEFWRTI0X0EpOworCXdyaXRlYigoVk1FX0ExNl9TTFZfQlVTID4+IDggKSAmIDB4ZmYsIGJhc2UgKyBWTUVfU0xBVkUxNl9BKTsKKyNpZmRlZiBBMzJfU0xWX1dJTkRPVworCWlmIChyZWFkYihiYXNlICsgVk1FX1NUQVRVUykgJiBWTUVfU1RBVFVTX1NZU0NPTikgeworCQl3cml0ZWIoKCh+KFZNRV9BMzJfU0xWX1NJWkUtMSkpID4+IDI0KSAmIDB4ZmYsCisJCQkJYmFzZSArIFZNRV9TTEFWRTMyX01BU0spOworCQl3cml0ZWIoMHgwMSwgYmFzZSArIFZNRV9TTEFWRTMyX0VOKTsKKwl9IGVsc2UgeworCQl3cml0ZWIoMHhmZiwgYmFzZSArIFZNRV9TTEFWRTMyX01BU0spOworCQl3cml0ZWIoMHgwMCwgYmFzZSArIFZNRV9TTEFWRTMyX0VOKTsKKwl9CisjZWxzZQorCXdyaXRlYigweGZmLCBiYXNlICsgVk1FX1NMQVZFMzJfTUFTSyk7CisJd3JpdGViKDB4MDAsIGJhc2UgKyBWTUVfU0xBVkUzMl9FTik7CisjZW5kaWYKKyNpZmRlZiBBMjRfU0xWX1dJTkRPVworCWlmIChyZWFkYihiYXNlICsgVk1FX1NUQVRVUykgJiBWTUVfU1RBVFVTX1NZU0NPTikgeworCQl3cml0ZWIoKCh+KFZNRV9BMjRfU0xWX1NJWkUtMSkpID4+IDE2KSAmIDB4ZmYsCisJCQkJYmFzZSArIFZNRV9TTEFWRTI0X01BU0spOworCQl3cml0ZWIoMHgwMSwgYmFzZSArIFZNRV9TTEFWRTI0X0VOKTsKKwl9IGVsc2UgeworCQl3cml0ZWIoMHhmZiwgYmFzZSArIFZNRV9TTEFWRTI0X01BU0spOworCQl3cml0ZWIoMHgwMCwgYmFzZSArIFZNRV9TTEFWRTI0X0VOKTsKKwl9CisjZWxzZQorCXdyaXRlYigweGZmLCBiYXNlICsgVk1FX1NMQVZFMjRfTUFTSyk7CisJd3JpdGViKDB4MDAsIGJhc2UgKyBWTUVfU0xBVkUyNF9FTik7CisjZW5kaWYKKyNpZmRlZiBBMTZfU0xWX1dJTkRPVworCWlmIChyZWFkYihiYXNlICsgVk1FX1NUQVRVUykgJiBWTUVfU1RBVFVTX1NZU0NPTikgeworCQl3cml0ZWIoKCh+KFZNRV9BMTZfU0xWX1NJWkUtMSkpID4+IDgpICYgMHhmZiwKKwkJCQliYXNlICsgVk1FX1NMQVZFMTZfTUFTSyk7CisJCXdyaXRlYigweDAxLCBiYXNlICsgVk1FX1NMQVZFMTZfRU4pOworCX0gZWxzZSB7CisJCXdyaXRlYigweGZmLCBiYXNlICsgVk1FX1NMQVZFMTZfTUFTSyk7CisJCXdyaXRlYigweDAwLCBiYXNlICsgVk1FX1NMQVZFMTZfRU4pOworCX0KKyNlbHNlCisJd3JpdGViKDB4ZmYsIGJhc2UgKyBWTUVfU0xBVkUxNl9NQVNLKTsKKwl3cml0ZWIoMHgwMCwgYmFzZSArIFZNRV9TTEFWRTE2X0VOKTsKKyNlbmRpZgorI2lmZGVmIFJFR19TTFZfV0lORE9XCisJaWYgKHJlYWRiKGJhc2UgKyBWTUVfU1RBVFVTKSAmIFZNRV9TVEFUVVNfU1lTQ09OKSB7CisJCXdyaXRlYigoKH4oVk1FX1JFR19TTFZfU0laRS0xKSkgPj4gMTYpICYgMHhmZiwKKwkJCQliYXNlICsgVk1FX1NMQVZFX1JFR19NQVNLKTsKKwkJd3JpdGViKDB4MDEsIGJhc2UgKyBWTUVfU0xBVkVfUkVHX0VOKTsKKwl9IGVsc2UgeworCQl3cml0ZWIoMHhmOCwgYmFzZSArIFZNRV9TTEFWRV9SRUdfTUFTSyk7CisJfQorI2Vsc2UKKwl3cml0ZWIoMHhmOCwgYmFzZSArIFZNRV9TTEFWRV9SRUdfTUFTSyk7CisjZW5kaWYKKwl3cml0ZWIoMHgwOSwgYmFzZSArIFZNRV9NQVNURVIzMl9BTSk7CisJd3JpdGViKDB4MzksIGJhc2UgKyBWTUVfTUFTVEVSMjRfQU0pOworCXdyaXRlYigweDI5LCBiYXNlICsgVk1FX01BU1RFUjE2X0FNKTsKKwl3cml0ZWIoMHgyZiwgYmFzZSArIFZNRV9NQVNURVJfUkVHX0FNKTsKKwl3cml0ZWwoMHgwMDAwMDAwMCwgYmFzZSArIFZNRV9STVdfQURSUyk7CisJd3JpdGViKDB4MDAsIGJhc2UgKyBWTUVfSVJRKTsKKwl3cml0ZWIoMHgwMCwgYmFzZSArIFZNRV9JTlRfRU4pOworCXdyaXRlbCgweDAwMDAwMDAwLCBiYXNlICsgVk1FX0lSUTFfUkVHKTsKKwl3cml0ZWwoMHgwMDAwMDAwMCwgYmFzZSArIFZNRV9JUlEyX1JFRyk7CisJd3JpdGVsKDB4MDAwMDAwMDAsIGJhc2UgKyBWTUVfSVJRM19SRUcpOworCXdyaXRlbCgweDAwMDAwMDAwLCBiYXNlICsgVk1FX0lSUTRfUkVHKTsKKwl3cml0ZWwoMHgwMDAwMDAwMCwgYmFzZSArIFZNRV9JUlE1X1JFRyk7CisJd3JpdGVsKDB4MDAwMDAwMDAsIGJhc2UgKyBWTUVfSVJRNl9SRUcpOworCXdyaXRlbCgweDAwMDAwMDAwLCBiYXNlICsgVk1FX0lSUTdfUkVHKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdWx0aXZfYXV0b19zbG90X2lkKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmVjdG9yOworCWludCBzbG90X2lkID0gMTsKKwlpZiAocmVhZGIoYmFzZSArIFZNRV9DVFJMKSAmIFZNRV9DVFJMX1NZU0ZBSUwpIHsKKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKShiYXNlICsgVk1FX0lSUTJfUkVHKSA9IDB4ZmU7CisJCXdyaXRlYihyZWFkYihiYXNlICsgVk1FX0lSUSkgfCAweDA0LCBiYXNlICsgVk1FX0lSUSk7CisJCXdyaXRlYihyZWFkYihiYXNlICsgVk1FX0NUUkwpICYgflZNRV9DVFJMX1NZU0ZBSUwsCisJCQkJYmFzZSArIFZNRV9DVFJMKTsKKwkJd2hpbGUgKHJlYWRiKGJhc2UgKyBWTUVfU1RBVFVTKSAmIFZNRV9TVEFUVVNfU1lTRkFJTCk7CisJCWlmIChyZWFkYihiYXNlICsgVk1FX1NUQVRVUykgJiBWTUVfU1RBVFVTX1NZU0NPTikgeworCQkJd2hpbGUgKHJlYWRiKGJhc2UgKyBWTUVfSU5UKSAmIDB4MDQpIHsKKwkJCQl2ZWN0b3IgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCopCisJCQkJCSh2bWVfaWFja19hZGRyICsgVk1FX0lBQ0syKTsKKwkJCQkqKHVuc2lnbmVkIGNoYXIqKSh2bWVfYXNpX2FkZHIgKyAweDdmZmZmKQorCQkJCQk9IChzbG90X2lkIDw8IDMpICYgMHhmZjsKKwkJCQlzbG90X2lkICsrOworCQkJCWlmIChzbG90X2lkID4gMzEpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCitpbnQgbXVsdGl2ZXJzZV9pbml0KHZvaWQpCit7CisJaW50IGk7CisJcGNpX2Rldl90IHBkZXY7CisJdW5zaWduZWQgaW50IGJhcls2XTsKKworCXBkZXYgPSBwY2lfZmluZF9kZXZpY2UoMHgxODk1LCAweDAwMDEsIDApOworCisJaWYgKHBkZXYgPT0gMCkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChwZGV2LAorCQkJCVBDSV9CQVNFX0FERFJFU1NfMCArIGkgKiA0LCAmYmFyW2ldKTsKKworCXBjaV9yZWdfYWRkciA9IGJhclswXTsKKwl2bWVfcmVnX2FkZHIgPSBiYXJbMV0gKyAweDAwRjAwMDAwOworCXZtZV9pYWNrX2FkZHIgPSBiYXJbMV0gKyAweDAwMjAwMDAwOworCXZtZV9hc2lfYWRkciA9IGJhclszXTsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKHBkZXYsIFBDSV9DT01NQU5ELAorCQlQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUik7CisKKwl3cml0ZWwoMHhGRjAwMDAwMCwgcGNpX3JlZ19hZGRyICsgUF9UQTEpOworCXdyaXRlbCgweDA0LCBwY2lfcmVnX2FkZHIgKyBQX0lNR19DVFJMMSk7CisJd3JpdGVsKDB4ZjAwMDAwMDAsIHBjaV9yZWdfYWRkciArIFBfVEEyKTsKKwl3cml0ZWwoMHgwNCwgcGNpX3JlZ19hZGRyICsgUF9JTUdfQ1RSTDIpOworCXdyaXRlbCgweEYxMDAwMDAwLCBwY2lfcmVnX2FkZHIgKyBQX1RBMyk7CisJd3JpdGVsKDB4MDQsIHBjaV9yZWdfYWRkciArIFBfSU1HX0NUUkwzKTsKKwl3cml0ZWwoVk1FX0EzMl9NU1RSX0JVUywgcGNpX3JlZ19hZGRyICsgUF9UQTUpOworCXdyaXRlbCh+KFZNRV9BMzJfTVNUUl9TSVpFLTEpLCBwY2lfcmVnX2FkZHIgKyBQX0FNNSk7CisJd3JpdGVsKDB4MDQsIHBjaV9yZWdfYWRkciArIFBfSU1HX0NUUkw1KTsKKworCXdyaXRlbChWTUVfQTMyX1NMVl9CVVMsIHBjaV9yZWdfYWRkciArIFdfQkExKTsKKwl3cml0ZWwofihWTUVfQTMyX1NMVl9TSVpFLTEpLCBwY2lfcmVnX2FkZHIgKyBXX0FNMSk7CisJd3JpdGVsKFZNRV9BMzJfU0xWX0xPQ0FMLCBwY2lfcmVnX2FkZHIgKyBXX1RBMSk7CisJd3JpdGVsKDB4MDQsIHBjaV9yZWdfYWRkciArIFdfSU1HX0NUUkwxKTsKKworCXdyaXRlbCgweEYwMDAwMDAwLCBwY2lfcmVnX2FkZHIgKyBXX0JBMik7CisJd3JpdGVsKDB4RkYwMDAwMDAsIHBjaV9yZWdfYWRkciArIFdfQU0yKTsKKwl3cml0ZWwoVk1FX0EyNF9TTFZfTE9DQUwsIHBjaV9yZWdfYWRkciArIFdfVEEyKTsKKwl3cml0ZWwoMHgwNCwgcGNpX3JlZ19hZGRyICsgV19JTUdfQ1RSTDIpOworCisJd3JpdGVsKDB4RkYwMDAwMDAsIHBjaV9yZWdfYWRkciArIFdfQkEzKTsKKwl3cml0ZWwoMHhGRjAwMDAwMCwgcGNpX3JlZ19hZGRyICsgV19BTTMpOworCXdyaXRlbChWTUVfQTE2X1NMVl9MT0NBTCwgcGNpX3JlZ19hZGRyICsgV19UQTMpOworCXdyaXRlbCgweDA0LCBwY2lfcmVnX2FkZHIgKyBXX0lNR19DVFJMMyk7CisKKwl3cml0ZWwoMHgwMDAwMDAwMSwgcGNpX3JlZ19hZGRyICsgV19FUlJfQ1MpOworCXdyaXRlbCgweDAwMDAwMDAxLCBwY2lfcmVnX2FkZHIgKyBQX0VSUl9DUyk7CisKKwltdWx0aXZfcmVzZXQodm1lX3JlZ19hZGRyKTsKKwl3cml0ZWIocmVhZGIodm1lX3JlZ19hZGRyICsgVk1FX0NUUkwpIHwgVk1FX0NUUkxfU0hPUlRfRCwKKwkJdm1lX3JlZ19hZGRyICsgVk1FX0NUUkwpOworCisJbXVsdGl2X2F1dG9fc2xvdF9pZCh2bWVfcmVnX2FkZHIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9ldGluL2t2bWUwODAvbXVsdGl2ZXJzZS5oIGIvYm9hcmQvZXRpbi9rdm1lMDgwL211bHRpdmVyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzYxNjJkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZXRpbi9rdm1lMDgwL211bHRpdmVyc2UuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIG11bHRpdmVyc2UuaAorICoKKyAqIFZNRSBkcml2ZXIgZm9yIE11bHRpdmVyc2UKKyAqCisgKiBBdXRob3IgOiBTYW5nbW9vbiBLaW0KKyAqCSAgICBkb2dvaWxAZXRpbnN5cy5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBFVElOIFNZU1RFTVMgQ28uLEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZgl0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19NVUxUSVZFUlNFX0hfXworI2RlZmluZSBfX01VTFRJVkVSU0VfSF9fCisKKyNkZWZpbmUgVk1FX0EzMl9NU1RSX0JVUwkweDkwMDAwMDAwCisjZGVmaW5lIFZNRV9BMzJfTVNUUl9TSVpFCTB4MDEwMDAwMDAKKworI2RlZmluZSBWTUVfQTMyX1NMVl9TSVpFCTB4MDEwMDAwMDAKKworI2RlZmluZSBWTUVfQTMyX1NMVl9CVVMJCTB4OTAwMDAwMDAKKyNkZWZpbmUgVk1FX0EyNF9TTFZfQlVTCQkweDAwMDAwMDAwCisjZGVmaW5lIFZNRV9BMTZfU0xWX0JVUwkJMHgwMDAwMDAwMAorCisjZGVmaW5lIFZNRV9BMzJfU0xWX0xPQ0FMCTB4MDAwMDAwMDAKKyNkZWZpbmUgVk1FX0EyNF9TTFZfTE9DQUwJMHgwMDAwMDAwMAorI2RlZmluZSBWTUVfQTE2X1NMVl9MT0NBTAkweDAwMDAwMDAwCisKKyNkZWZpbmUgQTMyX1NMVl9XSU5ET1cKKyN1bmRlZglBMjRfU0xWX1dJTkRPVworI3VuZGVmCUExNl9TTFZfV0lORE9XCisjdW5kZWYJUkVHX1NMVl9XSU5ET1cKKworLyogUENJIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBfSU1HX0NUUkwwCQkweDEwMAorI2RlZmluZSBQX0JBMAkJCTB4MTA0CisjZGVmaW5lIFBfQU0wCQkJMHgxMDgKKyNkZWZpbmUgUF9UQTAJCQkweDEwQworI2RlZmluZSBQX0lNR19DVFJMMQkJMHgxMTAKKyNkZWZpbmUgUF9CQTEJCQkweDExNAorI2RlZmluZSBQX0FNMQkJCTB4MTE4CisjZGVmaW5lIFBfVEExCQkJMHgxMUMKKyNkZWZpbmUgUF9JTUdfQ1RSTDIJCTB4MTIwCisjZGVmaW5lIFBfQkEyCQkJMHgxMjQKKyNkZWZpbmUgUF9BTTIJCQkweDEyOAorI2RlZmluZSBQX1RBMgkJCTB4MTJDCisjZGVmaW5lIFBfSU1HX0NUUkwzCQkweDEzMAorI2RlZmluZSBQX0JBMwkJCTB4MTM0CisjZGVmaW5lIFBfQU0zCQkJMHgxMzgKKyNkZWZpbmUgUF9UQTMJCQkweDEzQworI2RlZmluZSBQX0lNR19DVFJMNAkJMHgxNDAKKyNkZWZpbmUgUF9CQTQJCQkweDE0NAorI2RlZmluZSBQX0FNNAkJCTB4MTQ4CisjZGVmaW5lIFBfVEE0CQkJMHgxNEMKKyNkZWZpbmUgUF9JTUdfQ1RSTDUJCTB4MTUwCisjZGVmaW5lIFBfQkE1CQkJMHgxNTQKKyNkZWZpbmUgUF9BTTUJCQkweDE1OAorI2RlZmluZSBQX1RBNQkJCTB4MTVDCisjZGVmaW5lIFBfRVJSX0NTCQkweDE2MAorI2RlZmluZSBQX0VSUl9BRERSCQkweDE2NAorI2RlZmluZSBQX0VSUl9EQVRBCQkweDE2OAorCisjZGVmaW5lIFdCX0NPTkZfU1BDX0JBUgkJMHgxODAKKyNkZWZpbmUgV19JTUdfQ1RSTDEJCTB4MTg0CisjZGVmaW5lIFdfQkExCQkJMHgxODgKKyNkZWZpbmUgV19BTTEJCQkweDE4QworI2RlZmluZSBXX1RBMQkJCTB4MTkwCisjZGVmaW5lIFdfSU1HX0NUUkwyCQkweDE5NAorI2RlZmluZSBXX0JBMgkJCTB4MTk4CisjZGVmaW5lIFdfQU0yCQkJMHgxOUMKKyNkZWZpbmUgV19UQTIJCQkweDFBMAorI2RlZmluZSBXX0lNR19DVFJMMwkJMHgxQTQKKyNkZWZpbmUgV19CQTMJCQkweDFBOAorI2RlZmluZSBXX0FNMwkJCTB4MUFDCisjZGVmaW5lIFdfVEEzCQkJMHgxQjAKKyNkZWZpbmUgV19JTUdfQ1RSTDQJCTB4MUI0CisjZGVmaW5lIFdfQkE0CQkJMHgxQjgKKyNkZWZpbmUgV19BTTQJCQkweDFCQworI2RlZmluZSBXX1RBNAkJCTB4MUMwCisjZGVmaW5lIFdfSU1HX0NUUkw1CQkweDFDNAorI2RlZmluZSBXX0JBNQkJCTB4MUM4CisjZGVmaW5lIFdfQU01CQkJMHgxQ0MKKyNkZWZpbmUgV19UQTUJCQkweDFEMAorI2RlZmluZSBXX0VSUl9DUwkJMHgxRDQKKyNkZWZpbmUgV19FUlJfQUREUgkJMHgxRDgKKyNkZWZpbmUgV19FUlJfREFUQQkJMHgxREMKKyNkZWZpbmUgQ05GX0FERFIJCTB4MUUwCisjZGVmaW5lIENORl9EQVRBCQkweDFFNAorI2RlZmluZSBJTlRfQUNLCQkJMHgxRTgKKyNkZWZpbmUgSUNSCQkJMHgxRUMKKyNkZWZpbmUgSVNSCQkJMHgxRjAKKworLyogVk1FIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFZNRV9TTEFWRTMyX0FNCQkweDAzCisjZGVmaW5lIFZNRV9TTEFWRTI0X0FNCQkweDAyCisjZGVmaW5lIFZNRV9TTEFWRTE2X0FNCQkweDAxCisjZGVmaW5lIFZNRV9TTEFWRV9SRUdfQU0JMHgwMAorI2RlZmluZSBWTUVfU0xBVkUzMl9BCQkweDA3CisjZGVmaW5lIFZNRV9TTEFWRTI0X0EJCTB4MDYKKyNkZWZpbmUgVk1FX1NMQVZFMTZfQQkJMHgwNQorI2RlZmluZSBWTUVfU0xBVkVfUkVHX0EJCTB4MDQKKyNkZWZpbmUgVk1FX1NMQVZFMzJfTUFTSwkweDBCCisjZGVmaW5lIFZNRV9TTEFWRTI0X01BU0sJMHgwQQorI2RlZmluZSBWTUVfU0xBVkUxNl9NQVNLCTB4MDkKKyNkZWZpbmUgVk1FX1NMQVZFX1JFR19NQVNLCTB4MDgKKyNkZWZpbmUgVk1FX1NMQVZFMzJfRU4JCTB4MEYKKyNkZWZpbmUgVk1FX1NMQVZFMjRfRU4JCTB4MEUKKyNkZWZpbmUgVk1FX1NMQVZFMTZfRU4JCTB4MEQKKyNkZWZpbmUgVk1FX1NMQVZFX1JFR19FTgkweDBDCisjZGVmaW5lIFZNRV9NQVNURVIzMl9BTQkJMHgxMworI2RlZmluZSBWTUVfTUFTVEVSMjRfQU0JCTB4MTIKKyNkZWZpbmUgVk1FX01BU1RFUjE2X0FNCQkweDExCisjZGVmaW5lIFZNRV9NQVNURVJfUkVHX0FNCTB4MTAKKyNkZWZpbmUgVk1FX1JNV19BRFJTCQkweDE0CisjZGVmaW5lIFZNRV9NQk9YCQkweDE4CisjZGVmaW5lIFZNRV9TVEFUVVMJCTB4MUUKKyNkZWZpbmUgVk1FX0NUUkwJCTB4MUMKKyNkZWZpbmUgVk1FX0lSUQkJCTB4MjAKKyNkZWZpbmUgVk1FX0lOVF9FTgkJMHgyMQorI2RlZmluZSBWTUVfSU5UCQkJMHgyMgorI2RlZmluZSBWTUVfSVJRMV9SRUcJCTB4MjQKKyNkZWZpbmUgVk1FX0lSUTJfUkVHCQkweDI4CisjZGVmaW5lIFZNRV9JUlEzX1JFRwkJMHgyQworI2RlZmluZSBWTUVfSVJRNF9SRUcJCTB4MzAKKyNkZWZpbmUgVk1FX0lSUTVfUkVHCQkweDM0CisjZGVmaW5lIFZNRV9JUlE2X1JFRwkJMHgzOAorI2RlZmluZSBWTUVfSVJRN19SRUcJCTB4M0MKKworLyogVk1FIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBWTUVfQ1RSTF9CUkRSU1QJCTB4MDEKKyNkZWZpbmUgVk1FX0NUUkxfU1lTUlNUCQkweDAyCisjZGVmaW5lIFZNRV9DVFJMX1JNVwkJMHgwNAorI2RlZmluZSBWTUVfQ1RSTF9TSE9SVF9ECTB4MDgKKyNkZWZpbmUgVk1FX0NUUkxfU1lTRkFJTAkweDEwCisjZGVmaW5lIFZNRV9DVFJMX1ZPV04JCTB4MjAKKyNkZWZpbmUgVk1FX0NUUkxfQTE2X1JFR19NT0RFCTB4NDAKKworLyogVk1FIHN0YXR1cyByZWdpc3RlciAqLworCisjZGVmaW5lIFZNRV9TVEFUVVNfU1lTQ09OCTB4MDEKKyNkZWZpbmUgVk1FX1NUQVRVU19TWVNGQUlMCTB4MDIKKyNkZWZpbmUgVk1FX1NUQVRVU19BQ0ZBSUwJMHgwNAorI2RlZmluZSBWTUVfU1RBVFVTX1NZU1JTVAkweDA4CisjZGVmaW5lIFZNRV9TVEFUVVNfVk9XTgkJMHgxMAorCisvKiBJbnRlcnJ1cHQgdHlwZXMgKi8KKworI2RlZmluZSBMVkwxCQkJMHgwMDAyCisjZGVmaW5lIExWTDIJCQkweDAwMDQKKyNkZWZpbmUgTFZMMwkJCTB4MDAwOAorI2RlZmluZSBMVkw0CQkJMHgwMDEwCisjZGVmaW5lIExWTDUJCQkweDAwMjAKKyNkZWZpbmUgTFZMNgkJCTB4MDA0MAorI2RlZmluZSBMVkw3CQkJMHgwMDgwCisjZGVmaW5lIE1VTFRJVkVSU0VfSU5USV9JTlQJMHgwMTAwCisjZGVmaW5lIE1VTFRJVkVSU0VfV0JfSU5UCTB4MDIwMAorI2RlZmluZSBNVUxUSVZFUlNFX1BDSV9JTlQJMHgwNDAwCisKKy8qIGludGVycnVwdCBhY2tub3dsZWRnZSAqLworCisjZGVmaW5lIFZNRV9JQUNLMQkJMHgwNAorI2RlZmluZSBWTUVfSUFDSzIJCTB4MDgKKyNkZWZpbmUgVk1FX0lBQ0szCQkweDBjCisjZGVmaW5lIFZNRV9JQUNLNAkJMHgxMAorI2RlZmluZSBWTUVfSUFDSzUJCTB4MTQKKyNkZWZpbmUgVk1FX0lBQ0s2CQkweDE4CisjZGVmaW5lIFZNRV9JQUNLNwkJMHgxYworCisjZW5kaWYgLyogX19NVUxUSVZFUlNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXRpbi9rdm1lMDgwL3UtYm9vdC5sZHMgYi9ib2FyZC9ldGluL2t2bWUwODAvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGEzNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZXRpbi9rdm1lMDgwL3UtYm9vdC5sZHMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCX0KKyAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9CisgIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQorICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgY3B1L21wYzgyNHgvc3RhcnQubwkoLnRleHQpCisgICAgbGliX3BwYy9ib2FyZC5vCSgudGV4dCkKKyAgICBsaWJfcHBjL3BwY3N0cmluZy5vCSgudGV4dCkKKworCS4gPSBERUZJTkVEKGVudl9vZmZzZXQpID8gZW52X29mZnNldCA6IC47CisgICAgY29tbW9uL2Vudmlyb25tZW50Lm8gKC50ZXh0KQorCisJKigudGV4dCkKKworICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgICAgLiA9IEFMSUdOKDE2KTsKKyAgICAqKC5yb2RhdGEpCisgICAgKigucm9kYXRhMSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDBGRkYpICYgMHhGRkZGRjAwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKSA+PiAyOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDQwOTYpOworICBfX2luaXRfYmVnaW4gPSAuOworICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KKyAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9CisgIC4gPSBBTElHTig0MDk2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisKKyAgX2VuZCA9IC4gOworICBQUk9WSURFIChlbmQgPSAuKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2V0eDA5NC9NYWtlZmlsZSBiL2JvYXJkL2V0eDA5NC9NYWtlZmlsZQppbmRleCAxM2NlOWZjLi5lM2QyNGIzIDEwMDY0NAotLS0gYS9ib2FyZC9ldHgwOTQvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXR4MDk0L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNDUxMC9NYWtlZmlsZSBiL2JvYXJkL2V2YjQ1MTAvTWFrZWZpbGUKaW5kZXggMTA4NTBhOS4uYzYzNGY3MiAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNDUxMC9NYWtlZmlsZQorKysgYi9ib2FyZC9ldmI0NTEwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTMgKzIzLDE3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gZXZiNDUxMC5vIGZsYXNoLm8KK0NPQkpTCTo9IGV2YjQ1MTAubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvTWFrZWZpbGUgYi9ib2FyZC9ldmI2NDI2MC9NYWtlZmlsZQppbmRleCBjNDkzZDZjLi5iMjgzNzJkIDEwMDY0NAotLS0gYS9ib2FyZC9ldmI2NDI2MC9NYWtlZmlsZQorKysgYi9ib2FyZC9ldmI2NDI2MC9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjIAogIyAoQykgQ29weXJpZ2h0IDIwMDEKICMgSm9zaCBIdWJlciA8aHViZXJAbWNseC5jb20+LCBNaXNzaW9uIENyaXRpY2FsIExpbnV4LCBJbmMuCiAjCkBAIC0yMywyMiArMjYsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAogU09CSlMJPSBtaXNjLm8KLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gc2VyaWFsLm8gbWVtb3J5Lm8gcGNpLm8gXAorQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gc2VyaWFsLm8gbWVtb3J5Lm8gcGNpLm8gXAogCSAgZXRoLm8gZXRoX2FkZHJ0YmwubyBtcHNjLm8gaTJjLm8gXAogCSAgc2RyYW1faW5pdC5vIHp1bWFfcGJiLm8gaW50ZWxfZmxhc2gubyB6dW1hX3BiYl9tYm94Lm8KIAorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2V4Yml0Z2VuL01ha2VmaWxlIGIvYm9hcmQvZXhiaXRnZW4vTWFrZWZpbGUKaW5kZXggMzRiZDRiMi4uN2EzOTU5MiAxMDA2NDQKLS0tIGEvYm9hcmQvZXhiaXRnZW4vTWFrZWZpbGUKKysrIGIvYm9hcmQvZXhiaXRnZW4vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKIFNPQkpTCT0gaW5pdC5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJF4KQEAgLTQxLDkgKzQ0LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXpraXQ1MzMvTWFrZWZpbGUgYi9ib2FyZC9lemtpdDUzMy9NYWtlZmlsZQppbmRleCBjOWIzYzkyLi43MGZlYjRhIDEwMDY0NAotLS0gYS9ib2FyZC9lemtpdDUzMy9NYWtlZmlsZQorKysgYi9ib2FyZC9lemtpdDUzMy9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKICMgQ29weXJpZ2h0IChjKSAyMDA1IGJsYWNrZmluLnVjbGludXgub3JnCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNywxOCArMjcsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBlemtpdDUzMy5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBlemtpdDUzMy5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9mYWRzL01ha2VmaWxlIGIvYm9hcmQvZmFkcy9NYWtlZmlsZQppbmRleCBiYWE2YzJlLi5jMGMxNzIyIDEwMDY0NAotLS0gYS9ib2FyZC9mYWRzL01ha2VmaWxlCisrKyBiL2JvYXJkL2ZhZHMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gbGFtcC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBsYW1wLm8gcGNtY2lhLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2ZhZHMvZmFkcy5oIGIvYm9hcmQvZmFkcy9mYWRzLmgKaW5kZXggZTk4MWJlMC4uNDFmMThiNSAxMDA2NDQKLS0tIGEvYm9hcmQvZmFkcy9mYWRzLmgKKysrIGIvYm9hcmQvZmFkcy9mYWRzLmgKQEAgLTQ2Nyw3ICs0NjcsOSBAQAogI2RlZmluZSBDT05GSUdfSVNPX1BBUlRJVElPTgkxCiAKICN1bmRlZglDT05GSUdfQVRBUEkKKyNpZiAwCS8qIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2hlbiBDRkdfQ01EX0lERSBpcyBub3QgZW5hYmxlZCwgdG9vICovCiAjZGVmaW5lIENPTkZJR19JREVfOHh4X1BDQ0FSRAkxCS8qIFVzZSBJREUgd2l0aCBQQyBDYXJkIEFkYXB0ZXIgKi8KKyNlbmRpZgogI3VuZGVmCUNPTkZJR19JREVfOHh4X0RJUkVDVAkJLyogRGlyZWN0IElERQkgbm90IHN1cHBvcnRlZAkqLwogI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogTEVECSBmb3IgaWRlIG5vdCBzdXBwb3J0ZWQJKi8KICN1bmRlZglDT05GSUdfSURFX1JFU0VUCQkvKiByZXNldCBmb3IgaWRlIG5vdCBzdXBwb3J0ZWQJKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2ZhZHMvcGNtY2lhLmMgYi9ib2FyZC9mYWRzL3BjbWNpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGMxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9mYWRzL3BjbWNpYS5jCkBAIC0wLDAgKzEsODQgQEAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM4eHguaD4KKyNpbmNsdWRlIDxwY21jaWEuaD4KKworI3VuZGVmCUNPTkZJR19QQ01DSUEKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19QQ01DSUEKKworI2lmZGVmCUNPTkZJR19BRFMKKyNkZWZpbmUJUENNQ0lBX0JPQVJEX01TRyAiQURTIgorI2Vsc2UKKyNkZWZpbmUJUENNQ0lBX0JPQVJEX01TRyAiRkFEUyIKKyNlbmRpZgorCitpbnQgcGNtY2lhX3ZvbHRhZ2Vfc2V0KGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQoreworCXVfbG9uZyByZWcgPSAwOworCisJc3dpdGNoKHZwcCkgeworCQljYXNlIDA6IHJlZyA9IDA7IGJyZWFrOworCQljYXNlIDUwOiByZWcgPSAxOyBicmVhazsKKwkJY2FzZSAxMjA6IHJlZyA9IDI7IGJyZWFrOworCQlkZWZhdWx0OiByZXR1cm4gMTsKKwl9CisKKwlzd2l0Y2godmNjKSB7CisJCWNhc2UgMDogcmVnID0gMDsgYnJlYWs7CisjaWZkZWYgQ09ORklHX0FEUworCWNhc2UgNTA6IHJlZyA9IEJDU1IxX1BDQ1ZDQ09OOyBicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19GQURTCisJY2FzZSAzMzogcmVnID0gQkNTUjFfUENDVkNDMCB8IEJDU1IxX1BDQ1ZDQzE7IGJyZWFrOworCWNhc2UgNTA6IHJlZyA9IEJDU1IxX1BDQ1ZDQzE7IGJyZWFrOworI2VuZGlmCisJZGVmYXVsdDogcmV0dXJuIDE7CisJfQorCisJLyogZmlyc3QsIHR1cm4gb2ZmIGFsbCBwb3dlciAqLworCisjaWZkZWYgQ09ORklHX0FEUworCSooKHVpbnQgKilCQ1NSMSkgfD0gQkNTUjFfUENDVkNDT047CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRkFEUworCSooKHVpbnQgKilCQ1NSMSkgJj0gfihCQ1NSMV9QQ0NWQ0MwIHwgQkNTUjFfUENDVkNDMSk7CisjZW5kaWYKKwkqKCh1aW50ICopQkNTUjEpICY9IH5CQ1NSMV9QQ0NWUFBfTUFTSzsKKworCS8qIGVuYWJsZSBuZXcgcG93ZXJzZXR0aW5ncyAqLworCisjaWZkZWYgQ09ORklHX0FEUworCSooKHVpbnQgKilCQ1NSMSkgJj0gfnJlZzsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19GQURTCisJKigodWludCAqKUJDU1IxKSB8PSByZWc7CisjZW5kaWYKKworIAkqKCh1aW50ICopQkNTUjEpIHw9IHJlZyA8PCAyMDsKKworCXJldHVybiAwOworfQorCitpbnQgcGNtY2lhX2hhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKK3sKKwkqKCh1aW50ICopQkNTUjEpICY9IH5CQ1NSMV9QQ0NFTjsKKwlyZXR1cm4gMDsKK30KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKK2ludCBwY21jaWFfaGFyZHdhcmVfZGlzYWJsZShpbnQgc2xvdCkKK3sKKwkqKCh1aW50ICopQkNTUjEpICY9IH5CQ1NSMV9QQ0NFTjsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLworCisjZW5kaWYJLyogQ09ORklHX1BDTUNJQSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZmxhZ2FkbS9NYWtlZmlsZSBiL2JvYXJkL2ZsYWdhZG0vTWFrZWZpbGUKaW5kZXggN2EyMDE0ZC4uMWI1N2QyYiAxMDA2NDQKLS0tIGEvYm9hcmQvZmxhZ2FkbS9NYWtlZmlsZQorKysgYi9ib2FyZC9mbGFnYWRtL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnVua3dlcmsvdm92cG4tZ3cvTWFrZWZpbGUgYi9ib2FyZC9mdW5rd2Vyay92b3Zwbi1ndy9NYWtlZmlsZQppbmRleCBmNzdjYzYwLi5iMmQxZTM1IDEwMDY0NAotLS0gYS9ib2FyZC9mdW5rd2Vyay92b3Zwbi1ndy9NYWtlZmlsZQorKysgYi9ib2FyZC9mdW5rd2Vyay92b3Zwbi1ndy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8gbTg4ZTYwNjAubworQ09CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vIG04OGU2MDYwLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9nMjAwMC9NYWtlZmlsZSBiL2JvYXJkL2cyMDAwL01ha2VmaWxlCmluZGV4IDU0NzFkMTMuLjliOWYwMzMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2cyMDAwL01ha2VmaWxlCisrKyBiL2JvYXJkL2cyMDAwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDkgKzIzLDEzIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIHN0cmF0YWZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBzdHJhdGFmbGFzaC5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9nY3BsdXMvTWFrZWZpbGUgYi9ib2FyZC9nY3BsdXMvTWFrZWZpbGUKaW5kZXggMTk1NGQ2Ni4uNjk1Y2Q5MyAxMDA2NDQKLS0tIGEvYm9hcmQvZ2NwbHVzL01ha2VmaWxlCisrKyBiL2JvYXJkL2djcGx1cy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIDIwMDMgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KQEAgLTI1LDEyICsyNSwxNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGdjcGx1cy5vIGZsYXNoLm8KK0NPQkpTCTo9IGdjcGx1cy5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtNDEsOSArNDUsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2dlbjg2MHQvTWFrZWZpbGUgYi9ib2FyZC9nZW44NjB0L01ha2VmaWxlCmluZGV4IGRkN2VjZjEuLjlkMzY3MTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2dlbjg2MHQvTWFrZWZpbGUKKysrIGIvYm9hcmQvZ2VuODYwdC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBiZWVwZXIubyBmcGdhLm8gaW9wb3J0Lm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGJlZXBlci5vIGZwZ2EubyBpb3BvcnQubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZ2VuaWV0di9NYWtlZmlsZSBiL2JvYXJkL2dlbmlldHYvTWFrZWZpbGUKaW5kZXggMTNjZTlmYy4uZTNkMjRiMyAxMDA2NDQKLS0tIGEvYm9hcmQvZ2VuaWV0di9NYWtlZmlsZQorKysgYi9ib2FyZC9nZW5pZXR2L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvZ3RoL01ha2VmaWxlIGIvYm9hcmQvZ3RoL01ha2VmaWxlCmluZGV4IGUxNGMxMmUuLjk1YmYwNzIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2d0aC9NYWtlZmlsZQorKysgYi9ib2FyZC9ndGgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gZWVfYWNjZXNzLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGVlX2FjY2Vzcy5vIHBjbWNpYS5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9ndGgvcGNtY2lhLmMgYi9ib2FyZC9ndGgvcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlNTQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2d0aC9wY21jaWEuYwpAQCAtMCwwICsxLDkzIEBACisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXBjOHh4Lmg+CisjaW5jbHVkZSA8cGNtY2lhLmg+CisKKyN1bmRlZglDT05GSUdfUENNQ0lBCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCisjZGVmaW5lCUNPTkZJR19QQ01DSUEKKyNlbmRpZgorCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSURFKSAmJiBkZWZpbmVkKENPTkZJR19JREVfOHh4X1BDQ0FSRCkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfUENNQ0lBCisKKyNkZWZpbmUgUENNQ0lBX0JPQVJEX01TRyAiR1RIIENPTVBBQ1QgRkxBU0giCisKK2ludCBwY21jaWFfdm9sdGFnZV9zZXQgKGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQorewkvKiBEbyBub3RoaW5nICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBwY21jaWFfaGFyZHdhcmVfZW5hYmxlIChpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcDsKKwl2b2xhdGlsZSBjcG04eHhfdCAqY3A7CisJdm9sYXRpbGUgcGNtY29uZjh4eF90ICpwY21wOworCXZvbGF0aWxlIHN5c2NvbmY4eHhfdCAqc3lzcDsKKwl1aW50IHJlZywgbWFzazsKKworCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiBHVEggU2xvdCAlY1xuIiwgJ0EnICsgc2xvdCk7CisKKwlpbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOworCXN5c3AgPSAoc3lzY29uZjh4eF90ICopICgmKCgoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX3NpdV9jb25mKSk7CisJcGNtcCA9IChwY21jb25mOHh4X3QgKikgKCYoKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fcGNtY2lhKSk7CisJY3AgPSAoY3BtOHh4X3QgKikgKCYoKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtKSk7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlwY21wLT5wY21jX3BzY3IgPSBQQ01DSUFfTUFTSyAoX3Nsb3RfKTsKKwlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0sgKF9zbG90Xyk7CisKKwkvKgorCSogRGlzYWJsZSBpbnRlcnJ1cHRzLCBETUEsIGFuZCBQQ01DSUEgYnVmZmVycworCSogKGlzb2xhdGUgdGhlIGludGVyZmFjZSkgYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKKwkqLworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgPSAwOworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlggKF9zbG90XykgPSByZWc7CisJdWRlbGF5ICg1MDApOworCisJLyoKKwkqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGNhcmQgaW4gdGhlIHNsb3QsCisJKiB0aGVuIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlLgorCSovCisJdWRlbGF5ICgxMDAwMCk7CisJZGVidWcgKCJbJWRdICVzOiBQSVBSKCVwKT0weCV4XG4iLAorCSAgICAgICBfX0xJTkVfXywgX19GVU5DVElPTl9fLAorCSAgICAgICAmKHBjbXAtPnBjbWNfcGlwciksIHBjbXAtPnBjbWNfcGlwcik7CisJaWYgKHBjbXAtPnBjbWNfcGlwciAmIDB4OTgwMDAwMDApIHsKKwkJcHJpbnRmICgiICAgTm8gQ2FyZCBmb3VuZFxuIik7CisJCXJldHVybiAoMSk7CisJfQorCisJbWFzayA9IFBDTUNJQV9WUzEgKHNsb3QpIHwgUENNQ0lBX1ZTMiAoc2xvdCk7CisJcmVnID0gcGNtcC0+cGNtY19waXByOworCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwKKwkgICAgICAgcmVnLAorCSAgICAgICAocmVnICYgUENNQ0lBX1ZTMSAoc2xvdCkpID8gIm4iIDogImZmIiwKKwkgICAgICAgKHJlZyAmIFBDTUNJQV9WUzIgKHNsb3QpKSA/ICJuIiA6ICJmZiIpOworCisJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYIChfc2xvdF8pOworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlggKF9zbG90XykgPSByZWc7CisKKwl1ZGVsYXkgKDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCisKKwlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOworCisJcmV0dXJuIDA7Cit9CisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQoreworCXJldHVybiAwOwkvKiBObyBoYXJkd2FyZSB0byBkaXNhYmxlICovCit9CisjZW5kaWYKKworI2VuZGlmCS8qIENPTkZJR19QQ01DSUEgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2d0aDIvTWFrZWZpbGUgYi9ib2FyZC9ndGgyL01ha2VmaWxlCmluZGV4IDhlZjNhNTEuLmVkNmE0YTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2d0aDIvTWFrZWZpbGUKKysrIGIvYm9hcmQvZ3RoMi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDA1CisjIChDKSBDb3B5cmlnaHQgMjAwNS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOSArMjMsMjMgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBlZV9hY2Nlc3MubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gZWVfYWNjZXNzLm8KIFNPQkpTCT0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9ndGgyL2NvbmZpZy5tayBiL2JvYXJkL2d0aDIvY29uZmlnLm1rCmluZGV4IDZkMjFiYTEuLjJiYzEzMzggMTAwNjQ0Ci0tLSBhL2JvYXJkL2d0aDIvY29uZmlnLm1rCisrKyBiL2JvYXJkL2d0aDIvY29uZmlnLm1rCkBAIC0zOSw0ICszOSwzIEBACiBlbmRpZgogZW5kaWYKIGVuZGlmCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2d0aDIvZWVfYWNjZXNzLmMgYi9ib2FyZC9ndGgyL2VlX2FjY2Vzcy5jCmluZGV4IGUyOTMxMzkuLmQ0Nzk4YzQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2d0aDIvZWVfYWNjZXNzLmMKKysrIGIvYm9hcmQvZ3RoMi9lZV9hY2Nlc3MuYwpAQCAtOCw3ICs4LDcgQEAKICAgIEZvciBkb2N1bWVudGFpb24sIHNlZSBkYXRhIHNoZWV0IGZvciBEUzI0MzgsIDI0MzgucGRmCiAKICAgIEJ5IFRob21hcy5MYW5nZUBjb3JlbGF0dXMuY29tIDAwMTAyNQotICAgCisKICAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA1IENvcmVsYXR1cyBBQiAqLwogCiAvKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkvKiBDb21wdXRlIGEgbmV3IGNoZWNrc3VtIHdpdGggbmV3IGJ5dGUsIHVzaW5nIHByZXZpb3VzIGNoZWNrc3VtIGFzIGlucHV0CiAJICAgU2VlIERTIGFwcCBub3RlIDE3LCB1bmRlcnN0YW5kaW5nIGFuZCB1c2luZyBjeWNsaWMgcmVkdW5kYW5jeSBjaGVja3MuLi4KIAkgICBBbHNvIHNlZSBEUzI0MzgsIHBhZ2UgMTEgKi8KLQlyZXR1cm4oIGNyY19sb29rdXBbT2xkX2NyYyBeIE5ld192YWx1ZSBdKTsgCisJcmV0dXJuKCBjcmNfbG9va3VwW09sZF9jcmMgXiBOZXdfdmFsdWUgXSk7CiB9CiAKIGludCBlZV9jcmNfb2soIHU4ICpCdWZmZXIsIGludCBMZW4sIHU4IENyYyApewpAQCAtMTE5LDE2ICsxMTksMTYgQEAKIAkJQ3Vycl9ieXRlKys7CiAJfQogCUVfREVCVUcoIkNhbGN1bGF0ZWQgQ1JDID0gMHgleCwgcmVhZCA9IDB4JXhcbiIsIEN1cnJfY3JjLCBDcmMpOwotICAKKwogCWlmKEN1cnJfY3JjID09IENyYyl7Ci0JCS8qIEdvb2QgKi8gCisJCS8qIEdvb2QgKi8KIAkJcmV0dXJuKFRSVUUpOwogCX0KIAlwcmludGsoS0VSTl9FUlIiRUUgY2hlY2tzdW0gZXJyb3IsIENhbGN1bGF0ZWQgQ1JDID0gMHgleCwgcmVhZCA9IDB4JXhcbiIsIEN1cnJfY3JjLCBDcmMpOwogCXJldHVybihGQUxTRSk7CiB9CiAKLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIHNldF9pZGxlKHZvaWQpewogCS8qIFNlbmQgaWRsZSBhbmQga2VlcCBzdGFydCB0aW1lCiAJICAgQ29udGlub3VzIDEgaXMgaWRsZSAqLwpAQCAtMTM2LDcgKzEzNiw3IEBACiB9CiAKIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIGRvX2NwdV9yZXNldCh2b2lkKXsKIAkvKiBSZWxlYXNlIHJlc2V0IGFuZCB2ZXJpZnkgdGhhdCBjaGlwIHJlc3BvbmRzIHdpdGggcHJlc2VuY2UgcHVsc2UgKi8KIAlpbnQgUmV0cmllcz0wOwpAQCAtMTQ2LDEwICsxNDYsMTAgQEAKIAkJLyogU2VuZCByZXNldCAqLwogCQlXUklURV9QT1JUKDApOwogCQl1ZGVsYXkoUkVTRVRfTE9XX1RJTUUpOwotICAgIAorCiAJCS8qIFJlbGVhc2UgcmVzZXQgKi8KIAkJV1JJVEVfUE9SVCgxKTsKLSAgICAKKwogCQkvKiBXYWl0IGZvciBFRVBST00gdG8gZHJpdmUgb3V0cHV0ICovCiAJCXVkZWxheShQUkVTRU5DRV9USU1FT1VUKTsKIAkJaWYoIVJFQURfUE9SVCl7CkBAIC0xNjYsMTcgKzE2NiwxNyBAQAogCX0KIAogCXByaW50ayhLRVJOX0VSUiJlZXByb20gZGlkIG5vdCByZXNwb25kIHdoZW4gcmVsZWFzaW5nIHJlc2V0XG4iKTsKLSAgICAKKwogCS8qIE1ha2Ugc3VyZSBjaGlwIHJlbGVhc2VzIHBpbiAqLwogCXVkZWxheShQUkVTRU5DRV9MT1dfVElNRSk7CiAKIAkvKiBTZXQgdG8gaWRsZSBhZ2FpbiAqLwogCXNldF9pZGxlKCk7Ci0gCisKIAlyZXR1cm4oLUVJTyk7CiB9CiAKLXN0YXRpYyB1OCAKK3N0YXRpYyB1OAogcmVhZF9jcHVfYnl0ZSh2b2lkKXsKIAkvKiBSZWFkIGEgc2luZ2xlIGJ5dGUgZnJvbSBFRVBST00KIAkgICBSZWFkIExTYiBmaXJzdCAqLwpAQCAtMTg2LDM2ICsxODYsMzYgQEAKIAl1MzIgRmxhZ3M7CiAKIAlFX0RFQlVHKCJSZWFkaW5nIGJ5dGVcbiIpOwotICAKKwogCWZvcihpPTA7aTw4O2krKyl7CiAJCS8qIFNtYWxsIGRlbGF5IGJldHdlZW4gcHVsc2VzICovCiAJCXVkZWxheSgxKTsKIAotI2lmZGVmIF9fS0VSTkVMX18gIAotCQkvKiBEaXNhYmxlIGlycSAqLyAKKyNpZmRlZiBfX0tFUk5FTF9fCisJCS8qIERpc2FibGUgaXJxICovCiAJCXNhdmVfZmxhZ3MoRmxhZ3MpOwogCQljbGkoKTsKLSNlbmRpZiAgICAKKyNlbmRpZgogCiAJCS8qIFB1bGwgZG93biBwaW4gc2hvcnQgdGltZSB0byBzdGFydCByZWFkCiAJCSAgIFNlZSBwYWdlIDI2IGluIGRhdGEgc2hlZXQgKi8KLSAgICAKKwogCQlXUklURV9QT1JUKDApOwogCQl1ZGVsYXkoUkVBRF9MT1cpOwogCQlXUklURV9QT1JUKDEpOwotICAgICAgICAKKwogCQkvKiBXYWl0IGZvciBjaGlwIHRvIGRyaXZlIHBpbiAqLwogCQl1ZGVsYXkoUkVBRF9USU1FT1VUKTsKLSAgICAKKwogCQlWYWx1ZSA9IFJFQURfUE9SVDsKIAkJaWYoVmFsdWUpCiAJCQlWYWx1ZT0xOwogCiAjaWZkZWYgX19LRVJORUxfXwotCQkvKiBFbmFibGUgaXJxICovIAorCQkvKiBFbmFibGUgaXJxICovCiAJCXJlc3RvcmVfZmxhZ3MoRmxhZ3MpOwogI2VuZGlmCi0gICAgCisKIAkJLyogV2FpdCBmb3IgY2hpcCB0byByZWxlYXNlIHBpbiAqLwogCQl1ZGVsYXkoVE9UQUxfUkVBRF9MT1ctUkVBRF9USU1FT1VUKTsKIApAQCAtMjMwLDMwICsyMzAsMzAgQEAKIAlyZXR1cm4oUmVzdWx0KTsKIH0KIAotc3RhdGljIHZvaWQgCitzdGF0aWMgdm9pZAogd3JpdGVfY3B1X2J5dGUodTggQnl0ZSl7CiAJLyogV3JpdGUgYSBzaW5nbGUgYnl0ZSB0byBFRVBST00KIAkgICBXcml0ZSBMU2IgZmlyc3QgKi8KIAlpbnQgaTsKIAlpbnQgVmFsdWU7CiAJdTMyIEZsYWdzOwotICAKKwogCUVfREVCVUcoIldyaXRpbmcgYnl0ZSAweCV4XG4iLEJ5dGUpOwotICAKKwogCWZvcihpPTA7aTw4O2krKyl7CiAJCS8qIFNtYWxsIGRlbGF5IGJldHdlZW4gcHVsc2VzICovCiAJCXVkZWxheSgxKTsKIAkJVmFsdWUgPSBCeXRlJjE7Ci0gICAgCisKICNpZmRlZiBfX0tFUk5FTF9fCi0JCS8qIERpc2FibGUgaXJxICovIAorCQkvKiBEaXNhYmxlIGlycSAqLwogCQlzYXZlX2ZsYWdzKEZsYWdzKTsKIAkJY2xpKCk7Ci0jZW5kaWYgICAgCisjZW5kaWYKIAogCQkvKiBQdWxsIGRvd24gcGluIHNob3J0IHRpbWUgZm9yIGEgMSwgbG9uZyB0aW1lIGZvciBhIDAKIAkJICAgU2VlIHBhZ2UgMjYgaW4gZGF0YSBzaGVldCAqLwotICAgIAorCiAJCVdSSVRFX1BPUlQoMCk7CiAJCWlmKFZhbHVlKXsKIAkJCS8qIFdyaXRlIGEgMSAqLwpAQCAtMjY3LDU0ICsyNjcsNTQgQEAKIAkJV1JJVEVfUE9SVCgxKTsKIAogI2lmZGVmIF9fS0VSTkVMX18KLQkJLyogRW5hYmxlIGlycSAqLyAKKwkJLyogRW5hYmxlIGlycSAqLwogCQlyZXN0b3JlX2ZsYWdzKEZsYWdzKTsKICNlbmRpZgogCiAJCWlmKFZhbHVlKQogCQkJLyogV2FpdCBmb3IgY2hpcCB0byByZWFkIHRoZSAxICovCiAJCQl1ZGVsYXkoVE9UQUxfV1JJVEVfTE9XLVdSSVRFXzFfTE9XKTsKLSAgICAgICAgCisKIAkJLyogRV9ERUJVRygiV3JvdGUgJWRcbiIsVmFsdWUpOyAqLwogCQlCeXRlPj49MTsKIAl9CiB9CiAKIGludCBlZV9kb19jcHVfY29tbWFuZCggdTggKlR4LCBpbnQgVHhfbGVuLCB1OCAqUngsIGludCBSeF9sZW4sIGludCBTZW5kX3NraXAgKXsKLQkvKiBFeGVjdXRlIHRoaXMgY29tbWFuZCBzdHJpbmcsIGluY2x1ZGluZyAKKwkvKiBFeGVjdXRlIHRoaXMgY29tbWFuZCBzdHJpbmcsIGluY2x1ZGluZwogCSAgIGdpdmluZyByZXNldCBhbmQgc2V0dGluZyB0byBpZGxlIGFmdGVyIGNvbW1hbmQKLQkgICBpZiBSeF9sZW4gaXMgc2V0LCB3ZSByZWFkIG91dCBkYXRhIGZyb20gRUVQUk9NICovIAorCSAgIGlmIFJ4X2xlbiBpcyBzZXQsIHdlIHJlYWQgb3V0IGRhdGEgZnJvbSBFRVBST00gKi8KIAlpbnQgaTsKIAogCUVfREVCVUcoIkNvbW1hbmQsIFR4X2xlbiAlZCwgUnhfbGVuICVkXG4iLCBUeF9sZW4sIFJ4X2xlbiApOwotICAKKwogCWlmKGRvX2NwdV9yZXNldCgpKXsKIAkJLyogRmFpbGVkISAqLwogCQlyZXR1cm4oLUVJTyk7CiAJfQogCiAJaWYoU2VuZF9za2lwKQotCQkvKiBBbHdheXMgc2VuZCBTS0lQX1JPTSBmaXJzdCB0byB0ZWxsIGNoaXAgd2UgYXJlIHNlbmRpbmcgYSBjb21tYW5kLCAKKwkJLyogQWx3YXlzIHNlbmQgU0tJUF9ST00gZmlyc3QgdG8gdGVsbCBjaGlwIHdlIGFyZSBzZW5kaW5nIGEgY29tbWFuZCwKIAkJICAgZXhjZXB0IHdoZW4gd2UgcmVhZCBvdXQgcm9tIGRhdGEgZm9yIGNoaXAgKi8KIAkJd3JpdGVfY3B1X2J5dGUoU0tJUF9ST00pOwotICAKKwogCS8qIEFsd2F5cyBoYXZlIFR4IGRhdGEgKi8KIAlmb3IoaT0wO2k8VHhfbGVuO2krKyl7CiAJCXdyaXRlX2NwdV9ieXRlKFR4W2ldKTsKIAl9Ci0gIAorCiAJaWYoUnhfbGVuKXsKIAkJZm9yKGk9MDtpPFJ4X2xlbjtpKyspewogCQkJUnhbaV09cmVhZF9jcHVfYnl0ZSgpOwogCQl9CiAJfQotICAKKwogCXNldF9pZGxlKCk7CiAKIAlFX0RFQlVHKCJDb21tYW5kIGRvbmVcbiIpOwogCiAJcmV0dXJuKDApOwotfSAKK30KIAogaW50IGVlX2luaXRfY3B1X2RhdGEodm9pZCl7CiAJaW50IGk7CkBAIC0zMjMsNyArMzIzLDcgQEAKIAkvKiBMZWF2ZSBpdCBmbG90aW5nIHNpbmNlIGFsdGVyYSBpcyBkcml2aW5nIHRoZSBzYW1lIHBpbiAqLwogCXNldF9pZGxlKCk7CiAKLQkvKiBDb3B5IGFsbCBVc2VyIEVFUFJPTSBkYXRhIHRvIHNjcmF0Y2hwYWQgKi8gCisJLyogQ29weSBhbGwgVXNlciBFRVBST00gZGF0YSB0byBzY3JhdGNocGFkICovCiAJZm9yKGk9MDtpPFVTRVJfUEFHRVM7aSsrKXsKIAkJVHhbMF09UkVDQUxMX01FTU9SWTsKIAkJVHhbMV09RUVfVVNFUl9QQUdFXzAraTsKQEAgLTMzMiwxNiArMzMyLDE2IEBACiAKIAkvKiBNYWtlIHN1cmUgY2hpcCBkb2VzbnQgc3RvcmUgbWVhc3VyZW1lbnRzIGluIE5WUkFNICovCiAJVHhbMF09V1JJVEVfU0NSQVRDSFBBRDsKLQlUeFsxXT0wOyAvKiBQYWdlICovIAorCVR4WzFdPTA7IC8qIFBhZ2UgKi8KIAlUeFsyXT05OwogCWlmKGVlX2RvX2NwdV9jb21tYW5kKFR4LDMsTlVMTCwwLFRSVUUpKSByZXR1cm4oLUVJTyk7CiAKIAlUeFswXT1DT1BZX1NDUkFUQ0hQQUQ7CiAJaWYoZWVfZG9fY3B1X2NvbW1hbmQoVHgsMixOVUxMLDAsVFJVRSkpIHJldHVybigtRUlPKTsKLSAgCisKIAlmb3IoaT0wO2k8MTA7aSsrKXsKIAkJdWRlbGF5KDEwMDApOwogCX0KLSAgCisKIAlyZXR1cm4oMCk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9ndGgyL2VlX2FjY2Vzcy5oIGIvYm9hcmQvZ3RoMi9lZV9hY2Nlc3MuaAppbmRleCBjMjE3MzBlLi45MjYxOTlkIDEwMDY0NAotLS0gYS9ib2FyZC9ndGgyL2VlX2FjY2Vzcy5oCisrKyBiL2JvYXJkL2d0aDIvZWVfYWNjZXNzLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgRUVfQlVTWSAgMHg0MDAwMDAwMAogI2RlZmluZSBFRV9FUlJPUiAweDIwMDAwMDAwCiAKLS8qIENvbW1hbmRzICovIAorLyogQ29tbWFuZHMgKi8KICNkZWZpbmUgRUVfQ01EX05PUCAgICAgIDAKICNkZWZpbmUgRUVfQ01EX0lOSVRfUkVTIDEKICNkZWZpbmUgRUVfQ01EX1dSX0JZVEUgIDIKZGlmZiAtLWdpdCBhL2JvYXJkL2d0aDIvZWVfZGV2LmggYi9ib2FyZC9ndGgyL2VlX2Rldi5oCmluZGV4IGFjYzM0MTguLjg5ZWYyZjggMTAwNjQ0Ci0tLSBhL2JvYXJkL2d0aDIvZWVfZGV2LmgKKysrIGIvYm9hcmQvZ3RoMi9lZV9kZXYuaApAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBJTkNlZWRldmgKICNkZWZpbmUgSU5DZWVkZXZoCiAKLSNkZWZpbmUgRV9ERUJVRyhmbXQsYXJncy4uLikgaWYoIERlYnVnICkgcHJpbnRrKEtFUk5fREVCVUciRUU6ICIgZm10LCAjI2FyZ3MpIAorI2RlZmluZSBFX0RFQlVHKGZtdCxhcmdzLi4uKSBpZiggRGVidWcgKSBwcmludGsoS0VSTl9ERUJVRyJFRTogIiBmbXQsICMjYXJncykKIAogLyogTUlQUyAqLwogI2RlZmluZSBXUklURV9QT1JUKFZhbHVlKSB3cml0ZV9ncGlvX2RhdGEoVmFsdWUpCmRpZmYgLS1naXQgYS9ib2FyZC9ndGgyL2d0aDIuYyBiL2JvYXJkL2d0aDIvZ3RoMi5jCmluZGV4IDc3ZmM1YjQuLmZmZWFmNTggMTAwNjQ0Ci0tLSBhL2JvYXJkL2d0aDIvZ3RoMi5jCisrKyBiL2JvYXJkL2d0aDIvZ3RoMi5jCkBAIC02MSwxMyArNjEsMTMgQEAKIAl1MzIgKnNlcmlhbF9sb2dfb2Zmc2V0cCA9ICh1MzIqKVNFUklBTF9MT0dfQlVGRkVSOwogCiAJLyogQ29weSBidWZmZXIgZnJvbSBsYXN0IHJ1biAqLwotCW1lbWNweShzZXJpYWxfbG9nX2J1ZmZlciArIDQwOTYsIAotCSAgICAgICBzZXJpYWxfbG9nX2J1ZmZlciwgCisJbWVtY3B5KHNlcmlhbF9sb2dfYnVmZmVyICsgNDA5NiwKKwkgICAgICAgc2VyaWFsX2xvZ19idWZmZXIsCiAJICAgICAgIDQwOTYpOwogCiAJbWVtc2V0KHNlcmlhbF9sb2dfYnVmZmVyLCAwLCA0MDk2KTsKIAotCSpzZXJpYWxfbG9nX29mZnNldHAgPSA0OwkKKwkqc2VyaWFsX2xvZ19vZmZzZXRwID0gNDsKIH0KIAogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJdWRlbGF5KDEpOwogCQkqc3lzX291dHB1dGNsciA9IEdQSU9fTEVEQ0xLOwogCQl1ZGVsYXkoMSk7Ci0JCQorCiAJCXZhbHVlPDw9MTsKIAl9CiAJLyogRGF0YSBpcyBlbmFibGUgb3V0cHV0ICovCkBAIC0yMjgsNyArMjI4LDcgQEAKIAkJcHJpbnRmICgiSW52YWxpZCBib290IGNvdW50ICV1LCBzZXR0aW5nIDFcbiIsIENvdW50KTsKIAkJQ291bnQgPSAxOwogCX0KLQkKKwogCXByaW50ZiAoIkJvb3QgYXR0ZW1wdCAlZFxuIiwgQ291bnQpOwogCiAJZGF0YSA9IChTeXN0ZW0gPDwgOCkgfCBDb3VudDsKQEAgLTI0MSw5ICsyNDEsOSBAQAogfQogCiBzdGF0aWMgaW50IHJhbmRvbV9zeXN0ZW0odm9pZCl7Ci0JLyogRUVQUk9NIHJlYWQgZmFpbGVkLiBKdXN0IHRyeSB0byBjaG9vc2Ugb25lIAorCS8qIEVFUFJPTSByZWFkIGZhaWxlZC4gSnVzdCB0cnkgdG8gY2hvb3NlIG9uZQogCSAgIHN5c3RlbSByZWxlYXNlIGFuZCBob3BlIGl0IHdvcmtzICovCi0JCisKIAkvKiBGSVhNRSAqLwogCXJldHVybihTWVNURU1fQk9PVCk7CiB9CkBAIC0zMjAsOCArMzIwLDggQEAKIAkJCWRhdGEgPSAqYWRkcjsKIAkJCXN5c3RlbSA9IGRhdGEgPj4gODsKIAkJCWNvdW50ID0gZGF0YSAmIDB4RkY7Ci0JCQlpZiAoKHN5c3RlbSAhPSBTWVNURU1fQk9PVCkgJiAKLQkJCSAgICAoc3lzdGVtICE9IFNZU1RFTTJfQk9PVCkgJiAKKwkJCWlmICgoc3lzdGVtICE9IFNZU1RFTV9CT09UKSAmCisJCQkgICAgKHN5c3RlbSAhPSBTWVNURU0yX0JPT1QpICYKIAkJCSAgICAoc3lzdGVtICE9IEZBSUxTQUZFX0JPT1QpKSB7CiAJCQkJcHJpbnRmICgiKioqIFdyb25nIHN5c3RlbSAlZFxuIiwgc3lzdGVtKTsKIAkJCQlzeXN0ZW0gPSBGQUlMU0FGRV9CT09UOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZ3RoMi9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9ndGgyL2xvd2xldmVsX2luaXQuUwppbmRleCA2MmUzNjU3Li45ODNmZjcwIDEwMDY0NAotLS0gYS9ib2FyZC9ndGgyL2xvd2xldmVsX2luaXQuUworKysgYi9ib2FyZC9ndGgyL2xvd2xldmVsX2luaXQuUwpAQCAtMTk3LDExICsxOTcsMTEgQEAKIAogCS8qIFJDRTIgQ1AgQWx0ZXJhICovCiAJbGkJdDAsIE1FTV9TVENGRzIKLQlsaQl0MSwgMHgwMDAwMDI4MCAvKiBCRSwgRVcgKi8gCisJbGkJdDEsIDB4MDAwMDAyODAgLyogQkUsIEVXICovCiAJc3cJdDEsIDAodDApCiAKIAlsaQl0MCwgTUVNX1NUVElNRTIKLQlsaQl0MSwgMHgwMzAzMDAwYyAKKwlsaQl0MSwgMHgwMzAzMDAwYwogCXN3CXQxLCAwKHQwKQogCiAJbGkJdDAsIE1FTV9TVEFERFIyCkBAIC0yMTAsMTEgKzIxMCwxMSBAQAogCiAJLyogUkNFMyBEUCBBbHRlcmEgKi8KIAlsaQl0MCwgTUVNX1NUQ0ZHMwotCWxpCXQxLCAweDAwMDAwMjgwIC8qIEJFLCBFVyAqLyAKKwlsaQl0MSwgMHgwMDAwMDI4MCAvKiBCRSwgRVcgKi8KIAlzdwl0MSwgMCh0MCkKIAogCWxpCXQwLCBNRU1fU1RUSU1FMwotCWxpCXQxLCAweDAzMDMwMDBjIAorCWxpCXQxLCAweDAzMDMwMDBjCiAJc3cJdDEsIDAodDApCiAKIAlsaQl0MCwgTUVNX1NUQUREUjMKQEAgLTQyOCwxNCArNDI4LDE0IEBACiAJbGkJdDAsIDB4ODAwMDAwMDAKIAlsaQl0MSwgMHhGRkYwMDAgLyogNjQgTUIgKi8KIG10MToJbHcJdDIsIDAodDApCi0JYm5lCXQwLCB0MiwgbWVtaGFuZwkKKwlibmUJdDAsIHQyLCBtZW1oYW5nCiAJYWRkCXQxLCAtMQogCWFkZAl0MCwgNAogCWJuZQl0MSwgemVybywgbXQxCiAJbm9wCiAJbm9wCiAJLmdsb2JsCWNsZWFybWVtCi1jbGVhcm1lbToJCQorY2xlYXJtZW06CiAJCS8qIENsZWFyIG1lbW9yeSAqLwogCWxpCXQwLCAweDgwMDAwMDAwCiAJbGkJdDEsIDB4RkZGMDAwIC8qIDY0IE1CICovCkBAIC00NDUsMTAgKzQ0NSwxMCBAQAogCWJuZQl0MSwgemVybywgbXRjCiAJbm9wCiAJbm9wCi1tZW10ZXN0ZW5kOgkJCittZW10ZXN0ZW5kOgogCWoJcmEKIAlub3AKLQkKLW1lbWhhbmc6CQorCittZW1oYW5nOgogCWIJbWVtaGFuZwogCW5vcApkaWZmIC0tZ2l0IGEvYm9hcmQvZ3c4MjYwL01ha2VmaWxlIGIvYm9hcmQvZ3c4MjYwL01ha2VmaWxlCmluZGV4IDgyN2E2YWMuLmJmNWM1MDggMTAwNjQ0Ci0tLSBhL2JvYXJkL2d3ODI2MC9NYWtlZmlsZQorKysgYi9ib2FyZC9ndzgyNjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gZ3c4MjYwLm8gZmxhc2gubworQ09CSlMJOj0gZ3c4MjYwLm8gZmxhc2gubwogU09CSlMgICA6PQogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2hlcm1lcy9NYWtlZmlsZSBiL2JvYXJkL2hlcm1lcy9NYWtlZmlsZQppbmRleCAxM2NlOWZjLi5lM2QyNGIzIDEwMDY0NAotLS0gYS9ib2FyZC9oZXJtZXMvTWFrZWZpbGUKKysrIGIvYm9hcmQvaGVybWVzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvaGlkZGVuX2RyYWdvbi9NYWtlZmlsZSBiL2JvYXJkL2hpZGRlbl9kcmFnb24vTWFrZWZpbGUKaW5kZXggYjlmMWRmNi4uOWFjNmE0ZCAxMDA2NDQKLS0tIGEvYm9hcmQvaGlkZGVuX2RyYWdvbi9NYWtlZmlsZQorKysgYi9ib2FyZC9oaWRkZW5fZHJhZ29uL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMgPSAgJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUyA9ICAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2htaTEwMDEvTWFrZWZpbGUgYi9ib2FyZC9obWkxMDAxL01ha2VmaWxlCmluZGV4IGVkMzZlYTcuLjRiMmJiZTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2htaTEwMDEvTWFrZWZpbGUKKysrIGIvYm9hcmQvaG1pMTAwMS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDExICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9ICQoQk9BUkQpLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9oeW1vZC9NYWtlZmlsZSBiL2JvYXJkL2h5bW9kL01ha2VmaWxlCmluZGV4IGI1MmFmOWEuLmZmOWZhOTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2h5bW9kL01ha2VmaWxlCisrKyBiL2JvYXJkL2h5bW9kL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGJzcC5vIGVlcHJvbS5vIGZldGNoLm8gaW5wdXQubyBlbnYubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gYnNwLm8gZWVwcm9tLm8gZmV0Y2gubyBpbnB1dC5vIGVudi5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9pY2VjdWJlL01ha2VmaWxlIGIvYm9hcmQvaWNlY3ViZS9NYWtlZmlsZQppbmRleCBlYjVlZDU5Li44ZTYxYzc5IDEwMDY0NAotLS0gYS9ib2FyZC9pY2VjdWJlL01ha2VmaWxlCisrKyBiL2JvYXJkL2ljZWN1YmUvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNCwxMSArMjQsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2ljZWN1YmUvY29uZmlnLm1rIGIvYm9hcmQvaWNlY3ViZS9jb25maWcubWsKaW5kZXggMDdiNWRlMS4uMTcwNzc5ZCAxMDA2NDQKLS0tIGEvYm9hcmQvaWNlY3ViZS9jb25maWcubWsKKysrIGIvYm9hcmQvaWNlY3ViZS9jb25maWcubWsKQEAgLTMyLDcgKzMyLDcgQEAKICMJMHgwMDEwMDAwMCAgIGJvb3QgZnJvbSBSQU0gKGZvciB0ZXN0aW5nIG9ubHkpCiAjCiAKLXNpbmNsdWRlICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCitzaW5jbHVkZSAkKE9CSlRSRUUpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKIAogaWZuZGVmIFRFWFRfQkFTRQogIyMgU3RhbmRhcmQ6IGJvb3QgaGlnaApkaWZmIC0tZ2l0IGEvYm9hcmQvaWN1ODYyL01ha2VmaWxlIGIvYm9hcmQvaWN1ODYyL01ha2VmaWxlCmluZGV4IDdhMjAxNGQuLjYyZGIyZjQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ljdTg2Mi9NYWtlZmlsZQorKysgYi9ib2FyZC9pY3U4NjIvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIHBjbWNpYS5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9pY3U4NjIvcGNtY2lhLmMgYi9ib2FyZC9pY3U4NjIvcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmNjUzYgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2ljdTg2Mi9wY21jaWEuYwpAQCAtMCwwICsxLDI2OCBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzh4eC5oPgorI2luY2x1ZGUgPHBjbWNpYS5oPgorCisjdW5kZWYJQ09ORklHX1BDTUNJQQorCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkgJiYgZGVmaW5lZChDT05GSUdfSURFXzh4eF9QQ0NBUkQpCisjZGVmaW5lCUNPTkZJR19QQ01DSUEKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1BDTUNJQQorCisjZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIklDVTg2MiIKKworc3RhdGljIHZvaWQgY2ZnX3BvcnRfQiAodm9pZCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKKwl2b2xhdGlsZSBjcG04eHhfdAkqY3A7CisJdWludCByZWc7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJY3AgICAgPSAoY3BtOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX2NwbSkpOworCisJLyoKKwkqIENvbmZpZ3VyZSBQb3J0IEIgZm9yIFRQUzIyMDUgUEMtQ2FyZCBQb3dlci1JbnRlcmZhY2UgU3dpdGNoCisJKgorCSogU3dpdGNoIG9mZiBhbGwgdm9sdGFnZXMsIGFzc2VydCBzaHV0ZG93bgorCSovCisJcmVnICA9IGNwLT5jcF9wYmRhdDsKKwlyZWcgfD0gKFRQUzIyMDVfVlBQX1BHTSB8IFRQUzIyMDVfVlBQX1ZDQyB8CS8qIFZBVlBQID0+IEhpLVogKi8KKwkJCVRQUzIyMDVfVkNDMyAgICB8IFRQUzIyMDVfVkNDNSAgICB8CS8qIFZBVkNDID0+IEhpLVogKi8KKwkJCVRQUzIyMDVfU0hETik7CQkJCS8qIGVuYWJsZSBzd2l0Y2ggKi8KKwljcC0+Y3BfcGJkYXQgPSByZWc7CisKKwljcC0+Y3BfcGJwYXIgJj0gfihUUFMyMjA1X0lOUFVUUyB8IFRQUzIyMDVfT1VUUFVUUyk7CisKKwlyZWcgPSBjcC0+Y3BfcGJkaXIgJiB+KFRQUzIyMDVfSU5QVVRTKTsKKwljcC0+Y3BfcGJkaXIgPSByZWcgfCBUUFMyMjA1X09VVFBVVFM7CisKKwlkZWJ1ZyAoIlNldCBQb3J0IEI6IFBBUjogJTA4eCBESVI6ICUwOHggREFUOiAlMDh4XG4iLAorCSAgICAgICBjcC0+Y3BfcGJwYXIsIGNwLT5jcF9wYmRpciwgY3AtPmNwX3BiZGF0KTsKK30KKworaW50IHBjbWNpYV9oYXJkd2FyZV9lbmFibGUoaW50IHNsb3QpCit7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7CisJdm9sYXRpbGUgY3BtOHh4X3QJKmNwOworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKKwl2b2xhdGlsZSBzeXNjb25mOHh4X3QJKnN5c3A7CisJdWludCByZWcsIHBpcHIsIG1hc2s7CisJaW50IGk7CisKKwlkZWJ1ZyAoImhhcmR3YXJlX2VuYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOworCisJdWRlbGF5KDEwMDAwKTsKKworCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlzeXNwICA9IChzeXNjb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3NpdV9jb25mKSk7CisJcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKKwljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7CisKKwkvKiBDb25maWd1cmUgUG9ydCBCIGZvciBUUFMyMjA1IFBDLUNhcmQgUG93ZXItSW50ZXJmYWNlIFN3aXRjaCAqLworCWNmZ19wb3J0X0IgKCk7CisKKwkvKgorCSogQ29uZmlndXJlIFNJVU1DUiB0byBlbmFibGUgUENNQ0lBIHBvcnQgQgorCSogKFZGTFNbMDoxXSBhcmUgbm90IHVzZWQgZm9yIGRlYnVnZ2luZywgd2UgY29ubmVjdCBGUlojIGluc3RlYWQpCisJKi8KKwlzeXNwLT5zY19zaXVtY3IgJj0gflNJVU1DUl9EQkdDMTE7CS8qIHNldCBEQkdDIHRvIDAwICovCisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soX3Nsb3RfKTsKKwlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0soX3Nsb3RfKTsKKworCS8qCisJKiBEaXNhYmxlIGludGVycnVwdHMsIERNQSwgYW5kIFBDTUNJQSBidWZmZXJzCisJKiAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKSBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAorCSovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSAwOworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7CisJdWRlbGF5KDUwMCk7CisKKwkvKgorCSogTWFrZSBzdXJlIHRoZXJlIGlzIGEgY2FyZCBpbiB0aGUgc2xvdCwgdGhlbiBjb25maWd1cmUgdGhlIGludGVyZmFjZS4KKwkqLworCXVkZWxheSgxMDAwMCk7CisJZGVidWcgKCJbJWRdICVzOiBQSVBSKCVwKT0weCV4XG4iLAorCSAgICAgICBfX0xJTkVfXyxfX0ZVTkNUSU9OX18sCisJICAgICAgICYocGNtcC0+cGNtY19waXByKSxwY21wLT5wY21jX3BpcHIpOworCWlmIChwY21wLT5wY21jX3BpcHIgJiAoMHgxODAwMDAwMCA+PiAoc2xvdCA8PCA0KSkpIHsKKwkJcHJpbnRmICgiICAgTm8gQ2FyZCBmb3VuZFxuIik7CisJCXJldHVybiAoMSk7CisJfQorCisJLyoKKwkqIFBvd2VyIE9uOiBTZXQgVkFWQ0MgdG8gMy4zViBvciA1Viwgc2V0IFZBVlBQIHRvIEhpLVoKKwkqLworCW1hc2sgPSBQQ01DSUFfVlMxKHNsb3QpIHwgUENNQ0lBX1ZTMihzbG90KTsKKwlwaXByID0gcGNtcC0+cGNtY19waXByOworCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwKKwkgICAgICAgcGlwciwKKwkgICAgICAgKHJlZyZQQ01DSUFfVlMxKHNsb3QpKT8ibiI6ImZmIiwKKwkgICAgICAgKHJlZyZQQ01DSUFfVlMyKHNsb3QpKT8ibiI6ImZmIik7CisKKwlyZWcgID0gY3AtPmNwX3BiZGF0OworCWlmICgocGlwciAmIG1hc2spID09IG1hc2spIHsKKwkJcmVnIHw9IChUUFMyMjA1X1ZQUF9QR00gfCBUUFMyMjA1X1ZQUF9WQ0MgfAkvKiBWQVZQUCA9PiBIaS1aICovCisJCQkJVFBTMjIwNV9WQ0MzKTsJCQkJLyogM1Ygb2ZmCSovCisJCXJlZyAmPSB+KFRQUzIyMDVfVkNDNSk7CQkJCS8qIDVWIG9uCSovCisJCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiAiKTsKKwl9IGVsc2UgeworCQlyZWcgfD0gKFRQUzIyMDVfVlBQX1BHTSB8IFRQUzIyMDVfVlBQX1ZDQyB8CS8qIFZBVlBQID0+IEhpLVogKi8KKwkJCQlUUFMyMjA1X1ZDQzUpOwkJCQkvKiA1ViBvZmYJKi8KKwkJcmVnICY9IH4oVFBTMjIwNV9WQ0MzKTsJCQkJLyogM1Ygb24JKi8KKwkJcHV0cyAoIiAzLjNWIGNhcmQgZm91bmQ6ICIpOworCX0KKworCWRlYnVnICgiXG5QQiBEQVQ6ICUwOHggLT4gMy4zViAlcyA1LjBWICVzIFZQUF9QR00gJXMgVlBQX1ZDQyAlc1xuIiwKKwkgICAgICAgcmVnLAorCSAgICAgICAocmVnICYgVFBTMjIwNV9WQ0MzKSAgICA/ICJvZmYiIDogIm9uIiwKKwkgICAgICAgKHJlZyAmIFRQUzIyMDVfVkNDNSkgICAgPyAib2ZmIiA6ICJvbiIsCisJICAgICAgIChyZWcgJiBUUFMyMjA1X1ZQUF9QR00pID8gIm9mZiIgOiAib24iLAorCSAgICAgICAocmVnICYgVFBTMjIwNV9WUFBfVkNDKSA/ICJvZmYiIDogIm9uIiApOworCisJY3AtPmNwX3BiZGF0ID0gcmVnOworCisJLyogIFdhaXQgNTAwIG1zOyB1c2UgdGhpcyB0byBjaGVjayBmb3Igb3Zlci1jdXJyZW50ICovCisJZm9yIChpPTA7IGk8NTAwMDsgKytpKSB7CisJCWlmICgoY3AtPmNwX3BiZGF0ICYgVFBTMjIwNV9PQykgPT0gMCkgeworCQkJcHJpbnRmICgiICAgKioqIE92ZXJjdXJyZW50IC0gU2FmZXR5IHNodXRkb3duICoqKlxuIik7CisJCQljcC0+Y3BfcGJkYXQgJj0gfihUUFMyMjA1X1NIRE4pOworCQkJcmV0dXJuICgxKTsKKwkJfQorCQl1ZGVsYXkgKDEwMCk7CisJfQorCisJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCisJdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCisKKwlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOworCisJcmV0dXJuICgwKTsKK30KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdV9sb25nIHJlZzsKKworCWRlYnVnICgiaGFyZHdhcmVfZGlzYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOworCisJaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKKwlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCisJLyogU2h1dCBkb3duICovCisJY3AtPmNwX3BiZGF0ICY9IH4oVFBTMjIwNV9TSEROKTsKKworCS8qIENvbmZpZ3VyZSBQQ01DSUEgR2VuZXJhbCBDb250cm9sIFJlZ2lzdGVyICovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSAwOworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7CisKKwl1ZGVsYXkoMTAwMDApOworCisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLworCisKK2ludCBwY21jaWFfdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCit7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7CisJdm9sYXRpbGUgY3BtOHh4X3QJKmNwOworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKKwl1X2xvbmcgcmVnOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIgorCQkJUENNQ0lBX0JPQVJEX01TRworCQkJIiBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKKwknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKKworCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7CisJcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKKwkvKgorCSogRGlzYWJsZSBQQ01DSUEgYnVmZmVycyAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKQorCSogYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKKwkqLworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgID0gUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKKwl1ZGVsYXkoNTAwKTsKKworCS8qCisJKiBDb25maWd1cmUgUG9ydCBDIHBpbnMgZm9yCisJKiA1IFZvbHRzIEVuYWJsZSBhbmQgMyBWb2x0cyBlbmFibGUsCisJKiBUdXJuIGFsbCBwb3dlciBwaW5zIHRvIEhpLVoKKwkqLworCWRlYnVnICgiUENNQ0lBIHBvd2VyIE9GRlxuIik7CisJY2ZnX3BvcnRfQiAoKTsJLyogRW5hYmxlcyBzd2l0Y2gsIGJ1dCBhbGwgaW4gSGktWiAqLworCisJcmVnICA9IGNwLT5jcF9wYmRhdDsKKworCXN3aXRjaCh2Y2MpIHsKKwkJY2FzZSAgMDogCQkJYnJlYWs7CS8qIFN3aXRjaCBvZmYJCSovCisJCWNhc2UgMzM6IHJlZyAmPSB+VFBTMjIwNV9WQ0MzOwlicmVhazsJLyogU3dpdGNoIG9uIDMuM1YJKi8KKwkJY2FzZSA1MDogcmVnICY9IH5UUFMyMjA1X1ZDQzU7CWJyZWFrOwkvKiBTd2l0Y2ggb24gNS4wVgkqLworCQlkZWZhdWx0OiAJCQlnb3RvIGRvbmU7CisJfQorCisJLyogQ2hlY2tpbmcgc3VwcG9ydGVkIHZvbHRhZ2VzICovCisKKwlkZWJ1ZyAoIlBJUFI6IDB4JXggLS0+ICVzXG4iLAorCSAgICAgICBwY21wLT5wY21jX3BpcHIsCisJICAgICAgIChwY21wLT5wY21jX3BpcHIgJiAweDAwMDA4MDAwKSA/ICJvbmx5IDUgViIgOiAiY2FuIGRvIDMuM1YiKTsKKworCWNwLT5jcF9wYmRhdCA9IHJlZzsKKworI2lmZGVmIERFQlVHCit7CisJY2hhciAqczsKKworCWlmICgocmVnICYgVFBTMjIwNV9WQ0MzKSA9PSAwKSB7CisJCXMgPSAiYXQgMy4zViI7CisJfSBlbHNlIGlmICgocmVnICYgVFBTMjIwNV9WQ0M1KSA9PSAwKSB7CisJCXMgPSAiYXQgNS4wViI7CisJfSBlbHNlIHsKKwkJcyA9ICJkb3duIjsKKwl9CisJcHJpbnRmICgiUENNQ0lBIHBvd2VyZWQgJXNcbiIsIHMpOworfQorI2VuZGlmCisKK2RvbmU6CisJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCXVkZWxheSg1MDApOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlYywgRE9ORVxuIiwKKwkgICAgICAgc2xvdCsnQScpOworCXJldHVybiAoMCk7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfUENNQ0lBICovCmRpZmYgLS1naXQgYS9ib2FyZC9pZHM4MjQ3L01ha2VmaWxlIGIvYm9hcmQvaWRzODI0Ny9NYWtlZmlsZQppbmRleCBjZmVmNzUwLi5kNDIzNzkzIDEwMDY0NAotLS0gYS9ib2FyZC9pZHM4MjQ3L01ha2VmaWxlCisrKyBiL2JvYXJkL2lkczgyNDcvTWFrZWZpbGUKQEAgLTEsNCArMSw3IEBACiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIwogIyAoQykgQ29weXJpZ2h0IDIwMDUKICMgSGVpa28gU2Nob2NoZXIsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxoc0BkZW54LmRlPgogIwpAQCAtMjMsMTggKzI2LDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9pbXBhNy9NYWtlZmlsZSBiL2JvYXJkL2ltcGE3L01ha2VmaWxlCmluZGV4IDA4NTQzZjkuLmQ3N2RiNzIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ltcGE3L01ha2VmaWxlCisrKyBiL2JvYXJkL2ltcGE3L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEyICsyMywxNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGltcGE3Lm8gZmxhc2gubworQ09CSlMJOj0gaW1wYTcubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9pbmNhaXAvTWFrZWZpbGUgYi9ib2FyZC9pbmNhaXAvTWFrZWZpbGUKaW5kZXggZDliMGUyZC4uMTM5ODZiOCAxMDA2NDQKLS0tIGEvYm9hcmQvaW5jYWlwL01ha2VmaWxlCisrKyBiL2JvYXJkL2luY2FpcC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOSArMjMsMjMgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIFNPQkpTCT0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9pbmthNHgwL01ha2VmaWxlIGIvYm9hcmQvaW5rYTR4MC9NYWtlZmlsZQppbmRleCBiZjgzMjkyLi5kMDBlMDVkIDEwMDY0NAotLS0gYS9ib2FyZC9pbmthNHgwL01ha2VmaWxlCisrKyBiL2JvYXJkL2lua2E0eDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2lubm9rb20vTWFrZWZpbGUgYi9ib2FyZC9pbm5va29tL01ha2VmaWxlCmluZGV4IDczZjZhNzQuLmY0Y2M2Y2YgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lubm9rb20vTWFrZWZpbGUKKysrIGIvYm9hcmQvaW5ub2tvbS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMiArMjMsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBpbm5va29tLm8gZmxhc2gubworQ09CSlMJOj0gaW5ub2tvbS5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2ludGVncmF0b3JhcC9NYWtlZmlsZSBiL2JvYXJkL2ludGVncmF0b3JhcC9NYWtlZmlsZQppbmRleCAzNThkZjYyLi41YjM3MjliIDEwMDY0NAotLS0gYS9ib2FyZC9pbnRlZ3JhdG9yYXAvTWFrZWZpbGUKKysrIGIvYm9hcmQvaW50ZWdyYXRvcmFwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyAoQykgQ29weXJpZ2h0IDIwMDQKQEAgLTI3LDEzICsyNywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGludGVncmF0b3JhcC5vIGZsYXNoLm8KK0NPQkpTCTo9IGludGVncmF0b3JhcC5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubyBtZW1zZXR1cC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtNDMsOSArNDcsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2ludGVncmF0b3JhcC9jb25maWcubWsgYi9ib2FyZC9pbnRlZ3JhdG9yYXAvY29uZmlnLm1rCmluZGV4IDI1Yjc5YjMuLmU0YzVjM2IgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ludGVncmF0b3JhcC9jb25maWcubWsKKysrIGIvYm9hcmQvaW50ZWdyYXRvcmFwL2NvbmZpZy5tawpAQCAtMywzICszLDkgQEAKICMKIAogVEVYVF9CQVNFID0gMHgwMTAwMDAwMAorCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorIyBXZSBhcmUgYnVpbGRpbmcgdS1ib290IGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LCB1c2UgZ2VuZXJhdGVkCisjIC5sZHMgc2NyaXB0IGZyb20gT0JKVFJFRSBkaXJlY3RvcnkuCitMRFNDUklQVCA6PSAkKE9CSlRSRUUpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5sZHMKK2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9pbnRlZ3JhdG9yYXAvc3BsaXRfYnlfdmFyaWFudC5zaCBiL2JvYXJkL2ludGVncmF0b3JhcC9zcGxpdF9ieV92YXJpYW50LnNoCmluZGV4IDlmNzFiYWIuLjUzYjBkMWUgMTAwNzU1Ci0tLSBhL2JvYXJkL2ludGVncmF0b3JhcC9zcGxpdF9ieV92YXJpYW50LnNoCisrKyBiL2JvYXJkL2ludGVncmF0b3JhcC9zcGxpdF9ieV92YXJpYW50LnNoCkBAIC0xMDMsMTQgKzEwMywxNyBAQAogCWVjaG8gLW4JIiN1bmRlZiBDT05GSUdfQ01fVENSQU0JIiAJCT4+IHRtcC5maWwKIAllY2hvCSIgLyogQ00gbWF5IG5vdCBoYXZlIFRDUkFNICovIiAJCT4+IHRtcC5maWwKIGZpCi1tdiB0bXAuZmlsIC4vaW5jbHVkZS9jb25maWcuaAorCitta2RpciAtcCAke29ian1pbmNsdWRlCitta2RpciAtcCAke29ian1ib2FyZC9pbnRlZ3JhdG9yYXAKK212IHRtcC5maWwgJHtvYmp9aW5jbHVkZS9jb25maWcuaAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMJRW5zdXJlIGNvcnJlY3QgY29yZSBvYmplY3QgbG9hZGVkIGZpcnN0IGluIFUtQm9vdCBpbWFnZQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNlZCAtciAncy9DUFVfRklMRS9jcHVcLyckY3B1J1wvc3RhcnQuby87IHMvIy4qLy8nIGJvYXJkL2ludGVncmF0b3JhcC91LWJvb3QubGRzLnRlbXBsYXRlID4gYm9hcmQvaW50ZWdyYXRvcmFwL3UtYm9vdC5sZHMKK3NlZCAtciAncy9DUFVfRklMRS9jcHVcLyckY3B1J1wvc3RhcnQuby87IHMvIy4qLy8nICR7c3JjfWJvYXJkL2ludGVncmF0b3JhcC91LWJvb3QubGRzLnRlbXBsYXRlID4gJHtvYmp9Ym9hcmQvaW50ZWdyYXRvcmFwL3UtYm9vdC5sZHMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENvbXBsZXRlIHRoZSBjb25maWd1cmF0aW9uCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLi9ta2NvbmZpZyAtYSBpbnRlZ3JhdG9yYXAgYXJtICRjcHUgaW50ZWdyYXRvcmFwOworJE1LQ09ORklHIC1hIGludGVncmF0b3JhcCBhcm0gJGNwdSBpbnRlZ3JhdG9yYXA7CiBlY2hvICJWYXJpYW50OjogJHZhcmlhbnQgd2l0aCBjb3JlICRjcHUiCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2ludGVncmF0b3JjcC9NYWtlZmlsZSBiL2JvYXJkL2ludGVncmF0b3JjcC9NYWtlZmlsZQppbmRleCAzZDU4OWZjLi5lZmFmZWI2IDEwMDY0NAotLS0gYS9ib2FyZC9pbnRlZ3JhdG9yY3AvTWFrZWZpbGUKKysrIGIvYm9hcmQvaW50ZWdyYXRvcmNwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTMgKzIzLDE3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gaW50ZWdyYXRvcmNwLm8gZmxhc2gubworQ09CSlMJOj0gaW50ZWdyYXRvcmNwLm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vIG1lbXNldHVwLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvaW50ZWdyYXRvcmNwL2NvbmZpZy5tayBiL2JvYXJkL2ludGVncmF0b3JjcC9jb25maWcubWsKaW5kZXggMjViNzliMy4uZTRjNWMzYiAxMDA2NDQKLS0tIGEvYm9hcmQvaW50ZWdyYXRvcmNwL2NvbmZpZy5taworKysgYi9ib2FyZC9pbnRlZ3JhdG9yY3AvY29uZmlnLm1rCkBAIC0zLDMgKzMsOSBAQAogIwogCiBURVhUX0JBU0UgPSAweDAxMDAwMDAwCisKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCisjIFdlIGFyZSBidWlsZGluZyB1LWJvb3QgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnksIHVzZSBnZW5lcmF0ZWQKKyMgLmxkcyBzY3JpcHQgZnJvbSBPQkpUUkVFIGRpcmVjdG9yeS4KK0xEU0NSSVBUIDo9ICQoT0JKVFJFRSkvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2ludGVncmF0b3JjcC9zcGxpdF9ieV92YXJpYW50LnNoIGIvYm9hcmQvaW50ZWdyYXRvcmNwL3NwbGl0X2J5X3ZhcmlhbnQuc2gKaW5kZXggM2EzNTQzMy4uMzdhZTUxNyAxMDA3NTUKLS0tIGEvYm9hcmQvaW50ZWdyYXRvcmNwL3NwbGl0X2J5X3ZhcmlhbnQuc2gKKysrIGIvYm9hcmQvaW50ZWdyYXRvcmNwL3NwbGl0X2J5X3ZhcmlhbnQuc2gKQEAgLTk4LDE0ICs5OCwxNyBAQAogCWVjaG8gLW4gIiN1bmRlZiBDT05GSUdfQ01fVENSQU0gICIgCQk+PiB0bXAuZmlsCiAJZWNobyAgICAiIC8qIENNIG1heSBub3QgaGF2ZSBUQ1JBTSAqLyIgCQk+PiB0bXAuZmlsCiBmaQotbXYgdG1wLmZpbCAuL2luY2x1ZGUvY29uZmlnLmgKKworbWtkaXIgLXAgJHtvYmp9aW5jbHVkZQorbWtkaXIgLXAgJHtvYmp9Ym9hcmQvaW50ZWdyYXRvcmNwCittdiB0bXAuZmlsICR7b2JqfWluY2x1ZGUvY29uZmlnLmgKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjICBFbnN1cmUgY29ycmVjdCBjb3JlIG9iamVjdCBsb2FkZWQgZmlyc3QgaW4gVS1Cb290IGltYWdlCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2VkIC1yICdzL0NQVV9GSUxFL2NwdVwvJyRjcHUnXC9zdGFydC5vLzsgcy8jLiovLycgYm9hcmQvaW50ZWdyYXRvcmNwL3UtYm9vdC5sZHMudGVtcGxhdGUgPiBib2FyZC9pbnRlZ3JhdG9yY3AvdS1ib290Lmxkcworc2VkIC1yICdzL0NQVV9GSUxFL2NwdVwvJyRjcHUnXC9zdGFydC5vLzsgcy8jLiovLycgJHtzcmN9Ym9hcmQvaW50ZWdyYXRvcmNwL3UtYm9vdC5sZHMudGVtcGxhdGUgPiAke29ian1ib2FyZC9pbnRlZ3JhdG9yY3AvdS1ib290LmxkcwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ29tcGxldGUgdGhlIGNvbmZpZ3VyYXRpb24KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0uL21rY29uZmlnIC1hIGludGVncmF0b3JjcCBhcm0gJGNwdSBpbnRlZ3JhdG9yY3A7CiskTUtDT05GSUcgLWEgaW50ZWdyYXRvcmNwIGFybSAkY3B1IGludGVncmF0b3JjcDsKIGVjaG8gIlZhcmlhbnQ6OiAkdmFyaWFudCB3aXRoIGNvcmUgJGNwdSIKIApkaWZmIC0tZ2l0IGEvYm9hcmQvaXA4NjAvTWFrZWZpbGUgYi9ib2FyZC9pcDg2MC9NYWtlZmlsZQppbmRleCAxM2NlOWZjLi5lM2QyNGIzIDEwMDY0NAotLS0gYS9ib2FyZC9pcDg2MC9NYWtlZmlsZQorKysgYi9ib2FyZC9pcDg2MC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2lwaGFzZTQ1MzkvTWFrZWZpbGUgYi9ib2FyZC9pcGhhc2U0NTM5L01ha2VmaWxlCmluZGV4IDE5ZGE1ZDAuLmVmZGIxYzEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lwaGFzZTQ1MzkvTWFrZWZpbGUKKysrIGIvYm9hcmQvaXBoYXNlNDUzOS9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCiAjIChDKSBDb3B5cmlnaHQgMjAwMiBXb2xmZ2FuZyBHcmFuZGVnZ2VyIDx3Z0BkZW54LmRlPgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTEgKzI1LDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM3LDkgKzQ0LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9pc3Bhbi9NYWtlZmlsZSBiL2JvYXJkL2lzcGFuL01ha2VmaWxlCmluZGV4IDkxMjNhODAuLjBjMWNiMDIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lzcGFuL01ha2VmaWxlCisrKyBiL2JvYXJkL2lzcGFuL01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMgCiAjIENvcHlyaWdodCAoQykgMjAwNCBBcmFiZWxsYSBTb2Z0d2FyZSBMdGQuCiAjIFl1bGkgQmFyY29oZW4gPHl1bGlAYXJhYmVsbGFzdy5jb20+CiAjCkBAIC0yMywxMSArMjYsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vCitDT0JKUwk6PSAkKEJPQVJEKS5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOCw5ICs0NSw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvaXZtL01ha2VmaWxlIGIvYm9hcmQvaXZtL01ha2VmaWxlCmluZGV4IDEzY2U5ZmMuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2l2bS9NYWtlZmlsZQorKysgYi9ib2FyZC9pdm0vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9peGRwNDI1L01ha2VmaWxlIGIvYm9hcmQvaXhkcDQyNS9NYWtlZmlsZQppbmRleCA1OWQ2OTY0Li45NTY4Y2I1IDEwMDY0NAotLS0gYS9ib2FyZC9peGRwNDI1L01ha2VmaWxlCisrKyBiL2JvYXJkL2l4ZHA0MjUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gaXhkcDQyNS5vCitDT0JKUwk6PSBpeGRwNDI1Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC0zOCw5ICs0Miw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvaXhkcDQyNS9jb25maWcubWsgYi9ib2FyZC9peGRwNDI1L2NvbmZpZy5tawppbmRleCAzNDIwNTg2Li5kNDljMGU3IDEwMDY0NAotLS0gYS9ib2FyZC9peGRwNDI1L2NvbmZpZy5taworKysgYi9ib2FyZC9peGRwNDI1L2NvbmZpZy5tawpAQCAtMSw0ICsxLDQgQEAKIFRFWFRfQkFTRSA9IDB4MDBmODAwMDAKIAogIyBpbmNsdWRlIE5QRSBldGhlcm5ldCBkcml2ZXIKLUJPQVJETElCUyA9IGNwdS9peHAvbnBlL2xpYm5wZS5hCitCT0FSRExJQlMgPSAkKG9iailjcHUvaXhwL25wZS9saWJucGUuYQpkaWZmIC0tZ2l0IGEvYm9hcmQvanNlL01ha2VmaWxlIGIvYm9hcmQvanNlL01ha2VmaWxlCmluZGV4IDBkYTI3YjYuLmJlNmJkMzEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2pzZS9NYWtlZmlsZQorKysgYi9ib2FyZC9qc2UvTWFrZWZpbGUKQEAgLTEsNCArMSw3IEBACiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIyAKICMgQ29weXJpZ2h0IDIwMDQgUGljdHVyZSBFbGVtZW50cywgSW5jLgogIyBTdGVwaGVuIFdpbGxpYW1zIDxzdGV2ZUBpY2FydXMuY29tPgogIwpAQCAtMjAsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIHNkcmFtLm8gZmxhc2gubyBob3N0X2JyaWRnZS5vCitDT0JKUwk9ICQoQk9BUkQpLm8gc2RyYW0ubyBmbGFzaC5vIGhvc3RfYnJpZGdlLm8KIFNPQkpTCT0gaW5pdC5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCkBAIC0zNiw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2tiOTIwMi9NYWtlZmlsZSBiL2JvYXJkL2tiOTIwMi9NYWtlZmlsZQppbmRleCBmMzZkODhkLi4yYWRjYjU4IDEwMDY0NAotLS0gYS9ib2FyZC9rYjkyMDIvTWFrZWZpbGUKKysrIGIvYm9hcmQva2I5MjAyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI2LDEyICsyNiwxNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGtiOTIwMi5vCitDT0JKUwk6PSBrYjkyMDIubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtNDEsOSArNDUsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2t1cC9NYWtlZmlsZSBiL2JvYXJkL2t1cC9NYWtlZmlsZQppbmRleCAwNzFmMGQyLi5lYWM3NWEzIDEwMDY0NAotLS0gYS9ib2FyZC9rdXAvTWFrZWZpbGUKKysrIGIvYm9hcmQva3VwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8ga3VwLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGt1cC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9rdXAvY29tbW9uL3BjbWNpYS5jIGIvYm9hcmQva3VwL2NvbW1vbi9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjYxYTBlCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQva3VwL2NvbW1vbi9wY21jaWEuYwpAQCAtMCwwICsxLDIyNSBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzh4eC5oPgorI2luY2x1ZGUgPHBjbWNpYS5oPgorCisjdW5kZWYJQ09ORklHX1BDTUNJQQorCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkgJiYgZGVmaW5lZChDT05GSUdfSURFXzh4eF9QQ0NBUkQpCisjZGVmaW5lCUNPTkZJR19QQ01DSUEKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1BDTUNJQQorCisjZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIktVUCIKKworI2RlZmluZSBLVVA0S19QQ01DSUFfQl8zVjMgKDB4MDAwMjAwMDApCisKK2ludCBwY21jaWFfaGFyZHdhcmVfZW5hYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdm9sYXRpbGUgc3lzY29uZjh4eF90CSpzeXNwOworCXVpbnQgcmVnLCBtYXNrOworCisJZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKKworCXVkZWxheSgxMDAwMCk7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJc3lzcCAgPSAoc3lzY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9zaXVfY29uZikpOworCXBjbXAgID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7CisJY3AgICAgPSAoY3BtOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX2NwbSkpOworCisJLyoKKwkqIENvbmZpZ3VyZSBTSVVNQ1IgdG8gZW5hYmxlIFBDTUNJQSBwb3J0IEIKKwkqIChWRkxTWzA6MV0gYXJlIG5vdCB1c2VkIGZvciBkZWJ1Z2dpbmcsIHdlIGNvbm5lY3QgRlJaIyBpbnN0ZWFkKQorCSovCisJc3lzcC0+c2Nfc2l1bWNyICY9IH5TSVVNQ1JfREJHQzExOwkvKiBzZXQgREJHQyB0byAwMCAqLworCisJLyogY2xlYXIgaW50ZXJydXB0IHN0YXRlLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJcGNtcC0+cGNtY19wc2NyID0gIFBDTUNJQV9NQVNLKHNsb3QpOworCXBjbXAtPnBjbWNfcGVyICY9IH5QQ01DSUFfTUFTSyhzbG90KTsKKworCS8qCisJKiBEaXNhYmxlIGludGVycnVwdHMsIERNQSwgYW5kIFBDTUNJQSBidWZmZXJzCisJKiAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKSBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAorCSovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSAwOworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOworCXVkZWxheSgyNTAwKTsKKworCS8qCisJKiBDb25maWd1cmUgUG9ydCBCIHBpbnMgZm9yCisJKiAzIFZvbHRzIGVuYWJsZQorCSovCisJaWYgKHNsb3QpIHsgLyogU2xvdCBBIGlzIGJ1aWx0LWluICovCisJCWNwLT5jcF9wYmRpciB8PSAgS1VQNEtfUENNQ0lBX0JfM1YzOworCQljcC0+Y3BfcGJwYXIgJj0gfktVUDRLX1BDTUNJQV9CXzNWMzsKKwkJLyogcmVtb3ZlIGFsbCBwb3dlciAqLworCQljcC0+Y3BfcGJkYXQgfD0gIEtVUDRLX1BDTUNJQV9CXzNWMzsgLyogYWN0aXZlIGxvdyAqLworCX0KKwkvKgorCSogTWFrZSBzdXJlIHRoZXJlIGlzIGEgY2FyZCBpbiB0aGUgc2xvdCwgdGhlbiBjb25maWd1cmUgdGhlIGludGVyZmFjZS4KKwkqLworCXVkZWxheSgxMDAwMCk7CisJZGVidWcgKCJbJWRdICVzOiBQSVBSKCVwKT0weCV4XG4iLAorCSAgICAgICBfX0xJTkVfXyxfX0ZVTkNUSU9OX18sCisJICAgICAgICYocGNtcC0+cGNtY19waXByKSxwY21wLT5wY21jX3BpcHIpOworCWlmIChwY21wLT5wY21jX3BpcHIgJiAoMHgxODAwMDAwMCA+PiAoc2xvdCA8PCA0KSkpIHsKKwkJcHJpbnRmICgiICAgTm8gQ2FyZCBmb3VuZFxuIik7CisJCXJldHVybiAoMSk7CisJfQorCisJLyoKKwkqIFBvd2VyIE9uLgorCSovCisJcHJpbnRmKCIlcyAgU2xvdCAlYzoiLCBzbG90ID8gIiIgOiAiXG4iLCAnQScgKyBzbG90KTsKKwltYXNrID0gUENNQ0lBX1ZTMShzbG90KSB8IFBDTUNJQV9WUzIoc2xvdCk7CisJcmVnICA9IHBjbXAtPnBjbWNfcGlwcjsKKwlkZWJ1ZyAoIlBJUFI6IDB4JXggPT0+IFZTMT1vJXMsIFZTMj1vJXNcbiIsCisJICAgICAgIHJlZywKKwkgICAgICAgKHJlZyZQQ01DSUFfVlMxKHNsb3QpKT8ibiI6ImZmIiwKKwkgICAgICAgKHJlZyZQQ01DSUFfVlMyKHNsb3QpKT8ibiI6ImZmIik7CisJaWYgKChyZWcgJiBtYXNrKSA9PSBtYXNrKSB7CisJCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiBOT1QgU1VQUE9SVEVEICEhIVxuIik7CisJfSBlbHNlIHsKKwkJaWYoc2xvdCkKKwkJCWNwLT5jcF9wYmRhdCAmPSB+S1VQNEtfUENNQ0lBX0JfM1YzOworCQlwdXRzICgiIDMuM1YgY2FyZCBmb3VuZDogIik7CisJfQorI2lmIDAKKwkvKiAgVkNDIHN3aXRjaCBlcnJvciBmbGFnLCBQQ01DSUEgc2xvdCBJTlBBQ0tfIHBpbiAqLworCWNwLT5jcF9wYmRpciAmPSB+KDB4MDAyMCB8IDB4MDAxMCk7CisJY3AtPmNwX3BicGFyICY9IH4oMHgwMDIwIHwgMHgwMDEwKTsKKwl1ZGVsYXkoNTAwMDAwKTsKKyNlbmRpZgorCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKKwlyZWcgID0gIFBDTUNJQV9QR0NSWChzbG90KTsKKwlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOworCisJdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCisKKwlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOworCisJcmV0dXJuICgwKTsKK30KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdV9sb25nIHJlZzsKKworCWRlYnVnICgiaGFyZHdhcmVfZGlzYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOworCisJaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXBjbXAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKKwljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7CisKKwkvKiByZW1vdmUgYWxsIHBvd2VyICovCisJaWYgKHNsb3QpCisJCWNwLT5jcF9wYmRhdCB8PSBLVVA0S19QQ01DSUFfQl8zVjM7CisKKwkvKiBDb25maWd1cmUgUENNQ0lBIEdlbmVyYWwgQ29udHJvbCBSZWdpc3RlciAqLworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgID0gMDsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKKworCXVkZWxheSgxMDAwMCk7CisKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCS8qIENGR19DTURfUENNQ0lBICovCisKKworaW50IHBjbWNpYV92b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKKwl2b2xhdGlsZSBjcG04eHhfdAkqY3A7CisJdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOworCXVfbG9uZyByZWc7CisKKwlkZWJ1ZyAoInZvbHRhZ2Vfc2V0OiAiCVwKKwkJCVBDTUNJQV9CT0FSRF9NU0cJXAorCQkJIiBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKKwknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKKworCWlmICghc2xvdCkgLyogU2xvdCBBIGlzIG5vdCBjb25maWd1cmFibGUgKi8KKwkJcmV0dXJuIDA7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJcGNtcCA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKKworCS8qCisJKiBEaXNhYmxlIFBDTUNJQSBidWZmZXJzIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpCisJKiBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAorCSovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSBQQ01DSUFfUEdDUlgoc2xvdCk7CisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoc2xvdCkgPSByZWc7CisJdWRlbGF5KDUwMCk7CisKKwlkZWJ1ZyAoIlBDTUNJQSBwb3dlciBPRkZcbiIpOworCS8qCisJKiBDb25maWd1cmUgUG9ydCBCIHBpbnMgZm9yCisJKiAzIFZvbHRzIGVuYWJsZQorCSovCisJY3AtPmNwX3BiZGlyIHw9ICBLVVA0S19QQ01DSUFfQl8zVjM7CisJY3AtPmNwX3BicGFyICY9IH5LVVA0S19QQ01DSUFfQl8zVjM7CisJLyogcmVtb3ZlIGFsbCBwb3dlciAqLworCWNwLT5jcF9wYmRhdCB8PSAgS1VQNEtfUENNQ0lBX0JfM1YzOyAvKiBhY3RpdmUgbG93ICovCisKKwlzd2l0Y2godmNjKSB7CisJCWNhc2UgIDA6IAkJYnJlYWs7CisJCWNhc2UgMzM6CisJCQljcC0+Y3BfcGJkYXQgJj0gfktVUDRLX1BDTUNJQV9CXzNWMzsKKwkJCWRlYnVnICgiUENNQ0lBIHBvd2VyZWQgYXQgMy4zVlxuIik7CisJCQlicmVhazsKKwkJY2FzZSA1MDoKKwkJCWRlYnVnICgiUENNQ0lBOiA1Vm9sdCB2Y2Mgbm90IHN1cHBvcnRlZFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXB1dHMoIlBDTUNJQTogdmNjIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCWJyZWFrOworCX0KKwl1ZGVsYXkoMTAwMDApOworCS8qIENoZWNraW5nIHN1cHBvcnRlZCB2b2x0YWdlcyAqLworCisJZGVidWcgKCJQSVBSOiAweCV4IC0tPiAlc1xuIiwKKwkgICAgICAgcGNtcC0+cGNtY19waXByLAorCSAgICAgICAocGNtcC0+cGNtY19waXByICYgKDB4ODAwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKQorCQkJICAgICAgID8gIm9ubHkgNSBWIC0tPiBOT1QgU1VQUE9SVEVEIgorCTogImNhbiBkbyAzLjNWIik7CisKKworCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKKwlyZWcgID0gIFBDTUNJQV9QR0NSWChzbG90KTsKKwlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOworCXVkZWxheSg1MDApOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlYywgRE9ORVxuIiwKKwkgICAgICAgc2xvdCsnQScpOworCXJldHVybiAoMCk7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfUENNQ0lBICovCmRpZmYgLS1naXQgYS9ib2FyZC9rdXAva3VwNGsvTWFrZWZpbGUgYi9ib2FyZC9rdXAva3VwNGsvTWFrZWZpbGUKaW5kZXggNjJkMjg5Yi4uNDA5ZTRjZCAxMDA2NDQKLS0tIGEvYm9hcmQva3VwL2t1cDRrL01ha2VmaWxlCisrKyBiL2JvYXJkL2t1cC9rdXA0ay9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDE5ICsyMiwyNiBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL2t1cC5vIC4uL2NvbW1vbi9sb2FkX3Nlcm51bV9ldGhhZGRyLm8KK0NPQkpTCT0gJChCT0FSRCkubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24va3VwLm8gLi4vY29tbW9uL2xvYWRfc2VybnVtX2V0aGFkZHIubyAuLi9jb21tb24vcGNtY2lhLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2t1cC9rdXA0eC9NYWtlZmlsZSBiL2JvYXJkL2t1cC9rdXA0eC9NYWtlZmlsZQppbmRleCA2MmQyODliLi40MDllNGNkIDEwMDY0NAotLS0gYS9ib2FyZC9rdXAva3VwNHgvTWFrZWZpbGUKKysrIGIvYm9hcmQva3VwL2t1cDR4L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTkgKzIyLDI2IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24va3VwLm8gLi4vY29tbW9uL2xvYWRfc2VybnVtX2V0aGFkZHIubworQ09CSlMJPSAkKEJPQVJEKS5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9rdXAubyAuLi9jb21tb24vbG9hZF9zZXJudW1fZXRoYWRkci5vIC4uL2NvbW1vbi9wY21jaWEubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbGFudGVjL01ha2VmaWxlIGIvYm9hcmQvbGFudGVjL01ha2VmaWxlCmluZGV4IDdhMjAxNGQuLjFiNTdkMmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xhbnRlYy9NYWtlZmlsZQorKysgYi9ib2FyZC9sYW50ZWMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9sYXJ0L01ha2VmaWxlIGIvYm9hcmQvbGFydC9NYWtlZmlsZQppbmRleCA1NTBhYTFkLi43MDI0YzJiIDEwMDY0NAotLS0gYS9ib2FyZC9sYXJ0L01ha2VmaWxlCisrKyBiL2JvYXJkL2xhcnQvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gbGFydC5vIGZsYXNoLm8KK0NPQkpTCTo9IGxhcnQubyBmbGFzaC5vCiBTT0JKUwk6PSBmbGFzaGFzbS5vIGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2xvZ29kbC9NYWtlZmlsZSBiL2JvYXJkL2xvZ29kbC9NYWtlZmlsZQppbmRleCBjN2NkZTdkLi5mZmYzYTUxIDEwMDY0NAotLS0gYS9ib2FyZC9sb2dvZGwvTWFrZWZpbGUKKysrIGIvYm9hcmQvbG9nb2RsL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEzICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGxvZ29kbC5vIGZsYXNoLm8KK0NPQkpTCTo9IGxvZ29kbC5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9scGQ3YTQweC9NYWtlZmlsZSBiL2JvYXJkL2xwZDdhNDB4L01ha2VmaWxlCmluZGV4IGViZTE0ZGYuLjY5MmYyZDUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xwZDdhNDB4L01ha2VmaWxlCisrKyBiL2JvYXJkL2xwZDdhNDB4L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEyICsyMywxNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IGxwZDdhNDB4Lm8gZmxhc2gubworQ09CSlMJOj0gbHBkN2E0MHgubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9sdWJib2NrL01ha2VmaWxlIGIvYm9hcmQvbHViYm9jay9NYWtlZmlsZQppbmRleCAxMDY2MjJjLi5mNTYyNjQyIDEwMDY0NAotLS0gYS9ib2FyZC9sdWJib2NrL01ha2VmaWxlCisrKyBiL2JvYXJkL2x1YmJvY2svTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNCwxMiArMjQsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBsdWJib2NrLm8gZmxhc2gubworQ09CSlMJOj0gbHViYm9jay5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtNDAsOSArNDQsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2x3bW9uL01ha2VmaWxlIGIvYm9hcmQvbHdtb24vTWFrZWZpbGUKaW5kZXggN2EyMDE0ZC4uNjJkYjJmNCAxMDA2NDQKLS0tIGEvYm9hcmQvbHdtb24vTWFrZWZpbGUKKysrIGIvYm9hcmQvbHdtb24vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIHBjbWNpYS5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9sd21vbi9wY21jaWEuYyBiL2JvYXJkL2x3bW9uL3BjbWNpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDkyODYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9sd21vbi9wY21jaWEuYwpAQCAtMCwwICsxLDI0MCBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzh4eC5oPgorI2luY2x1ZGUgPHBjbWNpYS5oPgorI2luY2x1ZGUgPGkyYy5oPgorCisjdW5kZWYJQ09ORklHX1BDTUNJQQorCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkgJiYgZGVmaW5lZChDT05GSUdfSURFXzh4eF9QQ0NBUkQpCisjZGVmaW5lCUNPTkZJR19QQ01DSUEKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1BDTUNJQQorCisjZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIkxXTU9OIgorCisvKiAjZGVmaW5lJ3MgZm9yIE1BWDE2MDQgUG93ZXIgU3dpdGNoICovCisjZGVmaW5lIE1BWDE2MDRfT1BfU1VTCQkweDgwCisjZGVmaW5lIE1BWDE2MDRfVkNDQk9OCQkweDQwCisjZGVmaW5lIE1BWDE2MDRfVkNDXzM1CQkweDIwCisjZGVmaW5lIE1BWDE2MDRfVkNDQkhJWgkJMHgxMAorI2RlZmluZSBNQVgxNjA0X1ZQUEJPTgkJMHgwOAorI2RlZmluZSBNQVgxNjA0X1ZQUEJQQlBHTQkweDA0CisjZGVmaW5lIE1BWDE2MDRfVlBQQkhJWgkJMHgwMgorLyogcmVzZXJ2ZWQJCQkweDAxCSovCisKK2ludCBwY21jaWFfaGFyZHdhcmVfZW5hYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdm9sYXRpbGUgc3lzY29uZjh4eF90CSpzeXNwOworCXVpbnQgcmVnLCBtYXNrOworCXVjaGFyIHZhbDsKKworCisJZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKKworCS8qIFN3aXRjaCBvbiBQQ01DSUEgcG9ydCBpbiBQSUMgcmVnaXN0ZXIgMHg2MCAqLworCXJlZyA9IHBpY19yZWFkICAoMHg2MCk7CisJZGVidWcgKCJbJWRdIFBJQyByZWFkOiByZWdfNjAgPSAweCUwMnhcbiIsIF9fTElORV9fLCByZWcpOworCXJlZyAmPSB+MHgxMDsKKwkvKiByZWcgfD0gMHgwODsgVnBwIG5vdCBuZWVkZWQgKi8KKwlwaWNfd3JpdGUgKDB4NjAsIHJlZyk7CisjaWZkZWYgREVCVUcKKwlyZWcgPSBwaWNfcmVhZCAgKDB4NjApOworCXByaW50ZiAoIlslZF0gUElDIHJlYWQ6IHJlZ182MCA9IDB4JTAyeFxuIiwgX19MSU5FX18sIHJlZyk7CisjZW5kaWYKKwl1ZGVsYXkoMTAwMDApOworCisJaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXN5c3AgID0gKHN5c2NvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fc2l1X2NvbmYpKTsKKwlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKKworCS8qCisJICogQ29uZmlndXJlIFNJVU1DUiB0byBlbmFibGUgUENNQ0lBIHBvcnQgQgorCSAqIChWRkxTWzA6MV0gYXJlIG5vdCB1c2VkIGZvciBkZWJ1Z2dpbmcsIHdlIGNvbm5lY3QgRlJaIyBpbnN0ZWFkKQorCSAqLworCXN5c3AtPnNjX3NpdW1jciAmPSB+U0lVTUNSX0RCR0MxMTsJLyogc2V0IERCR0MgdG8gMDAgKi8KKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0ZSwgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLworCXBjbXAtPnBjbWNfcHNjciA9ICBQQ01DSUFfTUFTSyhfc2xvdF8pOworCXBjbXAtPnBjbWNfcGVyICY9IH5QQ01DSUFfTUFTSyhfc2xvdF8pOworCisJLyoKKwkgKiBEaXNhYmxlIGludGVycnVwdHMsIERNQSwgYW5kIFBDTUNJQSBidWZmZXJzCisJICogKGlzb2xhdGUgdGhlIGludGVyZmFjZSkgYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKKwkgKi8KKwlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7CisJcmVnICA9IDA7CisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKKwl1ZGVsYXkoNTAwKTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZXJlIGlzIGEgY2FyZCBpbiB0aGUgc2xvdCwgdGhlbiBjb25maWd1cmUgdGhlIGludGVyZmFjZS4KKwkgKi8KKwl1ZGVsYXkoMTAwMDApOworCWRlYnVnICgiWyVkXSAlczogUElQUiglcCk9MHgleFxuIiwKKwkJX19MSU5FX18sX19GVU5DVElPTl9fLAorCQkmKHBjbXAtPnBjbWNfcGlwcikscGNtcC0+cGNtY19waXByKTsKKwlpZiAocGNtcC0+cGNtY19waXByICYgKDB4MTgwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKSB7CisJCXByaW50ZiAoIiAgIE5vIENhcmQgZm91bmRcbiIpOworCQlyZXR1cm4gKDEpOworCX0KKworCS8qCisJICogUG93ZXIgT24uCisJICovCisJbWFzayA9IFBDTUNJQV9WUzEoc2xvdCkgfCBQQ01DSUFfVlMyKHNsb3QpOworCXJlZyAgPSBwY21wLT5wY21jX3BpcHI7CisJZGVidWcgKCJQSVBSOiAweCV4ID09PiBWUzE9byVzLCBWUzI9byVzXG4iLAorCQlyZWcsCisJCShyZWcmUENNQ0lBX1ZTMShzbG90KSk/Im4iOiJmZiIsCisJCShyZWcmUENNQ0lBX1ZTMihzbG90KSk/Im4iOiJmZiIpOworCWlmICgocmVnICYgbWFzaykgPT0gbWFzaykgeworCQl2YWwgPSAwOwkJLyogVkNDQjMvNSA9IDAgPT0+IHVzZSBWeCA9IDUuMCBWICovCisJCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiAiKTsKKwl9IGVsc2UgeworCQl2YWwgPSBNQVgxNjA0X1ZDQ18zNTsJLyogVkNDQjMvNSA9IDEgPT0+IHVzZSBWeSA9IDMuMyBWICovCisJCXB1dHMgKCIgMy4zViBjYXJkIGZvdW5kOiAiKTsKKwl9CisKKwkvKiAgc3dpdGNoIFZDQyBvbiAqLworCXZhbCB8PSBNQVgxNjA0X09QX1NVUyB8IE1BWDE2MDRfVkNDQk9OOworCWkyY19pbml0ICAoQ0ZHX0kyQ19TUEVFRCwgQ0ZHX0kyQ19TTEFWRSk7CisJaTJjX3dyaXRlIChDRkdfSTJDX1BPV0VSX0FfQUREUiwgMCwgMCwgJnZhbCwgMSk7CisKKwl1ZGVsYXkoNTAwMDAwKTsKKworCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKKwlyZWcgID0gIFBDTUNJQV9QR0NSWChfc2xvdF8pOworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKKworCXVkZWxheSgyNTAwMDApOwkvKiBzb21lIGNhcmRzIG5lZWQgPjE1MCBtcyB0byBjb21lIHVwIDotKCAqLworCisJZGVidWcgKCIjIGhhcmR3YXJlX2VuYWJsZSBkb25lXG4iKTsKKworCXJldHVybiAoMCk7Cit9CisKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKK2ludCBwY21jaWFfaGFyZHdhcmVfZGlzYWJsZShpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdV9sb25nIHJlZzsKKwl1Y2hhciB2YWw7CisKKwlkZWJ1ZyAoImhhcmR3YXJlX2Rpc2FibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKKworCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlwY21wID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7CisKKwkvKiByZW1vdmUgYWxsIHBvd2VyLCBwdXQgb3V0cHV0IGluIGhpZ2ggaW1wZWRhbmNlIHN0YXRlICovCisJdmFsICA9IE1BWDE2MDRfVkNDQkhJWiB8IE1BWDE2MDRfVlBQQkhJWjsKKwlpMmNfaW5pdCAgKENGR19JMkNfU1BFRUQsIENGR19JMkNfU0xBVkUpOworCWkyY193cml0ZSAoQ0ZHX0kyQ19QT1dFUl9BX0FERFIsIDAsIDAsICZ2YWwsIDEpOworCisJLyogQ29uZmlndXJlIFBDTUNJQSBHZW5lcmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7CisJcmVnICA9IDA7CisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKKworCS8qIFN3aXRjaCBvZmYgUENNQ0lBIHBvcnQgaW4gUElDIHJlZ2lzdGVyIDB4NjAgKi8KKwlyZWcgPSBwaWNfcmVhZCAgKDB4NjApOworCWRlYnVnICgiWyVkXSBQSUMgcmVhZDogcmVnXzYwID0gMHglMDJ4XG4iLCBfX0xJTkVfXywgcmVnKTsKKwlyZWcgfD0gIDB4MTA7CisJcmVnICY9IH4weDA4OworCXBpY193cml0ZSAoMHg2MCwgcmVnKTsKKyNpZmRlZiBERUJVRworCXJlZyA9IHBpY19yZWFkICAoMHg2MCk7CisJcHJpbnRmICgiWyVkXSBQSUMgcmVhZDogcmVnXzYwID0gMHglMDJ4XG4iLCBfX0xJTkVfXywgcmVnKTsKKyNlbmRpZgorCXVkZWxheSgxMDAwMCk7CisKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCS8qIENGR19DTURfUENNQ0lBICovCisKKworaW50IHBjbWNpYV92b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdV9sb25nIHJlZzsKKwl1Y2hhciB2YWw7CisKKwlkZWJ1ZyAoInZvbHRhZ2Vfc2V0OiAiCisJCVBDTUNJQV9CT0FSRF9NU0cKKwkJIiBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKKwkJJ0EnK3Nsb3QsIHZjYy8xMCwgdmNjJTEwLCB2cHAvMTAsIHZjYyUxMCk7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJcGNtcCA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCS8qCisJICogRGlzYWJsZSBQQ01DSUEgYnVmZmVycyAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKQorCSAqIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCisJICovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCXVkZWxheSg1MDApOworCisJLyoKKwkgKiBUdXJuIG9mZiBhbGwgcG93ZXIgKHN3aXRjaCB0byBoaWdoIGltcGVkYW5jZSkKKwkgKi8KKwlkZWJ1ZyAoIlBDTUNJQSBwb3dlciBPRkZcbiIpOworCXZhbCAgPSBNQVgxNjA0X1ZDQ0JISVogfCBNQVgxNjA0X1ZQUEJISVo7CisJaTJjX2luaXQgIChDRkdfSTJDX1NQRUVELCBDRkdfSTJDX1NMQVZFKTsKKwlpMmNfd3JpdGUgKENGR19JMkNfUE9XRVJfQV9BRERSLCAwLCAwLCAmdmFsLCAxKTsKKworCXZhbCA9IDA7CisJc3dpdGNoKHZjYykgeworCWNhc2UgIDA6IAkJCWJyZWFrOworCWNhc2UgMzM6IHZhbCA9IE1BWDE2MDRfVkNDXzM1OwlicmVhazsKKwljYXNlIDUwOiAJCQlicmVhazsKKwlkZWZhdWx0OiAJCQlnb3RvIGRvbmU7CisJfQorCisJLyogQ2hlY2tpbmcgc3VwcG9ydGVkIHZvbHRhZ2VzICovCisKKwlkZWJ1ZyAoIlBJUFI6IDB4JXggLS0+ICVzXG4iLAorCQlwY21wLT5wY21jX3BpcHIsCisJCShwY21wLT5wY21jX3BpcHIgJiAweDAwMDA4MDAwKSA/ICJvbmx5IDUgViIgOiAiY2FuIGRvIDMuM1YiKTsKKworCWkyY193cml0ZSAoQ0ZHX0kyQ19QT1dFUl9BX0FERFIsIDAsIDAsICZ2YWwsIDEpOworCWlmICh2YWwpIHsKKwkJZGVidWcgKCJQQ01DSUEgcG93ZXJlZCBhdCAlc1ZcbiIsCisJCQkodmFsICYgTUFYMTYwNF9WQ0NfMzUpID8gIjMuMyIgOiAiNS4wIik7CisJfSBlbHNlIHsKKwkJZGVidWcgKCJQQ01DSUEgcG93ZXJlZCBkb3duXG4iKTsKKwl9CisKK2RvbmU6CisJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCXVkZWxheSg1MDApOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlYywgRE9ORVxuIiwKKwkJc2xvdCsnQScpOworCXJldHVybiAoMCk7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfUENNQ0lBICovCmRpZmYgLS1naXQgYS9ib2FyZC9tNTI3MWV2Yi9NYWtlZmlsZSBiL2JvYXJkL201MjcxZXZiL01ha2VmaWxlCmluZGV4IDM0ZGU5ODMuLjI5NTFiOTYgMTAwNjQ0Ci0tLSBhL2JvYXJkL201MjcxZXZiL01ha2VmaWxlCisrKyBiL2JvYXJkL201MjcxZXZiL01ha2VmaWxlCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8KK0NPQkpTCT0gJChCT0FSRCkubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbTUyNzJjMy9NYWtlZmlsZSBiL2JvYXJkL201MjcyYzMvTWFrZWZpbGUKaW5kZXggZTVkODQ0Ni4uZTNkMjRiMyAxMDA2NDQKLS0tIGEvYm9hcmQvbTUyNzJjMy9NYWtlZmlsZQorKysgYi9ib2FyZC9tNTI3MmMzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tNTI4MmV2Yi9NYWtlZmlsZSBiL2JvYXJkL201MjgyZXZiL01ha2VmaWxlCmluZGV4IGU1ZDg0NDYuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL201MjgyZXZiL01ha2VmaWxlCisrKyBiL2JvYXJkL201MjgyZXZiL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tYng4eHgvTWFrZWZpbGUgYi9ib2FyZC9tYng4eHgvTWFrZWZpbGUKaW5kZXggM2U4Mzc2Yy4uZmVhZGYyNCAxMDA2NDQKLS0tIGEvYm9hcmQvbWJ4OHh4L01ha2VmaWxlCisrKyBiL2JvYXJkL21ieDh4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyB2cGQubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gdnBkLm8gcGNtY2lhLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21ieDh4eC9wY21jaWEuYyBiL2JvYXJkL21ieDh4eC9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzJhNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWJ4OHh4L3BjbWNpYS5jCkBAIC0wLDAgKzEsMTY2IEBACisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXBjOHh4Lmg+CisjaW5jbHVkZSA8cGNtY2lhLmg+CisKKyNpbmNsdWRlICJjc3IuaCIKKworI3VuZGVmCUNPTkZJR19QQ01DSUEKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19QQ01DSUEKKworLyogQSBsb3Qgb2YgdGhpcyBoYXMgYmVlbiB0YWtlbiBmcm9tIHRoZSBSUFggY29kZSBpbiB0aGlzIGZpbGUgaXQgd29ya3MgZnJvbSBtZS4KKyAgIEkgaGF2ZSBhZGRlZCB0aGUgdm9sdGFnZSBzZWxlY3Rpb24gZm9yIHRoZSBNQlggYm9hcmQuICovCisKKy8qIE1CWCB2b2x0YWdlIGJpdCBpbiBjb250cm9sIHJlZ2lzdGVyICMyICovCisjZGVmaW5lIENSMl9WUFAxMiAgICAgICAoKHVjaGFyKTB4MTApCisjZGVmaW5lIENSMl9WUFBWREQgICAgICAoKHVjaGFyKTB4MjApCisjZGVmaW5lIENSMl9WREQ1ICAgICAgICAoKHVjaGFyKTB4NDApCisjZGVmaW5lIENSMl9WREQzICAgICAgICAoKHVjaGFyKTB4ODApCisKKyNkZWZpbmUgUENNQ0lBX0JPQVJEX01TRyAiTUJYODYwIgorCitpbnQgcGNtY2lhX3ZvbHRhZ2Vfc2V0IChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKK3sKKwl1Y2hhciByZWcgPSAwOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogUENNQ0lBX0JPQVJEX01TRyBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKKwkgICAgICAgJ0EnICsgc2xvdCwgdmNjIC8gMTAsIHZjYyAlIDEwLCB2cHAgLyAxMCwgdmNjICUgMTApOworCisJc3dpdGNoICh2Y2MpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMzM6CisJCQlyZWcgfD0gQ1IyX1ZERDM7CisJCQlicmVhazsKKwkJY2FzZSA1MDoKKwkJCXJlZyB8PSBDUjJfVkRENTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDE7CisJfQorCisJc3dpdGNoICh2cHApIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMzM6CisJCWNhc2UgNTA6CisJCQlpZiAodmNjID09IHZwcCkgeworCQkJCXJlZyB8PSBDUjJfVlBQVkREOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDEyMDoKKwkJCXJlZyB8PSBDUjJfVlBQMTI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAxOworCX0KKworCS8qIGZpcnN0LCB0dXJuIG9mZiBhbGwgcG93ZXIgKi8KKwlNQlhfQ1NSMiAmPSB+KENSMl9WRERTRUwgfCBDUjJfVlBQU0VMKTsKKworCS8qIGVuYWJsZSBuZXcgcG93ZXJzZXR0aW5ncyAqLworCU1CWF9DU1IyIHw9IHJlZzsKKwlkZWJ1ZyAoIk1CWF9DU1IyIHJlYWQgPSAweCUwMnhcbiIsIE1CWF9DU1IyKTsKKworCXJldHVybiAoMCk7Cit9CisKK2ludCBwY21jaWFfaGFyZHdhcmVfZW5hYmxlIChpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcDsKKwl2b2xhdGlsZSBjcG04eHhfdCAqY3A7CisJdm9sYXRpbGUgcGNtY29uZjh4eF90ICpwY21wOworCXZvbGF0aWxlIHN5c2NvbmY4eHhfdCAqc3lzcDsKKwl1aW50IHJlZywgbWFzazsKKworCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLAorCSAgICAgICAnQScgKyBzbG90KTsKKworCXVkZWxheSAoMTAwMDApOworCisJaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKKwlzeXNwID0gKHN5c2NvbmY4eHhfdCAqKSAoJigoKGltbWFwX3QgKikgQ0ZHX0lNTVIpLT5pbV9zaXVfY29uZikpOworCXBjbXAgPSAocGNtY29uZjh4eF90ICopICgmKCgoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCWNwID0gKGNwbTh4eF90ICopICgmKCgoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbSkpOworCisJLyogY2xlYXIgaW50ZXJydXB0IHN0YXRlLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJcGNtcC0+cGNtY19wc2NyID0gUENNQ0lBX01BU0sgKF9zbG90Xyk7CisJcGNtcC0+cGNtY19wZXIgJj0gflBDTUNJQV9NQVNLIChfc2xvdF8pOworCisJLyoKKwkqIERpc2FibGUgaW50ZXJydXB0cywgRE1BLCBhbmQgUENNQ0lBIGJ1ZmZlcnMKKwkqIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCisJKi8KKwlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7CisJcmVnID0gMDsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYIChfc2xvdF8pID0gcmVnOworCXVkZWxheSAoNTAwKTsKKworCS8qIHJlbW92ZSBhbGwgcG93ZXIgKi8KKwlwY21jaWFfdm9sdGFnZV9zZXQgKHNsb3QsIDAsIDApOworCS8qCisJKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBjYXJkIGluIHRoZSBzbG90LCB0aGVuIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlLgorCSovCisJdWRlbGF5KDEwMDAwKTsKKwlkZWJ1ZyAoIlslZF0gJXM6IFBJUFIoJXApPTB4JXhcbiIsCisJICAgICAgIF9fTElORV9fLF9fRlVOQ1RJT05fXywKKwkgICAgICAgJihwY21wLT5wY21jX3BpcHIpLHBjbXAtPnBjbWNfcGlwcik7CisjaWZuZGVmIENPTkZJR19ITUkxMAorCWlmIChwY21wLT5wY21jX3BpcHIgJiAoMHgxODAwMDAwMCA+PiAoc2xvdCA8PCA0KSkpIHsKKyNlbHNlCisJaWYgKHBjbXAtPnBjbWNfcGlwciAmICgweDEwMDAwMDAwID4+IChzbG90IDw8IDQpKSkgeworI2VuZGlmCS8qIENPTkZJR19ITUkxMCAqLworCQlwcmludGYgKCIgICBObyBDYXJkIGZvdW5kXG4iKTsKKwkJcmV0dXJuICgxKTsKKwl9CisKKwkvKgorCSogUG93ZXIgT24uCisJKi8KKwltYXNrID0gUENNQ0lBX1ZTMSAoX3Nsb3RfKSB8IFBDTUNJQV9WUzIgKF9zbG90Xyk7CisJcmVnID0gcGNtcC0+cGNtY19waXByOworCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwgcmVnLAorCSAgICAgICAocmVnICYgUENNQ0lBX1ZTMSAoc2xvdCkpID8gIm4iIDogImZmIiwKKwkgICAgICAgKHJlZyAmIFBDTUNJQV9WUzIgKHNsb3QpKSA/ICJuIiA6ICJmZiIpOworCisJaWYgKChyZWcgJiBtYXNrKSA9PSBtYXNrKSB7CisJCXBjbWNpYV92b2x0YWdlX3NldCAoX3Nsb3RfLCA1MCwgMCk7CisJCXByaW50ZiAoIiA1LjBWIGNhcmQgZm91bmQ6ICIpOworCX0gZWxzZSB7CisJCXBjbWNpYV92b2x0YWdlX3NldCAoX3Nsb3RfLCAzMywgMCk7CisJCXByaW50ZiAoIiAzLjNWIGNhcmQgZm91bmQ6ICIpOworCX0KKworCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKKwlyZWcgPSBQQ01DSUFfUEdDUlggKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYIChfc2xvdF8pID0gcmVnOworCisJdWRlbGF5ICgyNTAwMDApOwkvKiBzb21lIGNhcmRzIG5lZWQgPjE1MCBtcyB0byBjb21lIHVwIDotKCAqLworCisJZGVidWcgKCIjIGhhcmR3YXJlX2VuYWJsZSBkb25lXG4iKTsKKworCXJldHVybiAoMCk7CisJfQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlIChpbnQgc2xvdCkKK3sKKwlyZXR1cm4gMDsJLyogTm8gaGFyZHdhcmUgdG8gZGlzYWJsZSAqLworfQorI2VuZGlmIC8qIENGR19DTURfUENNQ0lBICovCisKKyNlbmRpZgkvKiBDT05GSUdfUENNQ0lBICovCmRpZmYgLS1naXQgYS9ib2FyZC9tY2MyMDAvTWFrZWZpbGUgYi9ib2FyZC9tY2MyMDAvTWFrZWZpbGUKaW5kZXggN2ZkYzA4OC4uZWIxZDA1OSAxMDA2NDQKLS0tIGEvYm9hcmQvbWNjMjAwL01ha2VmaWxlCisrKyBiL2JvYXJkL21jYzIwMC9NYWtlZmlsZQpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubworQ09CSlMJOj0gJChCT0FSRCkubyBsY2QubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21jYzIwMC9jb25maWcubWsgYi9ib2FyZC9tY2MyMDAvY29uZmlnLm1rCmluZGV4IGZhNTU2NzMuLmQwZjkyODkgMTAwNjQ0Ci0tLSBhL2JvYXJkL21jYzIwMC9jb25maWcubWsKKysrIGIvYm9hcmQvbWNjMjAwL2NvbmZpZy5tawpAQCAtMjIsMjAgKzIyLDIyIEBACiAjCiAKICMKLSMgTUNDMjAwIGJvYXJkOgorIyBNQ0MyMDAsIFBSUzIwMCBib2FyZHM6CiAjCiAjCVZhbGlkIHZhbHVlcyBmb3IgVEVYVF9CQVNFIGFyZToKICMKLSMJMHhGRkYwMDAwMCAgIGJvb3QgaGlnaCAoc3RhbmRhcmQgY29uZmlndXJhdGlvbikKLSMJMHhGRTAwMDAwMCAgIGJvb3QgbG93CisjCTB4RkMwMDAwMDAgICBib290IGxvdyAoc3RhbmRhcmQgY29uZmlndXJhdGlvbikKKyMJMHhGRkYwMDAwMCAgIGJvb3QgaGlnaAogIwkweDAwMTAwMDAwICAgYm9vdCBmcm9tIFJBTSAoZm9yIHRlc3Rpbmcgb25seSkKICMKIAotc2luY2x1ZGUgJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKK3NpbmNsdWRlICQoT0JKVFJFRSkvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLnRtcAogCiBpZm5kZWYgVEVYVF9CQVNFCi0jIyBTdGFuZGFyZDogYm9vdCBoaWdoCi1URVhUX0JBU0UgPSAweEZGRjAwMDAwCisjIyBTdGFuZGFyZDogYm9vdCBsb3cKK1RFWFRfQkFTRSA9IDB4RkMwMDAwMDAKKyMjIEJvb3QgaGlnaAorIyBURVhUX0JBU0UgPSAweEZGRjAwMDAwCiAjIyBGb3IgdGVzdGluZzogYm9vdCBmcm9tIFJBTQogIyBURVhUX0JBU0UgPSAweDAwMTAwMDAwCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL2xjZC5jIGIvYm9hcmQvbWNjMjAwL2xjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNjI1MTYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tY2MyMDAvbGNkLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGxjZC5oPgorI2luY2x1ZGUgPG1wYzV4eHguaD4KKworI2lmZGVmIENPTkZJR19MQ0QKKworI2RlZmluZSBTV0FQUEVEX0xDRAorLyoKKyAqICBUaGUgbmFtZSBvZiB0aGUgZGV2aWNlIHVzZWQgZm9yIGNvbW11bmljYXRpb24KKyAqIHdpdGggdGhlIFBTb0MuCisgKi8KKyNkZWZpbmUgUFNPQ19QU0MJTVBDNVhYWF9QU0MyCisjZGVmaW5lIFBTT0NfQkFVRAk1MDAwMDBVTAorCisjZGVmaW5lIFJUU19BU1NFUlQJMQorI2RlZmluZSBSVFNfTkVHQVRFCTAKKyNkZWZpbmUgQ1RTX0FTU0VSVAkxCisjZGVmaW5lIENUU19ORUdBVEUJMAorCisvKgorICogRGltZW5zaW9ucyBpbiBwaXhlbHMKKyAqLworI2RlZmluZSBMQ0RfV0lEVEgJMTYwCisjZGVmaW5lIExDRF9IRUlHSFQJMTAwCisKKy8qCisgKiBEaW1lbnNpb25zIGluIGJ5dGVzCisgKi8KKyNkZWZpbmUgTENEX0JVRl9TSVpFCSgoTENEX1dJRFRIKkxDRF9IRUlHSFQpPj4zKQorCisjaWYgTENEX0JQUCAhPSBMQ0RfTU9OT0NIUk9NRQorI2Vycm9yICJNQ0MyMDAgc3VwcG9ydCBvbmx5IG1vbm9jaHJvbWUgZGlzcGxheXMgKDEgYnBwKSEiCisjZW5kaWYKKworI2RlZmluZSBQU09DX1JFVFJJRVMJMTAJLyogZWFjaCBvZiBQU09DX1dBSVRfVElNRSAqLworI2RlZmluZSBQU09DX1dBSVRfVElNRQkxMAkvKiB1c2VjICovCisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisvKgorICogTENEIGluZm9ybWF0aW9uCisgKi8KK3ZpZGluZm9fdCBwYW5lbF9pbmZvID0geworCUxDRF9XSURUSCwgTENEX0hFSUdIVCwgTENEX0JQUAorfTsKKworaW50IGxjZF9saW5lX2xlbmd0aDsKKworaW50IGxjZF9jb2xvcl9mZzsKK2ludCBsY2RfY29sb3JfYmc7CisKKy8qCisgKiBGcmFtZSBidWZmZXIgbWVtb3J5IGluZm9ybWF0aW9uCisgKi8KK3ZvaWQgKmxjZF9iYXNlOwkJCS8qIFN0YXJ0IG9mIGZyYW1lYnVmZmVyIG1lbW9yeSAgKi8KK3ZvaWQgKmxjZF9jb25zb2xlX2FkZHJlc3M7CS8qIFN0YXJ0IG9mIGNvbnNvbGUgYnVmZmVyICAgICAgKi8KKworc2hvcnQgY29uc29sZV9jb2wgPSAwOworc2hvcnQgY29uc29sZV9yb3cgPSAwOworCisvKgorICogIFRoZSBkZXZpY2Ugd2UgdXNlIHRvIGNvbW11bmljYXRlIHdpdGggUFNvQworICovCitpbnQgc2VyaWFsX2luaXRlZCA9IDA7CisKKy8qCisgKiBFeHBvcnRlZCBmdW5jdGlvbnMKKyAqLwordm9pZCBsY2RfaW5pdGNvbHJlZ3MgKHZvaWQpOwordm9pZCBsY2RfY3RybF9pbml0ICh2b2lkICpsY2RiYXNlKTsKK3ZvaWQgbGNkX2VuYWJsZSAodm9pZCk7CisKKy8qCisgKiAgSW1wb3J0ZWQgZnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIFBTb0MgcHJvdG9jb2wKKyAqLworZXh0ZXJuIGludCBzZXJpYWxfaW5pdF9kZXYgKHVuc2lnbmVkIGxvbmcgZGV2X2Jhc2UpOworZXh0ZXJuIHZvaWQgc2VyaWFsX3NldHJ0c19kZXYgKHVuc2lnbmVkIGxvbmcgZGV2X2Jhc2UsIGludCBzKTsKK2V4dGVybiBpbnQgc2VyaWFsX2dldGN0c19kZXYgKHVuc2lnbmVkIGxvbmcgZGV2X2Jhc2UpOworZXh0ZXJuIHZvaWQgc2VyaWFsX3B1dGNfcmF3X2Rldih1bnNpZ25lZCBsb25nIGRldl9iYXNlLCBjb25zdCBjaGFyIGMpOworCisvKgorICogIEp1c3Qgc3R1YnMgZm9yIG91ciBkcml2ZXIsIG5lZWRlZCBmb3IgY29tcGlsaW5nIGNvbXBhYmlsdHkgd2l0aAorICogdGhlIGNvbW1vbiBMQ0QgZHJpdmVyIGNvZGUuCisgKi8KK3ZvaWQgbGNkX2luaXRjb2xyZWdzICh2b2lkKQoreworfQorCit2b2lkIGxjZF9jdHJsX2luaXQgKHZvaWQgKmxjZGJhc2UpCit7Cit9CisKKy8qCisgKiBGdW5jdGlvbiBzZW5kcyB0aGUgY29udGVudHMgb2YgdGhlIGZyYW1lLWJ1ZmZlciB0byB0aGUgTENECisgKi8KK3ZvaWQgbGNkX2VuYWJsZSAodm9pZCkKK3sKKwlpbnQgaSwgcmV0cmllcywgZmJfc2l6ZTsKKworCWlmICghc2VyaWFsX2luaXRlZCkgeworCQl1bnNpZ25lZCBsb25nIGJhdWQ7CisKKwkJYmF1ZCA9IGdkLT5iYXVkcmF0ZTsKKwkJZ2QtPmJhdWRyYXRlID0gUFNPQ19CQVVEOworCQlzZXJpYWxfaW5pdF9kZXYoUFNPQ19QU0MpOworCQlnZC0+YmF1ZHJhdGUgPSBiYXVkOworCQlzZXJpYWxfc2V0cnRzX2RldiAoUFNPQ19QU0MsIFJUU19BU1NFUlQpOworCQlzZXJpYWxfaW5pdGVkID0gMTsKKwl9CisKKwkvKgorCSAqICBJbXBsZW1lbnQgUFNvQyBjb21tdW5pY2F0aW9uIHByb3RvY29sOgorCSAqIDEuIEFzc2VydCBSVFMsIHdhaXQgQ1RTIGFzc2VydGlvbgorCSAqIDIuIFRyYW5zbWl0IGRhdGEKKwkgKiAzLiBOZWdhdGUgUlRTLCB3YWl0IENUUyBuZWdhdGlvbgorCSAqLworCisJLyogMSAqLworCXNlcmlhbF9zZXRydHNfZGV2IChQU09DX1BTQywgUlRTX0FTU0VSVCk7CisJZm9yIChyZXRyaWVzID0gUFNPQ19SRVRSSUVTOyByZXRyaWVzOyByZXRyaWVzLS0pIHsKKwkJaWYgKHNlcmlhbF9nZXRjdHNfZGV2KFBTT0NfUFNDKSA9PSBDVFNfQVNTRVJUKQorCQkJYnJlYWs7CisJCXVkZWxheSAoUFNPQ19XQUlUX1RJTUUpOworCX0KKwlpZiAoIXJldHJpZXMpIHsKKwkJcHJpbnRmICgiJXMgRXJyb3I6IFBTb0MgZG9lc24ndCByZXNwb25kIG9uICIKKwkJCSJSVFMgQVNTRVJUXG4iLAlfX0ZVTkNUSU9OX18pOworCX0KKworCS8qIDIgKi8KKwlmYl9zaXplID0gcGFuZWxfaW5mby52bF9yb3cgKiAocGFuZWxfaW5mby52bF9jb2wgPj4gMyk7CisKKyNpZiAhZGVmaW5lZChTV0FQUEVEX0xDRCkKKwlmb3IgKGk9MDsgaTxmYl9zaXplOyBpKyspIHsKKwkJc2VyaWFsX3B1dGNfcmF3X2RldiAoUFNPQ19QU0MsICgoY2hhciAqKWxjZF9iYXNlKVtpXSk7CisJfQorI2Vsc2UKKyAgICB7CisJaW50IHgsIHksIHB3aWR0aDsKKwljaGFyICpwID0gKGNoYXIgKilsY2RfYmFzZTsKKworCXB3aWR0aCA9ICgocGFuZWxfaW5mby52bF9jb2wrNykgPj4gMyk7CisJZm9yICh5PTA7IHk8cGFuZWxfaW5mby52bF9yb3c7IHkrKykgeworCQlpID0geSAqIHB3aWR0aDsKKwkJZm9yICh4PTA7IHg8cHdpZHRoOyB4Kz01KSB7CisJCQlzZXJpYWxfcHV0Y19yYXdfZGV2IChQU09DX1BTQywgKHBbaSt4KzJdPDw0ICYgMHhGMCkgfCAocFtpK3grM10+PjQgJiAweDBGKSk7CisJCQlzZXJpYWxfcHV0Y19yYXdfZGV2IChQU09DX1BTQywgKHBbaSt4KzNdPDw0ICYgMHhGMCkgfCAocFtpK3grNF0+PjQgJiAweDBGKSk7CisJCQlzZXJpYWxfcHV0Y19yYXdfZGV2IChQU09DX1BTQywgKHBbaSt4KzRdPDw0ICYgMHhGMCkgfCAocFtpK3hdPj40ICYgMHgwRikpOworCQkJc2VyaWFsX3B1dGNfcmF3X2RldiAoUFNPQ19QU0MsIChwW2kreF08PDQgJiAweEYwKSB8IChwW2kreCsxXT4+NCAmIDB4MEYpKTsKKwkJCXNlcmlhbF9wdXRjX3Jhd19kZXYgKFBTT0NfUFNDLCAocFtpK3grMV08PDQgJiAweEYwKSB8IChwW2kreCsyXT4+NCAmIDB4MEYpKTsKKwkJfQorCX0KKyAgICB9CisjZW5kaWYKKworCS8qIDMgKi8KKwlzZXJpYWxfc2V0cnRzX2RldiAoUFNPQ19QU0MsIFJUU19ORUdBVEUpOworCWZvciAocmV0cmllcyA9IFBTT0NfUkVUUklFUzsgcmV0cmllczsgcmV0cmllcy0tKSB7CisJCWlmIChzZXJpYWxfZ2V0Y3RzX2RldihQU09DX1BTQykgPT0gQ1RTX05FR0FURSkKKwkJCWJyZWFrOworCQl1ZGVsYXkgKFBTT0NfV0FJVF9USU1FKTsKKwl9CisJaWYgKCFyZXRyaWVzKSB7CisJCXByaW50ZiAoIiVzIEVycm9yOiBQU29DIGRvZXNuJ3QgcmVzcG9uZCBvbiAiCisJCQkiUlRTIE5FR0FURVxuIiwJX19GVU5DVElPTl9fKTsKKwl9CisKKwlyZXR1cm47Cit9CisjZW5kaWYgLyogQ09ORklHX0xDRCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWNjMjAwL21jYzIwMC5jIGIvYm9hcmQvbWNjMjAwL21jYzIwMC5jCmluZGV4IGI5YjlhNzEuLjcxYTY5MWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL21jYzIwMC9tY2MyMDAuYworKysgYi9ib2FyZC9tY2MyMDAvbWNjMjAwLmMKQEAgLTMyLDcgKzMyLDEyIEBACiAvKiAjaW5jbHVkZSAibXQ0OGxjOG0zMmIyLTYtNy5oIiAqLwogCiAvKiBPbmUgTVQ0OExDMTZNMzJTMiBmb3IgNjQgTUIgKi8KLSNpbmNsdWRlICJtdDQ4bGMxNm0zMnMyLTc1LmgiCisvKiAjaW5jbHVkZSAibXQ0OGxjMTZtMzJzMi03NS5oIiAqLworI2lmIGRlZmluZWQgKENPTkZJR19NQ0MyMDBfU0RSQU0pCisjaW5jbHVkZSAibXQ0OGxjMTZtMTZhMi03NS5oIgorI2Vsc2UKKyNpbmNsdWRlICJtdDQ2djE2bTE2LTc1LmgiCisjZW5kaWYKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKQEAgLTE5MiwxMiArMTk3LDE4IEBACiAKIGludCBjaGVja2JvYXJkICh2b2lkKQogeworI2lmIGRlZmluZWQoQ09ORklHX1BSUzIwMCkKKwlwdXRzICgiQm9hcmQ6IFBSUzIwMFxuIik7CisjZWxzZQogCXB1dHMgKCJCb2FyZDogTUNDMjAwXG4iKTsKKyNlbmRpZgogCXJldHVybiAwOwogfQogCiBpbnQgbWlzY19pbml0X3IgKHZvaWQpCiB7CisJdWxvbmcgZmxhc2hfc3VwX2VuZCwgc251bTsKKwogCS8qCiAJICogQWRqdXN0IGZsYXNoIHN0YXJ0IGFuZCBvZmZzZXQgdG8gZGV0ZWN0ZWQgdmFsdWVzCiAJICovCkBAIC0yNDksOSArMjYwLDE1IEBACiAJCSoodm9sYXRpbGUgaW50KilNUEM1WFhYX0NTMF9DRkcgfD0gKDEgPDwgNik7CiAJCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9DTEVBUiwKIAkJCSAgICAgICBmbGFzaF9pbmZvWzBdLnN0YXJ0WzBdICsgZmxhc2hfaW5mb1swXS5zaXplIC8gMiwKLQkJCSAgICAgICAoZmxhc2hfaW5mb1swXS5zdGFydFswXSArIGZsYXNoX2luZm9bMF0uc2l6ZSkgLyAyIC0gMSwKKwkJCSAgICAgICAoZmxhc2hfaW5mb1swXS5zdGFydFswXSAtIDEpICsgZmxhc2hfaW5mb1swXS5zaXplLAogCQkJICAgICAgICZmbGFzaF9pbmZvWzBdKTsKIAkJKih2b2xhdGlsZSBpbnQqKU1QQzVYWFhfQ1MwX0NGRyAmPSB+KDEgPDwgNik7CisJCXByaW50ZiAoIldhcm5pbmc6IE9ubHkgMzIgb2YgNjQgTUIgb2YgRmxhc2ggYXJlIGFjY2Vzc2libGUgZnJvbSBVLUJvb3RcbiIpOworCQlmbGFzaF9pbmZvWzBdLnNpemUgPSAzMiA8PCAyMDsKKwkJZm9yIChzbnVtID0gMCwgZmxhc2hfc3VwX2VuZCA9IGdkLT5iZC0+YmlfZmxhc2hzdGFydCArICgzMjw8MjApOworCQkJZmxhc2hfaW5mb1swXS5zdGFydFtzbnVtXSA8IGZsYXNoX3N1cF9lbmQ7CisJCQlzbnVtKyspOworCQlmbGFzaF9pbmZvWzBdLnNlY3Rvcl9jb3VudCA9IHNudW07CiAJfQogCiAJcmV0dXJuICgwKTsKZGlmZiAtLWdpdCBhL2JvYXJkL21sMi9NYWtlZmlsZSBiL2JvYXJkL21sMi9NYWtlZmlsZQppbmRleCA0MGM2MGIxLi5jZTViYTE5IDEwMDY0NAotLS0gYS9ib2FyZC9tbDIvTWFrZWZpbGUKKysrIGIvYm9hcmQvbWwyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDExICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIHNlcmlhbC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBzZXJpYWwubwogU09CSlMJPSBpbml0Lm8KIAorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbW9kbmV0NTAvTWFrZWZpbGUgYi9ib2FyZC9tb2RuZXQ1MC9NYWtlZmlsZQppbmRleCBhYjJjMzc2Li5hZTRkZTU3IDEwMDY0NAotLS0gYS9ib2FyZC9tb2RuZXQ1MC9NYWtlZmlsZQorKysgYi9ib2FyZC9tb2RuZXQ1MC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEzICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IG1vZG5ldDUwLm8gZmxhc2gubworQ09CSlMJOj0gbW9kbmV0NTAubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbW91c3NlL01ha2VmaWxlIGIvYm9hcmQvbW91c3NlL01ha2VmaWxlCmluZGV4IGRkYzU1NDYuLjQ5MGFjM2IgMTAwNjQ0Ci0tLSBhL2JvYXJkL21vdXNzZS9NYWtlZmlsZQorKysgYi9ib2FyZC9tb3Vzc2UvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNCwxOCArMjQsMjEgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gbTQ4dDU5eS5vIHBjaS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBtNDh0NTl5Lm8gcGNpLm8gZmxhc2gubworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wMnVzYi9NYWtlZmlsZSBiL2JvYXJkL21wMnVzYi9NYWtlZmlsZQppbmRleCBiNmVhM2NmLi5jMWU3ZmZkIDEwMDY0NAotLS0gYS9ib2FyZC9tcDJ1c2IvTWFrZWZpbGUKKysrIGIvYm9hcmQvbXAydXNiL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEyICsyMywxNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IG1wMnVzYi5vIGZsYXNoLm8KK0NPQkpTCTo9IG1wMnVzYi5vIGZsYXNoLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4MjYwYWRzL01ha2VmaWxlIGIvYm9hcmQvbXBjODI2MGFkcy9NYWtlZmlsZQppbmRleCBjYzUxOWQxLi5lMWUwYTBmIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4MjYwYWRzL01ha2VmaWxlCisrKyBiL2JvYXJkL21wYzgyNjBhZHMvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNCwxMSArMjQsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgyNjBhZHMvY29uZmlnLm1rIGIvYm9hcmQvbXBjODI2MGFkcy9jb25maWcubWsKaW5kZXggZWI2ZjdjOS4uZTk5ZTE4MSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODI2MGFkcy9jb25maWcubWsKKysrIGIvYm9hcmQvbXBjODI2MGFkcy9jb25maWcubWsKQEAgLTI5LDcgKzI5LDcgQEAKICMgTVBDODI2MEFEUywgTVBDODI2NkFEUywgYW5kIFBRMkZBRFMtWlUvVlIgYm9hcmRzCiAjCiAKLXNpbmNsdWRlICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCitzaW5jbHVkZSAkKE9CSlRSRUUpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKIAogaWZuZGVmIFRFWFRfQkFTRQogIyMgU3RhbmRhcmQ6IGJvb3QgaGlnaApkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODI2NmFkcy9NYWtlZmlsZSBiL2JvYXJkL21wYzgyNjZhZHMvTWFrZWZpbGUKaW5kZXggY2QwZjQwYi4uMTU3Yzk2OSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODI2NmFkcy9NYWtlZmlsZQorKysgYi9ib2FyZC9tcGM4MjY2YWRzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDExICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOCw5ICs0Miw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODM0OWVtZHMvTWFrZWZpbGUgYi9ib2FyZC9tcGM4MzQ5ZW1kcy9NYWtlZmlsZQppbmRleCAzOGJiYjY3Li5lNjk5MDg2IDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4MzQ5ZW1kcy9NYWtlZmlsZQorKysgYi9ib2FyZC9tcGM4MzQ5ZW1kcy9NYWtlZmlsZQpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubworQ09CSlMJOj0gJChCT0FSRCkubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBhZHMvTWFrZWZpbGUgYi9ib2FyZC9tcGM4NTQwYWRzL01ha2VmaWxlCmluZGV4IDVkOGVhMzQuLjNmMWU4ZjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzg1NDBhZHMvTWFrZWZpbGUKKysrIGIvYm9hcmQvbXBjODU0MGFkcy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMyArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vCitDT0JKUwk6PSAkKEJPQVJEKS5vCiBTT0JKUwk6PSBpbml0Lm8KICNTT0JKUwk6PQogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtNDAsOSArNDQsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBldmFsL01ha2VmaWxlIGIvYm9hcmQvbXBjODU0MGV2YWwvTWFrZWZpbGUKaW5kZXggNmYxOTk1ZS4uMGE4Mzk3MCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU0MGV2YWwvTWFrZWZpbGUKKysrIGIvYm9hcmQvbXBjODU0MGV2YWwvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTQgKzIzLDE4IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCi0jT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8gJChCT0FSRClfc2xhdmUubworQ09CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCisjQ09CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vICQoQk9BUkQpX3NsYXZlLm8KIFNPQkpTCTo9IGluaXQubwogI1NPQkpTCTo9CiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC00MSw5ICs0NSw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2MGFkcy9NYWtlZmlsZSBiL2JvYXJkL21wYzg1NjBhZHMvTWFrZWZpbGUKaW5kZXggNWQ4ZWEzNC4uM2YxZThmMiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU2MGFkcy9NYWtlZmlsZQorKysgYi9ib2FyZC9tcGM4NTYwYWRzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEzICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9ICQoQk9BUkQpLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8KIFNPQkpTCTo9IGluaXQubwogI1NPQkpTCTo9CiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC00MCw5ICs0NCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODY0MWhwY24vTWFrZWZpbGUgYi9ib2FyZC9tcGM4NjQxaHBjbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjIxNGVkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODY0MWhwY24vTWFrZWZpbGUKQEAgLTAsMCArMSw1MiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gJChCT0FSRCkubyBwaXhpcy5vIHN5c19lZXByb20ubworU09CSlMJOj0gaW5pdC5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoT0JKUykgJChTT0JKUykKKworLlBIT05ZOiBkaXN0Y2xlYW4KK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgKCRvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NjQxaHBjbi9jb25maWcubWsgYi9ib2FyZC9tcGM4NjQxaHBjbi9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5YTQwYgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg2NDFocGNuL2NvbmZpZy5tawpAQCAtMCwwICsxLDMxIEBACisjIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorIyBNb2RpZmllZCBieSBKZWZmIEJyb3duCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMKKyMgbXBjODY0MWhwY24gYm9hcmQKKyMgZGVmYXVsdCBDQ1NSQkFSIGlzIGF0IDB4ZmY3MDAwMDAKKyMgYXNzdW1lIFUtQm9vdCBpcyBsZXNzIHRoYW4gMC41TUIKKyMKK1RFWFRfQkFTRSA9IDB4ZmZmMDEwMDAKKworUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfTVBDODZ4eD0xCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4NjQxPTEgLW1hbHRpdmVjIC1tYWJpPWFsdGl2ZWMgLW1zb2Z0LWZsb2F0CmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NjQxaHBjbi9pbml0LlMgYi9ib2FyZC9tcGM4NjQxaHBjbi9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlYTU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg2NDFocGNuL2luaXQuUwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICogSmVmZiBCcm93bgorICogU3Jpa2FudGggU3Jpbml2YXNhbiAoc3Jpa2FudGguc3Jpbml2YXNhbkBmcmVlc2NhbGUuY29tKQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxwcGNfYXNtLnRtcGw+CisjaW5jbHVkZSA8cHBjX2RlZnMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8bXBjODZ4eC5oPgorCisvKgorICogTEFXKExvY2FsIEFjY2VzcyBXaW5kb3cpIGNvbmZpZ3VyYXRpb246CisgKgorICogMHgwMDAwXzAwMDAgICAgIDB4N2ZmZl9mZmZmICAgICBERFIgICAgICAgICAgICAgICAgICAgICAyRworICogMHg4MDAwXzAwMDAgICAgIDB4OWZmZl9mZmZmICAgICBQQ0kxIE1FTSAgICAgICAgICAgICAgICA1MTJNCisgKiAweGEwMDBfMDAwMCAgICAgMHhiZmZmX2ZmZmYgICAgIFBDSTIgTUVNICAgICAgICAgICAgICAgIDUxMk0KKyAqIDB4YzAwMF8wMDAwICAgICAweGRmZmZfZmZmZiAgICAgUmFwaWRJTyAgICAgICAgICAgICAgICAgNTEyTQorICogMHhlMjAwXzAwMDAgICAgIDB4ZTJmZl9mZmZmICAgICBQQ0kxIElPICAgICAgICAgICAgICAgICAxNk0KKyAqIDB4ZTMwMF8wMDAwICAgICAweGUzZmZfZmZmZiAgICAgUENJMiBJTyAgICAgICAgICAgICAgICAgMTZNCisgKiAweGY4MDBfMDAwMCAgICAgMHhmODBmX2ZmZmYgICAgIENDU1JCQVIgICAgICAgICAgICAgICAgIDFNCisgKiAweGY4MTBfMDAwMCAgICAgMHhmODFmX2ZmZmYgICAgIFBJWElTICAgICAgICAgICAgICAgICAgIDFNCisgKiAweGZlMDBfMDAwMCAgICAgMHhmZmZmX2ZmZmYgICAgIEZMQVNIIChib290IGJhbmspICAgICAgIDMyTQorICoKKyAqIE5vdGVzOgorICogICAgQ0NTUkJBUiBkb24ndCBuZWVkIGEgY29uZmlndXJlZCBMb2NhbCBBY2Nlc3MgV2luZG93LgorICogICAgSWYgZmxhc2ggaXMgOE0gYXQgZGVmYXVsdCBwb3NpdGlvbiAobGFzdCA4TSksIG5vIExBVyBuZWVkZWQuCisgKi8KKworI2lmICFkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKQorI2RlZmluZSBMQVdCQVIxICgoQ0ZHX0REUl9TRFJBTV9CQVNFPj4xMikgJiAweGZmZmZmZikKKyNkZWZpbmUgTEFXQVIxCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfRERSMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKSkKKyNlbHNlCisjZGVmaW5lIExBV0JBUjEgMAorI2RlZmluZSBMQVdBUjEgICgoTEFXQVJfVFJHVF9JRl9ERFIxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKSAmIH5MQVdBUl9FTikKKyNlbmRpZgorCisjZGVmaW5lIExBV0JBUjIgKChDRkdfUENJMV9NRU1fQkFTRT4+MTIpICYgMHhmZmZmZmYpCisjZGVmaW5lIExBV0FSMgkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNTEyTSkpCisKKyNkZWZpbmUgTEFXQkFSMyAoKENGR19QQ0kyX01FTV9CQVNFPj4xMikgJiAweGZmZmZmZikKKyNkZWZpbmUgTEFXQVIzCSh+TEFXQVJfRU4gJiAoTEFXQVJfVFJHVF9JRl9QQ0kyIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKSkKKworLyoKKyAqIFRoaXMgaXMgbm90IHNvIG11Y2ggdGhlIFNEUkFNIG1hcCBhcyBpdCBpcyB0aGUgd2hvbGUgbG9jYWxidXMgbWFwLgorICovCisjZGVmaW5lIExBV0JBUjQgKCgweGY4MTAwMDAwPj4xMikgJiAweGZmZmZmZikKKyNkZWZpbmUgTEFXQVI0CShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfTEJDIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzJNKSkKKworI2RlZmluZSBMQVdCQVI1ICgoQ0ZHX1BDSTFfSU9fQkFTRT4+MTIpICYgMHhmZmZmZmYpCisjZGVmaW5lIExBV0FSNQkoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMTZNKSkKKworI2RlZmluZSBMQVdCQVI2ICgoQ0ZHX1BDSTJfSU9fQkFTRT4+MTIpICYgMHhmZmZmZmYpCisjZGVmaW5lIExBV0FSNgkofkxBV0FSX0VOICYoIExBV0FSX1RSR1RfSUZfUENJMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xNk0pKSkKKworI2RlZmluZSBMQVdCQVI3ICgoMHhmZTAwMDAwMCA+PjEyKSAmIDB4ZmZmZmZmKQorI2RlZmluZSBMQVdBUjcJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9MQkMgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMzJNKSkKKworI2lmICFkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKQorI2RlZmluZSBMQVdCQVI4ICgoQ0ZHX0REUl9TRFJBTV9CQVNFPj4xMikgJiAweGZmZmZmZikKKyNkZWZpbmUgTEFXQVI4IChMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfRERSMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKSkKKyNlbHNlCisjZGVmaW5lIExBV0JBUjggMAorI2RlZmluZSBMQVdBUjggICgoTEFXQVJfVFJHVF9JRl9ERFIyIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKSAmIH5MQVdBUl9FTikKKyNlbmRpZgorCisjZGVmaW5lIExBV0JBUjkgKChDRkdfUklPX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjkgIChMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUklPIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKQorCisJLnNlY3Rpb24gLmJvb3RwZywgImF4IgorCS5nbG9ibAlsYXdfZW50cnkKK2xhd19lbnRyeToKKwlsaXMJcjcsQ0ZHX0NDU1JCQVJAaAorCW9yaQlyNyxyNyxDRkdfQ0NTUkJBUkBsCisKKwlhZGRpICAgIHI0LHI3LDAKKwlhZGRpICAgIHI1LHI3LDAKKworCS8qIFNraXAgTEFXQVIwLCBzdGFydCBhdCBMQVdBUjEgKi8KKwlsaXMgICAgIHI2LExBV0JBUjFAaAorCW9yaSAgICAgcjYscjYsTEFXQkFSMUBsCisJc3R3dSAgICByNiwgMHhjMjgocjQpCisKKwlsaXMgICAgIHI2LExBV0FSMUBoCisJb3JpICAgICByNixyNixMQVdBUjFAbAorCXN0d3UgICAgcjYsIDB4YzMwKHI1KQorCisJLyogTEFXQkFSMiwgTEFXQVIyICovCisJbGlzICAgICByNixMQVdCQVIyQGgKKwlvcmkgICAgIHI2LHI2LExBV0JBUjJAbAorCXN0d3UgICAgcjYsIDB4MjAocjQpCisKKwlsaXMgICAgIHI2LExBV0FSMkBoCisJb3JpICAgICByNixyNixMQVdBUjJAbAorCXN0d3UgICAgcjYsIDB4MjAocjUpCisKKwkvKiBMQVdCQVIzLCBMQVdBUjMgKi8KKwlsaXMgICAgIHI2LExBV0JBUjNAaAorCW9yaSAgICAgcjYscjYsTEFXQkFSM0BsCisJc3R3dSAgICByNiwgMHgyMChyNCkKKworCWxpcyAgICAgcjYsTEFXQVIzQGgKKwlvcmkgICAgIHI2LHI2LExBV0FSM0BsCisJc3R3dSAgICByNiwgMHgyMChyNSkKKworCS8qIExBV0JBUjQsIExBV0FSNCAqLworCWxpcyAgICAgcjYsTEFXQkFSNEBoCisJb3JpICAgICByNixyNixMQVdCQVI0QGwKKwlzdHd1ICAgIHI2LCAweDIwKHI0KQorCisJbGlzICAgICByNixMQVdBUjRAaAorCW9yaSAgICAgcjYscjYsTEFXQVI0QGwKKwlzdHd1ICAgIHI2LCAweDIwKHI1KQorCS8qIExBV0JBUjUsIExBV0FSNSAqLworCWxpcyAgICAgcjYsTEFXQkFSNUBoCisJb3JpICAgICByNixyNixMQVdCQVI1QGwKKwlzdHd1ICAgIHI2LCAweDIwKHI0KQorCisJbGlzICAgICByNixMQVdBUjVAaAorCW9yaSAgICAgcjYscjYsTEFXQVI1QGwKKwlzdHd1ICAgIHI2LCAweDIwKHI1KQorCisJLyogTEFXQkFSNiwgTEFXQVI2ICovCisJbGlzICAgICByNixMQVdCQVI2QGgKKwlvcmkgICAgIHI2LHI2LExBV0JBUjZAbAorCXN0d3UgICAgcjYsIDB4MjAocjQpCisKKwlsaXMgICAgIHI2LExBV0FSNkBoCisJb3JpICAgICByNixyNixMQVdBUjZAbAorCXN0d3UgICAgcjYsIDB4MjAocjUpCisKKwkvKiBMQVdCQVI3LCBMQVdBUjcgKi8KKwlsaXMgICAgIHI2LExBV0JBUjdAaAorCW9yaSAgICAgcjYscjYsTEFXQkFSN0BsCisJc3R3dSAgICByNiwgMHgyMChyNCkKKworCWxpcyAgICAgcjYsTEFXQVI3QGgKKwlvcmkgICAgIHI2LHI2LExBV0FSN0BsCisJc3R3dSAgICByNiwgMHgyMChyNSkKKworCS8qIExBV0JBUjgsIExBV0FSOCAqLworCWxpcyAgICAgcjYsTEFXQkFSOEBoCisJb3JpICAgICByNixyNixMQVdCQVI4QGwKKwlzdHd1ICAgIHI2LCAweDIwKHI0KQorCisJbGlzICAgICByNixMQVdBUjhAaAorCW9yaSAgICAgcjYscjYsTEFXQVI4QGwKKwlzdHd1ICAgIHI2LCAweDIwKHI1KQorCisJLyogTEFXQkFSOSwgTEFXQVI5ICovCisJbGlzICAgICByNixMQVdCQVI5QGgKKwlvcmkgICAgIHI2LHI2LExBV0JBUjlAbAorCXN0d3UgICAgcjYsIDB4MjAocjQpCisKKwlsaXMgICAgIHI2LExBV0FSOUBoCisJb3JpICAgICByNixyNixMQVdBUjlAbAorCXN0d3UgICAgcjYsIDB4MjAocjUpCisKKwlibHIKKwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODY0MWhwY24vbXBjODY0MWhwY24uYyBiL2JvYXJkL21wYzg2NDFocGNuL21wYzg2NDFocGNuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjZjRhOQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg2NDFocGNuL21wYzg2NDFocGNuLmMKQEAgLTAsMCArMSw0MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqIEplZmYgQnJvd24KKyAqIFNyaWthbnRoIFNyaW5pdmFzYW4gKHNyaWthbnRoLnNyaW5pdmFzYW5AZnJlZXNjYWxlLmNvbSkKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIgU2NvdHQgTWNOdXR0IDxzbWNudXR0QGFydGVzeW5jcC5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ltbWFwXzg2eHguaD4KKyNpbmNsdWRlIDxzcGQuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKKyNpbmNsdWRlIDxmdF9idWlsZC5oPgorZXh0ZXJuIHZvaWQgZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKTsKKyNlbmRpZgorCisjaW5jbHVkZSAicGl4aXMuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKK2V4dGVybiB2b2lkIGRkcl9lbmFibGVfZWNjKHVuc2lnbmVkIGludCBkcmFtX3NpemUpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKQorI2luY2x1ZGUgInNwZF9zZHJhbS5oIgorI2VuZGlmCisKK3ZvaWQgc2RyYW1faW5pdCh2b2lkKTsKK2xvbmcgaW50IGZpeGVkX3NkcmFtKHZvaWQpOworCisKK2ludCBib2FyZF9lYXJseV9pbml0X2Yodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrYm9hcmQodm9pZCkKK3sKKwlwdXRzKCJCb2FyZDogTVBDODY0MUhQQ05cbiIpOworCisjaWZkZWYgQ09ORklHX1BDSQorCisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfQ0NTUkJBUjsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKKwl2b2xhdGlsZSBjY3NyX3BleF90ICpwZXgxID0gJmltbWFwLT5pbV9wZXgxOworCisJdWludCBkZXZkaXNyID0gZ3VyLT5kZXZkaXNyOworCXVpbnQgaW9fc2VsID0gKGd1ci0+cG9yZGV2c3IgJiBNUEM4Nnh4X1BPUkRFVlNSX0lPX1NFTCkgPj4gMTY7CisJdWludCBob3N0MV9hZ2VudCA9IChndXItPnBvcmJtc3IgJiBNUEM4Nnh4X1BPUkJNU1JfSEEpID4+IDE3OworCXVpbnQgcGV4MV9hZ2VudCA9IChob3N0MV9hZ2VudCA9PSAwKSB8fCAoaG9zdDFfYWdlbnQgPT0gMSk7CisKKwlpZiAoKGlvX3NlbCA9PSAyIHx8IGlvX3NlbCA9PSAzIHx8IGlvX3NlbCA9PSA1CisJICAgICB8fCBpb19zZWwgPT0gNiB8fCBpb19zZWwgPT0gNyB8fCBpb19zZWwgPT0gMHhGKQorCSAgICAmJiAhKGRldmRpc3IgJiBNUEM4Nnh4X0RFVkRJU1JfUENJRVgxKSkgeworCQlkZWJ1ZygiUENJLUVYUFJFU1MgMTogJXMgXG4iLCBwZXgxX2FnZW50ID8gIkFnZW50IiA6ICJIb3N0Iik7CisJCWRlYnVnKCIweCUwOHg9MHglMDh4ICIsICZwZXgxLT5wbWVfbXNnX2RldCwgcGV4MS0+cG1lX21zZ19kZXQpOworCQlpZiAocGV4MS0+cG1lX21zZ19kZXQpIHsKKwkJCXBleDEtPnBtZV9tc2dfZGV0ID0gMHhmZmZmZmZmZjsKKwkJCWRlYnVnKCIgd2l0aCBlcnJvcnMuICBDbGVhcmluZy4gIE5vdyAweCUwOHgiLAorCQkJICAgICAgcGV4MS0+cG1lX21zZ19kZXQpOworCQl9CisJCWRlYnVnKCJcbiIpOworCX0gZWxzZSB7CisJCXB1dHMoIlBDSS1FWFBSRVNTIDE6IERpc2FibGVkXG4iKTsKKwl9CisKKyNlbHNlCisJcHV0cygiUENJLUVYUFJFU1MxOiBEaXNhYmxlZFxuIik7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisKK2xvbmcgaW50Citpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKK3sKKwlsb25nIGRyYW1fc2l6ZSA9IDA7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKQorCWRyYW1fc2l6ZSA9IHNwZF9zZHJhbSgpOworI2Vsc2UKKwlkcmFtX3NpemUgPSBmaXhlZF9zZHJhbSgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19SQU1CT09UKQorCXB1dHMoIiAgICBERFI6ICIpOworCXJldHVybiBkcmFtX3NpemU7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKKwkvKgorCSAqIEluaXRpYWxpemUgYW5kIGVuYWJsZSBERFIgRUNDLgorCSAqLworCWRkcl9lbmFibGVfZWNjKGRyYW1fc2l6ZSk7CisjZW5kaWYKKworCXB1dHMoIiAgICBERFI6ICIpOworCXJldHVybiBkcmFtX3NpemU7Cit9CisKKworI2lmIGRlZmluZWQoQ0ZHX0RSQU1fVEVTVCkKK2ludAordGVzdGRyYW0odm9pZCkKK3sKKwl1aW50ICpwc3RhcnQgPSAodWludCAqKSBDRkdfTUVNVEVTVF9TVEFSVDsKKwl1aW50ICpwZW5kID0gKHVpbnQgKikgQ0ZHX01FTVRFU1RfRU5EOworCXVpbnQgKnA7CisKKwlwdXRzKCJTRFJBTSB0ZXN0IHBoYXNlIDE6XG4iKTsKKwlmb3IgKHAgPSBwc3RhcnQ7IHAgPCBwZW5kOyBwKyspCisJCSpwID0gMHhhYWFhYWFhYTsKKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykgeworCQlpZiAoKnAgIT0gMHhhYWFhYWFhYSkgeworCQkJcHJpbnRmKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLCAodWludCkgcCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXB1dHMoIlNEUkFNIHRlc3QgcGhhc2UgMjpcbiIpOworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykKKwkJKnAgPSAweDU1NTU1NTU1OworCisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CisJCWlmICgqcCAhPSAweDU1NTU1NTU1KSB7CisJCQlwcmludGYoIlNEUkFNIHRlc3QgZmFpbHMgYXQ6ICUwOHhcbiIsICh1aW50KSBwKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcHV0cygiU0RSQU0gdGVzdCBwYXNzZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKyNpZiAhZGVmaW5lZChDT05GSUdfU1BEX0VFUFJPTSkKKy8qCisgKiBGaXhlZCBzZHJhbSBpbml0IC0tIGRvZXNuJ3QgdXNlIHNlcmlhbCBwcmVzZW5jZSBkZXRlY3QuCisgKi8KK2xvbmcgaW50CitmaXhlZF9zZHJhbSh2b2lkKQoreworI2lmICFkZWZpbmVkKENGR19SQU1CT09UKQorCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyID0gJmltbWFwLT5pbV9kZHIxOworCisJZGRyLT5jczBfYm5kcyA9IENGR19ERFJfQ1MwX0JORFM7CisJZGRyLT5jczBfY29uZmlnID0gQ0ZHX0REUl9DUzBfQ09ORklHOworCWRkci0+ZXh0X3JlZnJlYyA9IENGR19ERFJfRVhUX1JFRlJFU0g7CisJZGRyLT50aW1pbmdfY2ZnXzAgPSBDRkdfRERSX1RJTUlOR18wOworCWRkci0+dGltaW5nX2NmZ18xID0gQ0ZHX0REUl9USU1JTkdfMTsKKwlkZHItPnRpbWluZ19jZmdfMiA9IENGR19ERFJfVElNSU5HXzI7CisJZGRyLT5zZHJhbV9tb2RlXzEgPSBDRkdfRERSX01PREVfMTsKKwlkZHItPnNkcmFtX21vZGVfMiA9IENGR19ERFJfTU9ERV8yOworCWRkci0+c2RyYW1faW50ZXJ2YWwgPSBDRkdfRERSX0lOVEVSVkFMOworCWRkci0+c2RyYW1fZGF0YV9pbml0ID0gQ0ZHX0REUl9EQVRBX0lOSVQ7CisJZGRyLT5zZHJhbV9jbGtfY250bCA9IENGR19ERFJfQ0xLX0NUUkw7CisJZGRyLT5zZHJhbV9vY2RfY250bCA9IENGR19ERFJfT0NEX0NUUkw7CisJZGRyLT5zZHJhbV9vY2Rfc3RhdHVzID0gQ0ZHX0REUl9PQ0RfU1RBVFVTOworCisjaWYgZGVmaW5lZCAoQ09ORklHX0REUl9FQ0MpCisJZGRyLT5lcnJfZGlzYWJsZSA9IDB4MDAwMDAwOEQ7CisJZGRyLT5lcnJfc2JlID0gMHgwMGZmMDAwMDsKKyNlbmRpZgorCWFzbSgic3luYztpc3luYyIpOworCisJdWRlbGF5KDUwMCk7CisKKyNpZiBkZWZpbmVkIChDT05GSUdfRERSX0VDQykKKwkvKiBFbmFibGUgRUNDIGNoZWNraW5nICovCisJZGRyLT5zZHJhbV9jZmdfMSA9IChDRkdfRERSX0NPTlRST0wgfCAweDIwMDAwMDAwKTsKKyNlbHNlCisJZGRyLT5zZHJhbV9jZmdfMSA9IENGR19ERFJfQ09OVFJPTDsKKwlkZHItPnNkcmFtX2NmZ18yID0gQ0ZHX0REUl9DT05UUk9MMjsKKyNlbmRpZgorCWFzbSgic3luYzsgaXN5bmMiKTsKKworCXVkZWxheSg1MDApOworI2VuZGlmCisJcmV0dXJuIENGR19TRFJBTV9TSVpFICogMTAyNCAqIDEwMjQ7Cit9CisjZW5kaWYJLyogIWRlZmluZWQoQ09ORklHX1NQRF9FRVBST00pICovCisKKworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKy8qCisgKiBJbml0aWFsaXplIFBDSSBEZXZpY2VzLCByZXBvcnQgZGV2aWNlcyBmb3VuZC4KKyAqLworCisjaWZuZGVmIENPTkZJR19QQ0lfUE5QCitzdGF0aWMgc3RydWN0IHBjaV9jb25maWdfdGFibGUgcGNpX2ZzbDg2eHhhZHNfY29uZmlnX3RhYmxlW10gPSB7CisJe1BDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJIFBDSV9JRFNFTF9OVU1CRVIsIFBDSV9BTllfSUQsCisJIHBjaV9jZmdmdW5jX2NvbmZpZ19kZXZpY2UsIHtQQ0lfRU5FVDBfSU9BRERSLAorCQkJCSAgICAgUENJX0VORVQwX01FTUFERFIsCisJCQkJICAgICBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVJ9fSwKKwl7fQorfTsKKyNlbmRpZgorCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgaG9zZSA9IHsKKyNpZm5kZWYgQ09ORklHX1BDSV9QTlAKKyAgICAgIGNvbmZpZ190YWJsZTpwY2lfbXBjODZ4eGN0c19jb25maWdfdGFibGUsCisjZW5kaWYKK307CisKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKK3ZvaWQgcGNpX2luaXRfYm9hcmQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJZXh0ZXJuIHZvaWQgcGNpX21wYzg2eHhfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOworCisJcGNpX21wYzg2eHhfaW5pdCgmaG9zZSk7CisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworfQorCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKK3ZvaWQKK2Z0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCXUzMiAqcDsKKwlpbnQgbGVuOworCisJZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKKworCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiL21lbW9yeS9yZWciLCAmbGVuKTsKKwlpZiAocCAhPSBOVUxMKSB7CisJCSpwKysgPSBjcHVfdG9fYmUzMihiZC0+YmlfbWVtc3RhcnQpOworCQkqcCA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zaXplKTsKKwl9Cit9CisjZW5kaWYKKworCit2b2lkCittcGM4NjQxX3Jlc2V0X2JvYXJkKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyIGNtZDsKKwl1bG9uZyB2YWw7CisJdWxvbmcgY29yZXBsbDsKKworCS8qCisJICogTm8gYXJncyBpcyBhIHNpbXBsZSByZXNldCByZXF1ZXN0LgorCSAqLworCWlmIChhcmdjIDw9IDEpIHsKKwkJb3V0OChQSVhJU19CQVNFICsgUElYSVNfUlNULCAwKTsKKwkJLyogbm90IHJlYWNoZWQgKi8KKwl9CisKKwljbWQgPSBhcmd2WzFdWzFdOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSAnZic6CQkvKiByZXNldCB3aXRoIGZyZXF1ZW5jeSBjaGFuZ2VkICovCisJCWlmIChhcmdjIDwgNSkKKwkJCWdvdG8gbXlfdXNhZ2U7CisJCXJlYWRfZnJvbV9weF9yZWdzKDApOworCisJCXZhbCA9IHNldF9weF9zeXNjbGsoc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTApKTsKKworCQljb3JlcGxsID0gc3RyZnJhY3RvaW50KGFyZ3ZbM10pOworCQl2YWwgPSB2YWwgKyBzZXRfcHhfY29yZXBsbChjb3JlcGxsKTsKKwkJdmFsID0gdmFsICsgc2V0X3B4X21weHBsbChzaW1wbGVfc3RydG91bChhcmd2WzRdLCBOVUxMLCAxMCkpOworCQlpZiAodmFsID09IDMpIHsKKwkJCXB1dHMoIlNldHRpbmcgcmVnaXN0ZXJzIFZDRkdFTjAgYW5kIFZDVExcbiIpOworCQkJcmVhZF9mcm9tX3B4X3JlZ3MoMSk7CisJCQlwdXRzKCJSZXNldHRpbmcgYm9hcmQgd2l0aCB2YWx1ZXMgZnJvbSBWU1BFRUQwLCBWU1BFRUQxLCBWQ0xLSCwgYW5kIFZDTEtMIC4uLi5cbiIpOworCQkJc2V0X3B4X2dvKCk7CisJCX0gZWxzZQorCQkJZ290byBteV91c2FnZTsKKworCQl3aGlsZSAoMSkgOwkvKiBOb3QgcmVhY2hlZCAqLworCisJY2FzZSAnbCc6CisJCWlmIChhcmd2WzJdWzFdID09ICdmJykgeworCQkJcmVhZF9mcm9tX3B4X3JlZ3MoMCk7CisJCQlyZWFkX2Zyb21fcHhfcmVnc19hbHRiYW5rKDApOworCQkJLyogcmVzZXQgd2l0aCBmcmVxdWVuY3kgY2hhbmdlZCAqLworCQkJdmFsID0gc2V0X3B4X3N5c2NsayhzaW1wbGVfc3RydG91bChhcmd2WzNdLCBOVUxMLCAxMCkpOworCisJCQljb3JlcGxsID0gc3RyZnJhY3RvaW50KGFyZ3ZbNF0pOworCQkJdmFsID0gdmFsICsgc2V0X3B4X2NvcmVwbGwoY29yZXBsbCk7CisJCQl2YWwgPSB2YWwgKyBzZXRfcHhfbXB4cGxsKHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbNV0sCisJCQkJCQkJCSBOVUxMLCAxMCkpOworCQkJaWYgKHZhbCA9PSAzKSB7CisJCQkJcHV0cygiU2V0dGluZyByZWdpc3RlcnMgVkNGR0VOMCwgVkNGR0VOMSwgVkJPT1QsIGFuZCBWQ1RMXG4iKTsKKwkJCQlzZXRfYWx0YmFuaygpOworCQkJCXJlYWRfZnJvbV9weF9yZWdzKDEpOworCQkJCXJlYWRfZnJvbV9weF9yZWdzX2FsdGJhbmsoMSk7CisJCQkJcHV0cygiRW5hYmxpbmcgd2F0Y2hkb2cgdGltZXIgb24gdGhlIEZQR0EgYW5kIHJlc2V0dGluZyBib2FyZCB3aXRoIHZhbHVlcyBmcm9tIFZTUEVFRDAsIFZTUEVFRDEsIFZDTEtILCBhbmQgVkNMS0wgdG8gYm9vdCBmcm9tIHRoZSBvdGhlciBiYW5rIC4uLi5cbiIpOworCQkJCXNldF9weF9nb193aXRoX3dhdGNoZG9nKCk7CisJCQl9IGVsc2UKKwkJCQlnb3RvIG15X3VzYWdlOworCisJCQl3aGlsZSAoMSkgOwkvKiBOb3QgcmVhY2hlZCAqLworCisJCX0gZWxzZSBpZiAoYXJndlsyXVsxXSA9PSAnZCcpIHsKKwkJCS8qCisJCQkgKiBSZXNldCBmcm9tIGFsdGVybmF0ZSBiYW5rIHdpdGhvdXQgY2hhbmdpbmcKKwkJCSAqIGZyZXF1ZW5jaWVzIGJ1dCB3aXRoIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQuCisJCQkgKi8KKwkJCXJlYWRfZnJvbV9weF9yZWdzKDApOworCQkJcmVhZF9mcm9tX3B4X3JlZ3NfYWx0YmFuaygwKTsKKwkJCXB1dHMoIlNldHRpbmcgcmVnaXN0ZXJzIFZDRkdFTjEsIFZCT09ULCBhbmQgVkNUTFxuIik7CisJCQlzZXRfYWx0YmFuaygpOworCQkJcmVhZF9mcm9tX3B4X3JlZ3NfYWx0YmFuaygxKTsKKwkJCXB1dHMoIkVuYWJsaW5nIHdhdGNoZG9nIHRpbWVyIG9uIHRoZSBGUEdBIGFuZCByZXNldHRpbmcgYm9hcmQgdG8gYm9vdCBmcm9tIHRoZSBvdGhlciBiYW5rLi4uLlxuIik7CisJCQlzZXRfcHhfZ29fd2l0aF93YXRjaGRvZygpOworCQkJd2hpbGUgKDEpIDsJLyogTm90IHJlYWNoZWQgKi8KKworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFJlc2V0IGZyb20gbmV4dCBiYW5rIHdpdGhvdXQgY2hhbmdpbmcKKwkJCSAqIGZyZXF1ZW5jeSBhbmQgd2l0aG91dCB3YXRjaGRvZyB0aW1lciBlbmFibGVkLgorCQkJICovCisJCQlyZWFkX2Zyb21fcHhfcmVncygwKTsKKwkJCXJlYWRfZnJvbV9weF9yZWdzX2FsdGJhbmsoMCk7CisJCQlpZiAoYXJnYyA+IDIpCisJCQkJZ290byBteV91c2FnZTsKKwkJCXB1dHMoIlNldHRpbmcgcmVnaXN0ZXJzIFZDRkdORTEsIFZCT09ULCBhbmQgVkNUTFxuIik7CisJCQlzZXRfYWx0YmFuaygpOworCQkJcmVhZF9mcm9tX3B4X3JlZ3NfYWx0YmFuaygxKTsKKwkJCXB1dHMoIlJlc2V0dGluZyBib2FyZCB0byBib290IGZyb20gdGhlIG90aGVyIGJhbmsuLi4uXG4iKTsKKwkJCXNldF9weF9nbygpOworCQl9CisKKwlkZWZhdWx0OgorCQlnb3RvIG15X3VzYWdlOworCX0KKworbXlfdXNhZ2U6CisJcHV0cygiXG5Vc2FnZTogcmVzZXQgY2YgPFNZU0NMSyBmcmVxPiA8Q09SRVBMTCByYXRpbz4gPE1QWFBMTCByYXRpbz5cbiIpOworCXB1dHMoIiAgICAgICByZXNldCBhbHRiYW5rIFtjZiA8U1lTQ0xLIGZyZXE+IDxDT1JFUExMIHJhdGlvPiA8TVBYUExMIHJhdGlvPl1cbiIpOworCXB1dHMoIiAgICAgICByZXNldCBhbHRiYW5rIFt3ZF1cbiIpOworCXB1dHMoIkZvciBleGFtcGxlOiAgIHJlc2V0IGNmIDQwIDIuNSAxMFxuIik7CisJcHV0cygiU2VlIE1QQzg2NDFIUENOIERlc2lnbiBXb3JrYm9vayBmb3IgdmFsaWQgdmFsdWVzIG9mIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLlxuIik7Cit9CisKKworLyoKKyAqIGdldF9ib2FyZF9zeXNfY2xrCisgKiAgICAgIFJlYWRzIHRoZSBGUEdBIG9uIGJvYXJkIGZvciBDT05GSUdfU1lTX0NMS19GUkVRCisgKi8KKwordW5zaWduZWQgbG9uZworZ2V0X2JvYXJkX3N5c19jbGsodWxvbmcgZHVtbXkpCit7CisJdTggaSwgZ29fYml0LCByZF9jbGtzOworCXVsb25nIHZhbCA9IDA7CisKKwlnb19iaXQgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCWdvX2JpdCAmPSAweDAxOworCisJcmRfY2xrcyA9IGluOChQSVhJU19CQVNFICsgUElYSVNfVkNGR0VOMCk7CisJcmRfY2xrcyAmPSAweDFDOworCisJLyoKKwkgKiBPbmx5IGlmIGJvdGggZ28gYml0IGFuZCB0aGUgU0NMSyBiaXQgaW4gVkNGR0VOMCBhcmUgc2V0CisJICogc2hvdWxkIHdlIGJlIHVzaW5nIHRoZSBBVVggcmVnaXN0ZXIuIFJlbWVtYmVyLCB3ZSBhbHNvIHNldCB0aGUKKwkgKiBHTyBiaXQgdG8gYm9vdCBmcm9tIHRoZSBhbHRlcm5hdGUgYmFuayBvbiB0aGUgb24tYm9hcmQgZmxhc2gKKwkgKi8KKworCWlmIChnb19iaXQpIHsKKwkJaWYgKHJkX2Nsa3MgPT0gMHgxYykKKwkJCWkgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX0FVWCk7CisJCWVsc2UKKwkJCWkgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1NQRCk7CisJfSBlbHNlIHsKKwkJaSA9IGluOChQSVhJU19CQVNFICsgUElYSVNfU1BEKTsKKwl9CisKKwlpICY9IDB4MDc7CisKKwlzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJCXZhbCA9IDMzMDAwMDAwOworCQlicmVhazsKKwljYXNlIDE6CisJCXZhbCA9IDQwMDAwMDAwOworCQlicmVhazsKKwljYXNlIDI6CisJCXZhbCA9IDUwMDAwMDAwOworCQlicmVhazsKKwljYXNlIDM6CisJCXZhbCA9IDY2MDAwMDAwOworCQlicmVhazsKKwljYXNlIDQ6CisJCXZhbCA9IDgzMDAwMDAwOworCQlicmVhazsKKwljYXNlIDU6CisJCXZhbCA9IDEwMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQl2YWwgPSAxMzQwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJdmFsID0gMTY2MDAwMDAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdmFsOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODY0MWhwY24vcGl4aXMuYyBiL2JvYXJkL21wYzg2NDFocGNuL3BpeGlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0YTE3YwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg2NDFocGNuL3BpeGlzLmMKQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgorICogSmVmZiBCcm93bgorICogU3Jpa2FudGggU3Jpbml2YXNhbiAoc3Jpa2FudGguc3Jpbml2YXNhbkBmcmVlc2NhbGUuY29tKQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDx3YXRjaGRvZy5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxtcGM4Nnh4Lmg+CisKKyNpbmNsdWRlICJwaXhpcy5oIgorCisKKy8qCisgKiBQZXIgdGFibGUgMjcsIHBhZ2UgNTggb2YgTVBDODY0MUhQQ04gc3BlYy4KKyAqLworaW50IHNldF9weF9zeXNjbGsodWxvbmcgc3lzY2xrKQoreworCXU4IHN5c2Nsa19zLCBzeXNjbGtfciwgc3lzY2xrX3YsIHZjbGtoLCB2Y2xrbCwgc3lzY2xrX2F1eDsKKworCXN3aXRjaCAoc3lzY2xrKSB7CisJY2FzZSAzMzoKKwkJc3lzY2xrX3MgPSAweDA0OworCQlzeXNjbGtfciA9IDB4MDQ7CisJCXN5c2Nsa192ID0gMHgwNzsKKwkJc3lzY2xrX2F1eCA9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgNDA6CisJCXN5c2Nsa19zID0gMHgwMTsKKwkJc3lzY2xrX3IgPSAweDFGOworCQlzeXNjbGtfdiA9IDB4MjA7CisJCXN5c2Nsa19hdXggPSAweDAxOworCQlicmVhazsKKwljYXNlIDUwOgorCQlzeXNjbGtfcyA9IDB4MDE7CisJCXN5c2Nsa19yID0gMHgxRjsKKwkJc3lzY2xrX3YgPSAweDJBOworCQlzeXNjbGtfYXV4ID0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSA2NjoKKwkJc3lzY2xrX3MgPSAweDAxOworCQlzeXNjbGtfciA9IDB4MDQ7CisJCXN5c2Nsa192ID0gMHgwNDsKKwkJc3lzY2xrX2F1eCA9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgODM6CisJCXN5c2Nsa19zID0gMHgwMTsKKwkJc3lzY2xrX3IgPSAweDFGOworCQlzeXNjbGtfdiA9IDB4NEI7CisJCXN5c2Nsa19hdXggPSAweDA0OworCQlicmVhazsKKwljYXNlIDEwMDoKKwkJc3lzY2xrX3MgPSAweDAxOworCQlzeXNjbGtfciA9IDB4MUY7CisJCXN5c2Nsa192ID0gMHg1QzsKKwkJc3lzY2xrX2F1eCA9IDB4MDU7CisJCWJyZWFrOworCWNhc2UgMTM0OgorCQlzeXNjbGtfcyA9IDB4MDY7CisJCXN5c2Nsa19yID0gMHgxRjsKKwkJc3lzY2xrX3YgPSAweDNCOworCQlzeXNjbGtfYXV4ID0gMHgwNjsKKwkJYnJlYWs7CisJY2FzZSAxNjY6CisJCXN5c2Nsa19zID0gMHgwNjsKKwkJc3lzY2xrX3IgPSAweDFGOworCQlzeXNjbGtfdiA9IDB4NEI7CisJCXN5c2Nsa19hdXggPSAweDA3OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVuc3VwcG9ydGVkIFNZU0NMSyBmcmVxdWVuY3kuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdmNsa2ggPSAoc3lzY2xrX3MgPDwgNSkgfCBzeXNjbGtfcjsKKwl2Y2xrbCA9IHN5c2Nsa192OworCisJb3V0OChQSVhJU19CQVNFICsgUElYSVNfVkNMS0gsIHZjbGtoKTsKKwlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQ0xLTCwgdmNsa2wpOworCisJb3V0OChQSVhJU19CQVNFICsgUElYSVNfQVVYLCBzeXNjbGtfYXV4KTsKKworCXJldHVybiAxOworfQorCisKK2ludCBzZXRfcHhfbXB4cGxsKHVsb25nIG1weHBsbCkKK3sKKwl1OCB0bXA7CisJdTggdmFsOworCisJc3dpdGNoIChtcHhwbGwpIHsKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgNjoKKwljYXNlIDg6CisJY2FzZSAxMDoKKwljYXNlIDEyOgorCWNhc2UgMTQ6CisJY2FzZSAxNjoKKwkJdmFsID0gKHU4KSBtcHhwbGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiVW5zdXBwb3J0ZWQgTVBYUExMIHJhdGlvLlxuIik7CisJCXJldHVybiAwOworCX0KKworCXRtcCA9IGluOChQSVhJU19CQVNFICsgUElYSVNfVlNQRUVEMSk7CisJdG1wID0gKHRtcCAmIDB4RjApIHwgKHZhbCAmIDB4MEYpOworCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1ZTUEVFRDEsIHRtcCk7CisKKwlyZXR1cm4gMTsKK30KKworCitpbnQgc2V0X3B4X2NvcmVwbGwodWxvbmcgY29yZXBsbCkKK3sKKwl1OCB0bXA7CisJdTggdmFsOworCisJc3dpdGNoICgoaW50KWNvcmVwbGwpIHsKKwljYXNlIDIwOgorCQl2YWwgPSAweDA4OworCQlicmVhazsKKwljYXNlIDI1OgorCQl2YWwgPSAweDBDOworCQlicmVhazsKKwljYXNlIDMwOgorCQl2YWwgPSAweDEwOworCQlicmVhazsKKwljYXNlIDM1OgorCQl2YWwgPSAweDFDOworCQlicmVhazsKKwljYXNlIDQwOgorCQl2YWwgPSAweDE0OworCQlicmVhazsKKwljYXNlIDQ1OgorCQl2YWwgPSAweDBFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVuc3VwcG9ydGVkIENPUkVQTEwgcmF0aW8uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdG1wID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19WU1BFRUQwKTsKKwl0bXAgPSAodG1wICYgMHhFMCkgfCAodmFsICYgMHgxRik7CisJb3V0OChQSVhJU19CQVNFICsgUElYSVNfVlNQRUVEMCwgdG1wKTsKKworCXJldHVybiAxOworfQorCisKK3ZvaWQgcmVhZF9mcm9tX3B4X3JlZ3MoaW50IHNldCkKK3sKKwl1OCBtYXNrID0gMHgxQzsKKwl1OCB0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDRkdFTjApOworCisJaWYgKHNldCkKKwkJdG1wID0gdG1wIHwgbWFzazsKKwllbHNlCisJCXRtcCA9IHRtcCAmIH5tYXNrOworCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1ZDRkdFTjAsIHRtcCk7Cit9CisKKwordm9pZCByZWFkX2Zyb21fcHhfcmVnc19hbHRiYW5rKGludCBzZXQpCit7CisJdTggbWFzayA9IDB4MDQ7CisJdTggdG1wID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19WQ0ZHRU4xKTsKKworCWlmIChzZXQpCisJCXRtcCA9IHRtcCB8IG1hc2s7CisJZWxzZQorCQl0bXAgPSB0bXAgJiB+bWFzazsKKwlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQ0ZHRU4xLCB0bXApOworfQorCisKK3ZvaWQgc2V0X2FsdGJhbmsodm9pZCkKK3sKKwl1OCB0bXA7CisKKwl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZCT09UKTsKKwl0bXAgXj0gMHg0MDsKKworCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1ZCT09ULCB0bXApOworfQorCisKK3ZvaWQgc2V0X3B4X2dvKHZvaWQpCit7CisJdTggdG1wOworCisJdG1wID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19WQ1RMKTsKKwl0bXAgPSB0bXAgJiAweDFFOworCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwsIHRtcCk7CisKKwl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCXRtcCA9IHRtcCB8IDB4MDE7CisJb3V0OChQSVhJU19CQVNFICsgUElYSVNfVkNUTCwgdG1wKTsKK30KKworCit2b2lkIHNldF9weF9nb193aXRoX3dhdGNoZG9nKHZvaWQpCit7CisJdTggdG1wOworCisJdG1wID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19WQ1RMKTsKKwl0bXAgPSB0bXAgJiAweDFFOworCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwsIHRtcCk7CisKKwl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCXRtcCA9IHRtcCB8IDB4MDk7CisJb3V0OChQSVhJU19CQVNFICsgUElYSVNfVkNUTCwgdG1wKTsKK30KKworCitpbnQgZGlzYWJsZV93YXRjaGRvZyhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1OCB0bXA7CisKKwl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCXRtcCA9IHRtcCAmIDB4MUU7CisJb3V0OChQSVhJU19CQVNFICsgUElYSVNfVkNUTCwgdG1wKTsKKworCS8qIHNldHRpbmcgVkNUTFtXREVOXSB0byAwIHRvIGRpc2FibGUgd2F0Y2ggZG9nICovCisJdG1wID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19WQ1RMKTsKKwl0bXAgJj0gfjB4MDg7CisJb3V0OChQSVhJU19CQVNFICsgUElYSVNfVkNUTCwgdG1wKTsKKworCXJldHVybiAwOworfQorCitVX0JPT1RfQ01EKAorCSAgIGRpc3dkLCAxLCAwLCBkaXNhYmxlX3dhdGNoZG9nLAorCSAgICJkaXN3ZAktIERpc2FibGUgd2F0Y2hkb2cgdGltZXIgXG4iLAorCSAgIE5VTEwpOworCisvKgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgbm9uLWludGVncmFsIGNwdTptcHggcGxsIHJhdGlvCisgKiBhbmQgY29udmVydHMgaXQgdG8gYW4gaW50ZWdlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGFzc2lnbgorICogRlBHQSByZWdpc3RlciB2YWx1ZXMuCisgKiBpbnB1dDogc3RycHRyIGkuZS4gYXJndlsyXQorICovCisKK3Vsb25nIHN0cmZyYWN0b2ludCh1Y2hhciAqc3RycHRyKQoreworCWludCBpLCBqLCByZXR2YWw7CisJaW50IG11bGNvbnN0OworCWludCBpbnRhcnJfbGVuID0gMCwgZGVjYXJyX2xlbiA9IDAsIG5vX2RlYyA9IDA7CisJdWxvbmcgaW50dmFsID0gMCwgZGVjdmFsID0gMDsKKwl1Y2hhciBpbnRhcnJbM10sIGRlY2FyclszXTsKKworCS8qIEFzc2lnbiB0aGUgaW50ZWdlciBwYXJ0IHRvIGludGFycltdCisJICogSWYgdGhlcmUgaXMgbm8gZGVjaW1hbCBwb2ludCBpLmUuCisJICogaWYgdGhlIHJhdGlvIGlzIGFuIGludGVncmFsIHZhbHVlCisJICogc2ltcGx5IGNyZWF0ZSB0aGUgaW50YXJyLgorCSAqLworCWkgPSAwOworCXdoaWxlIChzdHJwdHJbaV0gIT0gNDYpIHsKKwkJaWYgKHN0cnB0cltpXSA9PSAwKSB7CisJCQlub19kZWMgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJaW50YXJyW2ldID0gc3RycHRyW2ldOworCQlpKys7CisJfQorCisJLyogQXNzaWduIGxlbmd0aCBvZiBpbnRlZ2VyIHBhcnQgdG8gaW50YXJyX2xlbi4gKi8KKwlpbnRhcnJfbGVuID0gaTsKKwlpbnRhcnJbaV0gPSAnXDAnOworCisJaWYgKG5vX2RlYykgeworCQkvKiBDdXJyZW50bHkgbmVlZGVkIG9ubHkgZm9yIHNpbmdsZSBkaWdpdCBjb3JlcGxsIHJhdGlvcyAqLworCQltdWxjb25zdCA9IDEwOworCQlkZWN2YWwgPSAwOworCX0gZWxzZSB7CisJCWogPSAwOworCQlpKys7CQkvKiBTa2lwcGluZyB0aGUgZGVjaW1hbCBwb2ludCAqLworCQl3aGlsZSAoKHN0cnB0cltpXSA+IDQ3KSAmJiAoc3RycHRyW2ldIDwgNTgpKSB7CisJCQlkZWNhcnJbal0gPSBzdHJwdHJbaV07CisJCQlpKys7CisJCQlqKys7CisJCX0KKworCQlkZWNhcnJfbGVuID0gajsKKwkJZGVjYXJyW2pdID0gJ1wwJzsKKworCQltdWxjb25zdCA9IDE7CisJCWZvciAoaSA9IDA7IGkgPCBkZWNhcnJfbGVuOyBpKyspCisJCQltdWxjb25zdCAqPSAxMDsKKwkJZGVjdmFsID0gc2ltcGxlX3N0cnRvdWwoZGVjYXJyLCBOVUxMLCAxMCk7CisJfQorCisJaW50dmFsID0gc2ltcGxlX3N0cnRvdWwoaW50YXJyLCBOVUxMLCAxMCk7CisJaW50dmFsID0gaW50dmFsICogbXVsY29uc3Q7CisKKwlyZXR2YWwgPSBpbnR2YWwgKyBkZWN2YWw7CisKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODY0MWhwY24vcGl4aXMuaCBiL2JvYXJkL21wYzg2NDFocGNuL3BpeGlzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5YTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg2NDFocGNuL3BpeGlzLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworZXh0ZXJuIGludCBzZXRfcHhfc3lzY2xrKHVsb25nIHN5c2Nsayk7CitleHRlcm4gaW50IHNldF9weF9tcHhwbGwodWxvbmcgbXB4cGxsKTsKK2V4dGVybiBpbnQgc2V0X3B4X2NvcmVwbGwodWxvbmcgY29yZXBsbCk7CitleHRlcm4gdm9pZCByZWFkX2Zyb21fcHhfcmVncyhpbnQgc2V0KTsKK2V4dGVybiB2b2lkIHJlYWRfZnJvbV9weF9yZWdzX2FsdGJhbmsoaW50IHNldCk7CitleHRlcm4gdm9pZCBzZXRfYWx0YmFuayh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9weF9nbyh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9weF9nb193aXRoX3dhdGNoZG9nKHZvaWQpOworZXh0ZXJuIGludCBkaXNhYmxlX3dhdGNoZG9nKGNtZF90YmxfdCAqY21kdHAsCisJCQkgICAgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworZXh0ZXJuIHVsb25nIHN0cmZyYWN0b2ludCh1Y2hhciAqc3RycHRyKTsKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg2NDFocGNuL3N5c19lZXByb20uYyBiL2JvYXJkL21wYzg2NDFocGNuL3N5c19lZXByb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGUyYTNkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjODY0MWhwY24vc3lzX2VlcHJvbS5jCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKKyAqIFlvcmsgU3VuICh5b3Jrc3VuQGZyZWVzY2FsZS5jb20pCisgKiBIYWl5aW5nIFdhbmcgKGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tKQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8aTJjLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2lmZGVmIENGR19JRF9FRVBST00KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIGlkWzRdOwkJLyogMHgwMDAwIC0gMHgwMDAzICovCisJdW5zaWduZWQgY2hhciBzblsxMl07CQkvKiAweDAwMDQgLSAweDAwMEYgKi8KKwl1bnNpZ25lZCBjaGFyIGVycmF0YVs1XTsJLyogMHgwMDEwIC0gMHgwMDE0ICovCisJdW5zaWduZWQgY2hhciBkYXRlWzddOwkJLyogMHgwMDE1IC0gMHgwMDFhICovCisJdW5zaWduZWQgY2hhciByZXNfMVszN107CS8qIDB4MDAxYiAtIDB4MDAzZiAqLworCXVuc2lnbmVkIGNoYXIgdGFiX3NpemU7CQkvKiAweDAwNDAgKi8KKwl1bnNpZ25lZCBjaGFyIHRhYl9mbGFnOwkJLyogMHgwMDQxICovCisJdW5zaWduZWQgY2hhciBtYWNbOF1bNl07CS8qIDB4MDA0MiAtIDB4MDA3MSAqLworCXVuc2lnbmVkIGNoYXIgcmVzXzJbMTI2XTsJLyogMHgwMDcyIC0gMHgwMGVmICovCisJdW5zaWduZWQgaW50IGNyYzsJCS8qIDB4MDBmMCAtIDB4MDBmMyBjcmMzMiBjaGVja3N1bSAqLworfSBFRVBST01fZGF0YTsKKworc3RhdGljIEVFUFJPTV9kYXRhIG1hY19kYXRhOworCitpbnQgbWFjX3Nob3codm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIGV0aGFkZHJbOF1bMThdOworCisJcHJpbnRmKCJJRCAlYyVjJWMlY1xuIiwKKwkgICAgICAgbWFjX2RhdGEuaWRbMF0sCisJICAgICAgIG1hY19kYXRhLmlkWzFdLAorCSAgICAgICBtYWNfZGF0YS5pZFsyXSwKKwkgICAgICAgbWFjX2RhdGEuaWRbM10pOworCXByaW50ZigiRXJyYXRhICVjJWMlYyVjJWNcbiIsCisJICAgICAgIG1hY19kYXRhLmVycmF0YVswXSwKKwkgICAgICAgbWFjX2RhdGEuZXJyYXRhWzFdLAorCSAgICAgICBtYWNfZGF0YS5lcnJhdGFbMl0sCisJICAgICAgIG1hY19kYXRhLmVycmF0YVszXSwKKwkgICAgICAgbWFjX2RhdGEuZXJyYXRhWzRdKTsKKwlwcmludGYoIkRhdGUgJWMlYyVjJWMlYyVjJWNcbiIsCisJICAgICAgIG1hY19kYXRhLmRhdGVbMF0sCisJICAgICAgIG1hY19kYXRhLmRhdGVbMV0sCisJICAgICAgIG1hY19kYXRhLmRhdGVbMl0sCisJICAgICAgIG1hY19kYXRhLmRhdGVbM10sCisJICAgICAgIG1hY19kYXRhLmRhdGVbNF0sCisJICAgICAgIG1hY19kYXRhLmRhdGVbNV0sCisJICAgICAgIG1hY19kYXRhLmRhdGVbNl0pOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJc3ByaW50ZihldGhhZGRyW2ldLAorCQkJIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJCW1hY19kYXRhLm1hY1tpXVswXSwKKwkJCW1hY19kYXRhLm1hY1tpXVsxXSwKKwkJCW1hY19kYXRhLm1hY1tpXVsyXSwKKwkJCW1hY19kYXRhLm1hY1tpXVszXSwKKwkJCW1hY19kYXRhLm1hY1tpXVs0XSwKKwkJCW1hY19kYXRhLm1hY1tpXVs1XSk7CisJCXByaW50ZigiTUFDICVkICVzXG4iLCBpLCBldGhhZGRyW2ldKTsKKwl9CisKKwlzZXRlbnYoImV0aGFkZHIiLCBldGhhZGRyWzBdKTsKKwlzZXRlbnYoImV0aDFhZGRyIiwgZXRoYWRkclsxXSk7CisJc2V0ZW52KCJldGgyYWRkciIsIGV0aGFkZHJbMl0pOworCXNldGVudigiZXRoM2FkZHIiLCBldGhhZGRyWzNdKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWFjX3JlYWQodm9pZCkKK3sKKwlpbnQgcmV0LCBsZW5ndGg7CisJdW5zaWduZWQgaW50IGNyYyA9IDA7CisJdW5zaWduZWQgY2hhciBkZXYgPSBJRF9FRVBST01fQUREUiwgKmRhdGE7CisKKwlsZW5ndGggPSBzaXplb2YoRUVQUk9NX2RhdGEpOworCXJldCA9IGkyY19yZWFkKGRldiwgMCwgMSwgKHVuc2lnbmVkIGNoYXIgKikoJm1hY19kYXRhKSwgbGVuZ3RoKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiUmVhZCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKSgmbWFjX2RhdGEpOworCXByaW50ZigiQ2hlY2sgQ1JDIG9uIHJlYWRpbmcgLi4uIik7CisJY3JjID0gY3JjMzIoY3JjLCBkYXRhLCBsZW5ndGggLSA0KTsKKwlpZiAoY3JjICE9IG1hY19kYXRhLmNyYykgeworCQlwcmludGYoIkNSQyBjaGVja3N1bSBpcyBpbnZhbGlkLCBpbiBFRVBST00gQ1JDIGlzICV4LCBjYWxjdWxhdGVkIENSQyBpcyAleFxuIiwKKwkJICAgICBtYWNfZGF0YS5jcmMsIGNyYyk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlwcmludGYoIkNSQyBPS1xuIik7CisJCW1hY19zaG93KCk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgbWFjX3Byb2codm9pZCkKK3sKKwlpbnQgcmV0LCBpLCBsZW5ndGg7CisJdW5zaWduZWQgaW50IGNyYyA9IDA7CisJdW5zaWduZWQgY2hhciBkZXYgPSBJRF9FRVBST01fQUREUiwgKnB0cjsKKwl1bnNpZ25lZCBjaGFyICplZXByb21fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopKCZtYWNfZGF0YSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG1hY19kYXRhLnJlc18xKTsgaSsrKQorCQltYWNfZGF0YS5yZXNfMVtpXSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihtYWNfZGF0YS5yZXNfMik7IGkrKykKKwkJbWFjX2RhdGEucmVzXzJbaV0gPSAwOworCWxlbmd0aCA9IHNpemVvZihFRVBST01fZGF0YSk7CisJY3JjID0gY3JjMzIoY3JjLCBlZXByb21fZGF0YSwgbGVuZ3RoIC0gNCk7CisJbWFjX2RhdGEuY3JjID0gY3JjOworCWZvciAoaSA9IDAsIHB0ciA9IGVlcHJvbV9kYXRhOyBpIDwgbGVuZ3RoOyBpICs9IDgsIHB0ciArPSA4KSB7CisJCXJldCA9CisJCSAgICBpMmNfd3JpdGUoZGV2LCBpLCAxLCBwdHIsCisJCQkgICAgICAobGVuZ3RoIC0gaSkgPCA4ID8gKGxlbmd0aCAtIGkpIDogOCk7CisJCXVkZWxheSg1MDAwKTsJLyogNW1zIHdyaXRlIGN5Y2xlIHRpbWluZyAqLworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCWlmIChyZXQpIHsKKwkJcHJpbnRmKCJQcm9ncmFtbWluZyBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCXByaW50ZigiUHJvZ3JhbW1pbmcgJWQgYnl0ZXMuIFJlYWRpbmcgYmFjayAuLi5cbiIsIGxlbmd0aCk7CisJCW1hY19yZWFkKCk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZG9fbWFjKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgaTsKKwljaGFyIGNtZCA9ICdzJzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWFjX3ZhbDsKKworCWlmIChpMmNfcHJvYmUoSURfRUVQUk9NX0FERFIpICE9IDApCisJCXJldHVybiAtMTsKKworCWlmIChhcmdjID4gMSkgeworCQljbWQgPSBhcmd2WzFdWzBdOworCQlzd2l0Y2ggKGNtZCkgeworCQljYXNlICdyJzoJLyogZGlzcGxheSAqLworCQkJbWFjX3JlYWQoKTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoJLyogc2F2ZSAqLworCQkJbWFjX3Byb2coKTsKKwkJCWJyZWFrOworCQljYXNlICdpJzoJLyogaWQgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQltYWNfZGF0YS5pZFtpXSA9IGFyZ3ZbMl1baV07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnbic6CS8qIHNlcmlhbCBudW1iZXIgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCQkJbWFjX2RhdGEuc25baV0gPSBhcmd2WzJdW2ldOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgkvKiBlcnJhdGEgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCQltYWNfZGF0YS5lcnJhdGFbaV0gPSBhcmd2WzJdW2ldOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgkvKiBkYXRlICovCisJCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCQkJbWFjX2RhdGEuZGF0ZVtpXSA9IGFyZ3ZbMl1baV07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncCc6CS8qIG51bWJlciBvZiBwb3J0cyAqLworCQkJbWFjX2RhdGEudGFiX3NpemUgPQorCQkJICAgICh1bnNpZ25lZCBjaGFyKXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwkJCWJyZWFrOworCQljYXNlICcwJzoJLyogbWFjIDAgKi8KKwkJY2FzZSAnMSc6CS8qIG1hYyAxICovCisJCWNhc2UgJzInOgkvKiBtYWMgMiAqLworCQljYXNlICczJzoJLyogbWFjIDMgKi8KKwkJY2FzZSAnNCc6CS8qIG1hYyA0ICovCisJCWNhc2UgJzUnOgkvKiBtYWMgNSAqLworCQljYXNlICc2JzoJLyogbWFjIDYgKi8KKwkJY2FzZSAnNyc6CS8qIG1hYyA3ICovCisJCQltYWNfdmFsID0gc2ltcGxlX3N0cnRvdWxsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJCQltYWNfZGF0YS5tYWNbY21kIC0gJzAnXVtpXSA9CisJCQkJICAgICooKHVuc2lnbmVkIGNoYXIgKikKKwkJCQkgICAgICAoKCh1bnNpZ25lZCBpbnQpKCZtYWNfdmFsKSkgKyBpICsgMikpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgkvKiBoZWxwICovCisJCWRlZmF1bHQ6CisJCQlwcmludGYoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCW1hY19zaG93KCk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgbWFjX3JlYWRfZnJvbV9lZXByb20odm9pZCkKK3sKKwlpbnQgbGVuZ3RoLCBpOworCXVuc2lnbmVkIGNoYXIgZGV2ID0gSURfRUVQUk9NX0FERFI7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGV0aGFkZHJbNF1bMThdOworCXVuc2lnbmVkIGNoYXIgZW5ldHZhclszMl07CisJdW5zaWduZWQgaW50IGNyYyA9IDA7CisKKwlsZW5ndGggPSBzaXplb2YoRUVQUk9NX2RhdGEpOworCWlmIChpMmNfcmVhZChkZXYsIDAsIDEsICh1bnNpZ25lZCBjaGFyICopKCZtYWNfZGF0YSksIGxlbmd0aCkpIHsKKwkJcHJpbnRmKCJSZWFkIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopKCZtYWNfZGF0YSk7CisJY3JjID0gY3JjMzIoY3JjLCBkYXRhLCBsZW5ndGggLSA0KTsKKwlpZiAoY3JjICE9IG1hY19kYXRhLmNyYykgeworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJaWYgKG1lbWNtcCgmbWFjX2RhdGEubWFjW2ldLCAiXDBcMFwwXDBcMFwwIiwgNikpIHsKKwkJCQlzcHJpbnRmKGV0aGFkZHJbaV0sCisJCQkJCSIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsCisJCQkJCW1hY19kYXRhLm1hY1tpXVswXSwKKwkJCQkJbWFjX2RhdGEubWFjW2ldWzFdLAorCQkJCQltYWNfZGF0YS5tYWNbaV1bMl0sCisJCQkJCW1hY19kYXRhLm1hY1tpXVszXSwKKwkJCQkJbWFjX2RhdGEubWFjW2ldWzRdLAorCQkJCQltYWNfZGF0YS5tYWNbaV1bNV0pOworCQkJCXNwcmludGYoZW5ldHZhciwKKwkJCQkJaSA/ICJldGglZGFkZHIiIDogImV0aGFkZHIiLAorCQkJCQlpKTsKKwkJCQlzZXRlbnYoZW5ldHZhciwgZXRoYWRkcltpXSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ0ZHX0lEX0VFUFJPTSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODY0MWhwY24vdS1ib290LmxkcyBiL2JvYXJkL21wYzg2NDFocGNuL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0ZGU4ZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzg2NDFocGNuL3UtYm9vdC5sZHMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQsIEZyZWVzY2FsZSwgSW5jLgorICogKEMpIENvcHlyaWdodCAyMDAyLDIwMDMsIE1vdG9yb2xhLEluYy4KKyAqIEplZmYgQnJvd24KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC5yZXNldHZlYyAweEZGRjAwMTAwIDoKKyAgeworICAgICooLnJlc2V0dmVjKQorICB9ID0gMHhmZmZmCisKKyAgLmJvb3RwZyAweEZGRjcwMDAwIDoKKyAgeworICAgIGNwdS9tcGM4Nnh4L3N0YXJ0Lm8JKC5ib290cGcpCisgICAgYm9hcmQvbXBjODY0MWhwY24vaW5pdC5vICguYm9vdHBnKQorICB9ID0gMHhmZmZmCisKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIDEwMjQ7CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KKyAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KKyAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KKyAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQorICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQorICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9CisgIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9CisgIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQorICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9CisgIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQorICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9CisgIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KKyAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KKyAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQorICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQorICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KKyAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQorICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KKyAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQorICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQorICAucGx0IDogeyAqKC5wbHQpIH0KKyAgLnRleHQgICAgICA6CisgIHsKKyAgICBjcHUvbXBjODZ4eC9zdGFydC5vCSgudGV4dCkKKyAgICBib2FyZC9tcGM4NjQxaHBjbi9pbml0Lm8gKC50ZXh0KQorICAgIGNwdS9tcGM4Nnh4L3RyYXBzLm8gKC50ZXh0KQorICAgIGNwdS9tcGM4Nnh4L2ludGVycnVwdHMubyAoLnRleHQpCisgICAgY3B1L21wYzg2eHgvY3B1X2luaXQubyAoLnRleHQpCisgICAgY3B1L21wYzg2eHgvY3B1Lm8gKC50ZXh0KQorICAgIGNwdS9tcGM4Nnh4L3NwZWVkLm8gKC50ZXh0KQorICAgIGNwdS9tcGM4Nnh4L3BjaS5vICgudGV4dCkKKyAgICBjb21tb24vZGxtYWxsb2MubyAoLnRleHQpCisgICAgbGliX2dlbmVyaWMvY3JjMzIubyAoLnRleHQpCisgICAgbGliX3BwYy9leHRhYmxlLm8gKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL3psaWIubyAoLnRleHQpCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICAgfQorICAgIF9ldGV4dCA9IC47CisgICAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgICAucm9kYXRhICAgIDoKKyAgIHsKKyAgICAqKC5yb2RhdGEpCisgICAgKigucm9kYXRhMSkKKyAgICAqKC5yb2RhdGEuc3RyMS40KQorICB9CisgIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKKyAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQorICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9CisKKyAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCisgIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOworICBfZXJvdGV4dCA9IC47CisgIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKKyAgLnJlbG9jICAgOgorICB7CisgICAgKiguZ290KQorICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgKiguZ290MikKKyAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAqKC5maXh1cCkKKyAgfQorICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PiAyOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pID4+IDI7CisKKyAgLmRhdGEgICAgOgorICB7CisgICAgKiguZGF0YSkKKyAgICAqKC5kYXRhMSkKKyAgICAqKC5zZGF0YSkKKyAgICAqKC5zZGF0YTIpCisgICAgKiguZHluYW1pYykKKyAgICBDT05TVFJVQ1RPUlMKKyAgfQorICBfZWRhdGEgID0gIC47CisgIFBST1ZJREUgKGVkYXRhID0gLik7CisKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvbWlwNDA1L01ha2VmaWxlIGIvYm9hcmQvbXBsL21pcDQwNS9NYWtlZmlsZQppbmRleCA5Mjc2ZjY0Li44N2U1MDdlIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvbWlwNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL21wbC9taXA0MDUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTQgKzIyLDIxIEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyAuLi9jb21tb24vZmxhc2gubyBjbWRfbWlwNDA1Lm8gLi4vY29tbW9uL3BjaS5vIFwKK0NPQkpTCT0gJChCT0FSRCkubyAuLi9jb21tb24vZmxhc2gubyBjbWRfbWlwNDA1Lm8gLi4vY29tbW9uL3BjaS5vIFwKIAkJCS4uL2NvbW1vbi91c2JfdWhjaS5vIC4uL2NvbW1vbi9tZW10c3QubyAuLi9jb21tb24vY29tbW9uX3V0aWwubwogCiBTT0JKUwk9IGluaXQubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKwogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIApAQCAtNDEsOSArNDgsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvcGF0aS9NYWtlZmlsZSBiL2JvYXJkL21wbC9wYXRpL01ha2VmaWxlCmluZGV4IDFhOWNlMTIuLmM0NjllM2YgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9wYXRpL01ha2VmaWxlCisrKyBiL2JvYXJkL21wbC9wYXRpL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEJV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZQotIworIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAjIHByb2plY3QuCkBAIC0yMiwxNCArMjIsMjAgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gIHBhdGkubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vbWVtdHN0Lm8gY21kX3BhdGkubyAuLi9jb21tb24vY29tbW9uX3V0aWwubworQ09CSlMJOj0gIHBhdGkubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vbWVtdHN0Lm8gY21kX3BhdGkubyAuLi9jb21tb24vY29tbW9uX3V0aWwubwogIyMjIyBjbWRfcGF0aS5vCi1TT0JKUwk6PQogCi0kKExJQik6CSQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtNDAsOSArNDYsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9waXA0MDUvTWFrZWZpbGUgYi9ib2FyZC9tcGwvcGlwNDA1L01ha2VmaWxlCmluZGV4IGE4MThkMDguLjgzMzkwMGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9waXA0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvbXBsL3BpcDQwNS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxMCArMjIsMTMgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIFwKK0NPQkpTCT0gJChCT0FSRCkubyBcCiAJICAuLi9jb21tb24vZmxhc2gubyBjbWRfcGlwNDA1Lm8gLi4vY29tbW9uL3BjaS5vIFwKIAkgIC4uL2NvbW1vbi9pc2EubyAuLi9jb21tb24va2JkLm8gXAogCSAgLi4vY29tbW9uL3VzYl91aGNpLm8gXApAQCAtMzMsNiArMzYsMTAgQEAKIAogU09CSlMJPSBpbml0Lm8KIAorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKQEAgLTQ0LDkgKzUxLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3ZjbWE5L01ha2VmaWxlIGIvYm9hcmQvbXBsL3ZjbWE5L01ha2VmaWxlCmluZGV4IDMwNGM5NjUuLmJkNzZlNzQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC92Y21hOS9NYWtlZmlsZQorKysgYi9ib2FyZC9tcGwvdmNtYTkvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTUgKzIyLDIyIEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHZjbWE5Lm8gZmxhc2gubyBjbWRfdmNtYTkubwotT0JKUwkrPSAuLi9jb21tb24vY29tbW9uX3V0aWwubyAuLi9jb21tb24vbWVtdHN0Lm8KK0NPQkpTCTo9IHZjbWE5Lm8gZmxhc2gubyBjbWRfdmNtYTkubworQ09CSlMJKz0gLi4vY29tbW9uL2NvbW1vbl91dGlsLm8gLi4vY29tbW9uL21lbXRzdC5vCiAKIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtNDEsOSArNDgsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL211c2Vua2kvTWFrZWZpbGUgYi9ib2FyZC9tdXNlbmtpL01ha2VmaWxlCmluZGV4IDI0ZGMwMjYuLjFiNTdkMmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL211c2Vua2kvTWFrZWZpbGUKKysrIGIvYm9hcmQvbXVzZW5raS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOSArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwotU09CSlMJPQorQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL212Ymx1ZS9NYWtlZmlsZSBiL2JvYXJkL212Ymx1ZS9NYWtlZmlsZQppbmRleCAyNGRjMDI2Li4xYjU3ZDJiIDEwMDY0NAotLS0gYS9ib2FyZC9tdmJsdWUvTWFrZWZpbGUKKysrIGIvYm9hcmQvbXZibHVlL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE5ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCi1TT0JKUwk9CitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXZzMS9NYWtlZmlsZSBiL2JvYXJkL212czEvTWFrZWZpbGUKaW5kZXggMTNjZTlmYy4uZTNkMjRiMyAxMDA2NDQKLS0tIGEvYm9hcmQvbXZzMS9NYWtlZmlsZQorKysgYi9ib2FyZC9tdnMxL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXgxYWRzL01ha2VmaWxlIGIvYm9hcmQvbXgxYWRzL01ha2VmaWxlCmluZGV4IDNlODA1ZmUuLjk2ZTViZTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL214MWFkcy9NYWtlZmlsZQorKysgYi9ib2FyZC9teDFhZHMvTWFrZWZpbGUKQEAgLTEsNiArMSw5IEBACiAjCiAjIGJvYXJkL214MWFkcy9NYWtlZmlsZQogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKGMpIENvcHlyaWdodCAyMDA0CiAjIFRlY2h3YXJlIEluZm9ybWF0aW9uIFRlY2hub2xvZ3ksIEluYy4KICMgaHR0cDovL3d3dy50ZWNod2FyZS5jb20udHcvCkBAIC0yNCwxMiArMjcsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBteDFhZHMubyBzeW5jZmxhc2gubworQ09CSlMJOj0gbXgxYWRzLm8gc3luY2ZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtNDAsOSArNDcsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL214MWZzMi9NYWtlZmlsZSBiL2JvYXJkL214MWZzMi9NYWtlZmlsZQppbmRleCA5ZTNiY2ExLi4yYTE3ZjgyIDEwMDY0NAotLS0gYS9ib2FyZC9teDFmczIvTWFrZWZpbGUKKysrIGIvYm9hcmQvbXgxZnMyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTMgKzIzLDE3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gbXgxZnMyLm8gZmxhc2gubworQ09CSlMJOj0gbXgxZnMyLm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL25jNjUwL01ha2VmaWxlIGIvYm9hcmQvbmM2NTAvTWFrZWZpbGUKaW5kZXggOGRjNDkzNC4uZjA0NDcyNyAxMDA2NDQKLS0tIGEvYm9hcmQvbmM2NTAvTWFrZWZpbGUKKysrIGIvYm9hcmQvbmM2NTAvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAjCiAjIChDKSBDb3B5cmlnaHQgMjAwNiBEZXRsZXYgWnVuZGVsLCBkenVAZGVueC5kZQotIyAoQykgQ29weXJpZ2h0IDIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDA0LTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI0LDE4ICsyNCwyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBuYW5kLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIG5hbmQubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9uYzY1MC9jb25maWcubWsgYi9ib2FyZC9uYzY1MC9jb25maWcubWsKaW5kZXggNWIyMjg0YS4uNTJjOGZmZSAxMDA2NDQKLS0tIGEvYm9hcmQvbmM2NTAvY29uZmlnLm1rCisrKyBiL2JvYXJkL25jNjUwL2NvbmZpZy5tawpAQCAtMjcsNCArMjcsNCBAQAogIwogCiBURVhUX0JBU0UgPSAweDQwNzAwMDAwCi1CT0FSRExJQlMgPSBkcml2ZXJzL25hbmQvbGlibmFuZC5hCitCT0FSRExJQlMgPSAkKG9iailkcml2ZXJzL25hbmQvbGlibmFuZC5hCmRpZmYgLS1naXQgYS9ib2FyZC9uZXRwaG9uZS9NYWtlZmlsZSBiL2JvYXJkL25ldHBob25lL01ha2VmaWxlCmluZGV4IGIzYzE3OTcuLmE4YjIxNTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHBob25lL01ha2VmaWxlCisrKyBiL2JvYXJkL25ldHBob25lL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gcGhvbmVfY29uc29sZS5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBwaG9uZV9jb25zb2xlLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHN0YXIvTWFrZWZpbGUgYi9ib2FyZC9uZXRzdGFyL01ha2VmaWxlCmluZGV4IDNhMjA1MDEuLmI3YzA5MmQgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHN0YXIvTWFrZWZpbGUKKysrIGIvYm9hcmQvbmV0c3Rhci9NYWtlZmlsZQpAQCAtMSwzICsxLDYgQEAKKyMgCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyAoQykgQ29weXJpZ2h0IDIwMDUKICMgTGFkaXNsYXYgTWljaGwsIDJOIFRlbGVrb211bmlrYWNlLCBtaWNobEAybi5jegpAQCAtMjMsNjMgKzI2LDcxIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gbmV0c3Rhci5vIGZsYXNoLm8gbmFuZC5vCitDT0JKUwk6PSBuZXRzdGFyLm8gZmxhc2gubyBuYW5kLm8KIFNPQkpTCTo9IHNldHVwLm8gY3JjZWsubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpIGVlcHJvbS5jIFwKKwkJZWVwcm9tX3N0YXJ0LlMKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiBnY2NsaWJkaXIgOj0gJChzaGVsbCBkaXJuYW1lIGAkKENDKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZWApCiAKIExPQURfQUREUiA9IDB4MTA0MDAwMDAKIExEU0NSSVBUID0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL2VlcHJvbS5sZHMKK2xuayA9ICQoaWYgJChvYmopLCQob2JqKSwuKQogCiBIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCiAKLWFsbDoJJChMSUIpIGVlcHJvbS5zcmVjIGVlcHJvbS5iaW4gY3JjZWsuc3JlYyBjcmNlay5iaW4gY3JjaXQKK2FsbDoJJChvYmopLmRlcGVuZCAkKExJQikgJChvYmopZWVwcm9tLnNyZWMgJChvYmopZWVwcm9tLmJpbiBcCisJCSQob2JqKWNyY2VrLnNyZWMgJChvYmopY3JjZWsuYmluICQob2JqKWNyY2l0CiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkXgogCi1lZXByb20uc3JlYzoJZWVwcm9tLm8gZWVwcm9tX3N0YXJ0Lm8KLQkkKExEKSAtVCAkKExEU0NSSVBUKSAtZyAtVHRleHQgJChMT0FEX0FERFIpIFwKLQkJLW8gJCg8Oi5vPSkgLWUgJCg8Oi5vPSkgJF4gXAotCQktTC4uLy4uL2V4YW1wbGVzIC1sc3R1YnMgXAotCQktTC4uLy4uL2xpYl9nZW5lcmljIC1sZ2VuZXJpYyBcCiskKG9iaillZXByb20uc3JlYzoJJChvYmopZWVwcm9tLm8gJChvYmopZWVwcm9tX3N0YXJ0Lm8KKwljZCAkKGxuaykgJiYgJChMRCkgLVQgJChMRFNDUklQVCkgLWcgLVR0ZXh0ICQoTE9BRF9BRERSKSBcCisJCS1vICQoPDoubz0pIC1lIGVlcHJvbSBlZXByb20ubyBlZXByb21fc3RhcnQubyBcCisJCS1MJChvYmopLi4vLi4vZXhhbXBsZXMgLWxzdHVicyBcCisJCS1MJChvYmopLi4vLi4vbGliX2dlbmVyaWMgLWxnZW5lcmljIFwKIAkJLUwkKGdjY2xpYmRpcikgLWxnY2MKIAkkKE9CSkNPUFkpIC1PIHNyZWMgJCg8Oi5vPSkgJEAKIAotZWVwcm9tLmJpbjoJZWVwcm9tLnNyZWMKKyQob2JqKWVlcHJvbS5iaW46CSQob2JqKWVlcHJvbS5zcmVjCiAJJChPQkpDT1BZKSAtSSBzcmVjIC1PIGJpbmFyeSAkPCAkQCAyPi9kZXYvbnVsbAogCi1jcmNlay5zcmVjOgljcmNlay5vCiskKG9iailjcmNlay5zcmVjOgkkKG9iailjcmNlay5vCiAJJChMRCkgLWcgLVR0ZXh0IDB4MDAwMDAwMDAgXAotCQktbyAkKDw6Lm89KSAtZSAkKDw6Lm89KSAkXgorCQktbyAkKDw6Lm89KSAtZSBjcmNlayAkXgogCSQoT0JKQ09QWSkgLU8gc3JlYyAkKDw6Lm89KSAkQAogCi1jcmNlay5iaW46CWNyY2VrLnNyZWMKKyQob2JqKWNyY2VrLmJpbjoJJChvYmopY3JjZWsuc3JlYwogCSQoT0JKQ09QWSkgLUkgc3JlYyAtTyBiaW5hcnkgJDwgJEAgMj4vZGV2L251bGwKIAotY3JjaXQ6CQljcmNpdC5vIGNyYzMyLm8KKyQob2JqKWNyY2l0OgkJJChvYmopY3JjaXQubyAkKG9iailjcmMzMi5vCiAJJChIT1NUQ0MpICQoSE9TVF9DRkxBR1MpIC1vICRAICReCiAKLWNyY2l0Lm86CWNyY2l0LmMKLQkkKEhPU1RDQykgJChIT1NUX0NGTEFHUykgLWMgJDwKKyQob2JqKWNyY2l0Lm86CWNyY2l0LmMKKwkkKEhPU1RDQykgJChIT1NUX0NGTEFHUykgLW8gJEAgLWMgJDwKIAotY3JjMzIubzoJJChUT1BESVIpL3Rvb2xzL2NyYzMyLmMKLQkkKEhPU1RDQykgJChIT1NUX0NGTEFHUykgLURVU0VfSE9TVENDIC1jICQ8CiskKG9iailjcmMzMi5vOgkkKE9CSlRSRUUpL3Rvb2xzL2NyYzMyLmMKKwkkKEhPU1RDQykgJChIT1NUX0NGTEFHUykgLURVU0VfSE9TVENDIC1vICRAIC1jICQ8CiAKIGNsZWFuOgotCXJtIC1mICQoU09CSlMpICQoT0JKUykgZWVwcm9tIGVlcHJvbS5zcmVjIGVlcHJvbS5iaW4gXAotCQljcmNlayBjcmNlay5zcmVjIGNyY2VrLmJpbgorCXJtIC1mICQoU09CSlMpICQoT0JKUykgJChvYmopZWVwcm9tICQob2JqKWVlcHJvbS5zcmVjIFwKKwkJJChvYmopZWVwcm9tLmJpbiAkKG9iailjcmNlayAkKG9iailjcmNlay5zcmVjIFwKKwkJJChvYmopY3JjZWsuYmluCiAKIGRpc3RjbGVhbjoJY2xlYW4KIAlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbmV0c3Rhci9jcmNlay5TIGIvYm9hcmQvbmV0c3Rhci9jcmNlay5TCmluZGV4IDZjYTRkMTEuLmE3NGFiZjkgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHN0YXIvY3JjZWsuUworKysgYi9ib2FyZC9uZXRzdGFyL2NyY2VrLlMKQEAgLTEzLDYgKzEzLDcgQEAKICAqCXUzMiAtIGNyYzMyCiAgKi8KIAorI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgImNyY2VrLmgiCiAKIC8qKgpAQCAtMzksNyArNDAsNyBAQAogCS5tYWNybyBjcmN1aiwgb2Zmc2V0LCBzaXplCiAJbW92CXIwLCAjMAogCWxkcglyMSwgXG9mZnNldAotCWxkcglyMiwgW3IxXQorCWxkcglyMiwgW3IxXSwgIzQKIAljbXAJcjIsIHIwCQlAIG5vIGRhdGEsIG5vIHByb2JsZW0KIAliZXEJMmYKIAl0c3QJcjIsICMzCQlAIHVuYWxpZ25lZCBzaXplCkBAIC00Nyw3ICs0OCw2IEBACiAJbGRyCXIzLCBcc2l6ZQogCWNtcAlyMiwgcjMJCUAgYm9ndXMgc2l6ZQogCWJoaQkyZgotCWFkZAlyMSwgcjEsICM0CiAJZG9fY3JjMzIKIAlsZHIJcjEsIFtyMV0KIDI6CkBAIC01NSwxNiArNTUsNzEgQEAKIAkuZW5kbQogCiAJLm1hY3JvIHdhaXQsIHJlZwotCW1vdglccmVnLCAjMHgxMDAwCisJbW92CVxyZWcsICMweDEwMDAwMAogMzoKIAlzdWJzCVxyZWcsIFxyZWcsICMweDEKIAlibmUgCTNiCi0KIAkuZW5kbQorCiAudGV4dAogLmdsb2JsIGNyY2VrCiBjcmNlazoKLQliCWNyYzJfYmFkCisJLyogRW5hYmxlIEktY2FjaGUgKi8KKwltcmMJcDE1LCAwLCByMSwgYzAsIGMwLCAwCQlAIHJlYWQgQzE1IElEIHJlZ2lzdGVyCisJbXJjCXAxNSwgMCwgcjEsIGMwLCBjMCwgMQkJQCByZWFkIEMxNSBDYWNoZSBpbmZvcm1hdGlvbiByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDAJCUAgcmVhZCBDMTUgQ29udHJvbCByZWdpc3RlcgorCW9ycglyMSwgcjEsICMweDEwMDAJCQlAIGVuYWJsZSBJLWNhY2hlLCBtYXAgaW50ZXJydXB0IHZlY3RvciAweGZmZmYwMDAwCisJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAkJQCB3cml0ZSBDMTUgQ29udHJvbCByZWdpc3RlcgorCW1vdglyMSwgIzB4MDAKKwltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCAwCQlAIEZsdXNoIEktY2FjaGUKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKworCS8qIFNldHVwIGNsb2NraW5nIG1vZGUgKi8KKwlsZHIJcjAsIE1QVV9DTEtNX0JBU0UJCUAgYmFzZSBvZiBDTE9DSyB1bml0CisJbGRyaAlyMSwgW3IwLCAjMHgxOF0JCQlAIEFSTV9TWVNUIC0gZ2V0IHJlc2V0IHN0YXR1cworCWJpYwlyMSwgcjEsICMoNyA8PCAxMSkJCUAgY2xlYXIgY2xvY2sgc2VsZWN0CisJb3JyCXIxLCByMSwgIygyIDw8IDExKQkJQCBzZXQgc3luY2hyb25vdXMgc2NhbGFibGUKKwltb3YJcjIsICMwCitsb29wOgorCWNtcAlyMiwgIzEJCQkJQCB0aGlzIGxvb3Agd2lsbCB3YWl0IGZvciBhdCBsZWFzdCAxMDAgY3ljbGVzCisJc3RyZXFoCXIxLCBbcjAsICMweDE4XQkJCUAgYmVmb3JlIGlzc3VpbmcgbmV4dCByZXF1ZXN0IGZyb20gTVBVCisJYWRkCXIyLCByMiwgIzEJCQlAIG9uIHRoZSAxc3QgcnVuIGNvZGUgaXMgbG9hZGVkIGludG8gSS1jYWNoZQorCWNtcAlyMiwgIzE2CQkJCUAgYW5kIHNlY29uZCBydW4gd2lsbCBzZXQgY2xvY2tpbmcgbW9kZQorCWJuZQlsb29wCisJbm9wCisKKwkvKiBTZXR1cCBjbG9jayBkaXZpZGVycyAqLworCWxkcglyMSwgQ0tDVExfVkFMCisJb3JyCXIxLCByMSwgIzB4MjAwMAkJCUAgZW5hYmxlIERTUCBjbG9jaworCXN0cmgJcjEsIFtyMF0JCQlAIHNldHVwIGNsb2NrIGRpdmlzb3JzCisKKwkvKiBTZXR1cCBEUExMIHRvIGdlbmVyYXRlIHJlcXVlc3RlZCBmcmVxICovCisJbGRyCXIwLCBEUExMMV9CQVNFCQkJQCBiYXNlIG9mIERQTEwxIHJlZ2lzdGVyCisJbW92CXIxLCAjMHgwMDEwCQkJQCBzZXQgUExMX0VOQUJMRQorCW9ycglyMSwgcjEsICMweDIwMDAJCQlAIHNldCBJT0IgdG8gbmV3IGxvY2tpbmcKKwlvcnIJcjEsIHIxLCAjKE9NQVA1OTEwX0RQTExfTVVMIDw8IDcpIEAgc2V0dXAgbXVsdGlwbGllciBDTEtSRUYKKwlvcnIJcjEsIHIxLCAjKE9NQVA1OTEwX0RQTExfRElWIDw8IDUpIEAgc2V0dXAgZGl2aWRlciBDTEtSRUYKKwlzdHJoCXIxLCBbcjBdCQkJQCB3cml0ZQorCitsb2NraW5nOgorCWxkcmgJcjEsIFtyMF0JCQlAIGdldCBEUExMIHZhbHVlCisJdHN0CXIxLCAjMHgwMQorCWJlcQlsb2NraW5nCQkJCUAgd2hpbGUgTE9DSyBub3Qgc2V0CisKKwkvKiBFbmFibGUgY2xvY2sgKi8KKwlsZHIJcjAsIE1QVV9DTEtNX0JBU0UJCUAgYmFzZSBvZiBDTE9DSyB1bml0CisJbW92CXIxLCAjKDEgPDwgMTApCQkJQCBkaXNhYmxlIGlkbGUgbW9kZSBkbyBub3QgY2hlY2sKKwkJCQkJCUAgbldBS0VVUCBwaW4sIG90aGVyIHJlbWFpbiBhY3RpdmUKKwlzdHJoCXIxLCBbcjAsICMweDA0XQorCWxkcglyMSwgRU5fQ0xLX1ZBTAorCXN0cmgJcjEsIFtyMCwgIzB4MDhdCisJbW92CXIxLCAjMHgwMDNmCQkJQCBGTEFTSC5SUCBub3QgZW5hYmxlZCBpbiBpZGxlIGFuZAorCXN0cmgJcjEsIFtyMCwgIzB4MGNdCQkJQCBtYXggZGVsYXllZCAoIDMyIHggQ0xLSU4gKQorCisKIAltb3YJcjYsICMwCiAJY3JjdWoJX0xPQURFUjFfT0ZGU0VULCBfTE9BREVSX1NJWkUKIAlibmUJY3JjMV9iYWQKQEAgLTc2LDkgKzEzMSw4IEBACiBjcmMyX2JhZDoKIAlsZHIJcjMsIF9MT0FERVIxX09GRlNFVAogCWxkcglyNCwgX0xPQURFUjJfT0ZGU0VUCi0JYglib290XzJuZAotCXRzdAlyNiwgIzMKLQliZXEJb25lX2lzX2JhZAlAIG9uZSBvZiB0aGVtIChvciBib3RoKSBoYXMgYmFkIGNyYworCXRlcQlyNiwgIzMKKwlibmUJb25lX2lzX2JhZAlAIG9uZSBvZiB0aGVtIChvciBib3RoKSBoYXMgYmFkIGNyYwogCWxkcglyMSwgW3IzLCAjNF0KIAlsZHIJcjIsIFtyNCwgIzRdCiAJY21wCXIxLCByMgkJQCBib290IDJuZCBsb2FkZXIgaWYgdmVyc2lvbnMgZGlmZmVyCkBAIC05MCw2ICsxNDQsNyBAQAogCXRzdAlyNiwgIzIKIAlibmUJYm9vdF8ybmQKIEAgV2UgYXJlIGRvb21lZCwgc28gbGV0IHVzZXIga25vdy4KK2hlbGw6CiAJbGRyCXIwLCBHUElPX0JBU0UJQCBjb25maWd1cmUgR1BJTyBwaW5zCiAJbGRyCXIxLCBHUElPX0RJUkVDVElPTgogCXN0cmgJcjEsIFtyMCwgIzB4MDhdCkBAIC0xNzEsNiArMjI2LDE1IEBACiAKIEdQSU9fQkFTRToKIAkud29yZCAweGZmZmNlMDAwCitNUFVfQ0xLTV9CQVNFOgorCS53b3JkIDB4ZmZmZWNlMDAKK0RQTEwxX0JBU0U6CisJLndvcmQgMHhmZmZlY2YwMAorCitDS0NUTF9WQUw6CisJLndvcmQgT01BUDU5MTBfQVJNX0NLQ1RMCitFTl9DTEtfVkFMOgorCS53b3JkIE9NQVA1OTEwX0FSTV9FTl9DTEsKIEdQSU9fRElSRUNUSU9OOgogCS53b3JkIDB4MDAwMGZmZTcKIApkaWZmIC0tZ2l0IGEvYm9hcmQvbmV0c3Rhci9jcmNpdCBiL2JvYXJkL25ldHN0YXIvY3JjaXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDk4YWU0MmUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbmV0c3Rhci9jcmNpdAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHN0YXIvY3JjaXQuYyBiL2JvYXJkL25ldHN0YXIvY3JjaXQuYwppbmRleCBmNmQzMDY2Li5jZTk4ZTIwIDEwMDY0NAotLS0gYS9ib2FyZC9uZXRzdGFyL2NyY2l0LmMKKysrIGIvYm9hcmQvbmV0c3Rhci9jcmNpdC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJfSBlbHNlIGlmICgoYXJnYyA9PSA0KSAmJiAoc3RyY21wKGFyZ3ZbMV0sICItdiIpID09IDApKSB7CiAJCWNoYXIgKmVuZHB0ciwgKm5wdHIgPSBhcmd2WzJdOwogCQl1bnNpZ25lZCB2ZXIgPSBzdHJ0b3VsKG5wdHIsICZlbmRwdHIsIDApOwotCQlpZiAobnB0ciAhPSAnXDAnICYmIGVuZHB0ciA9PSAnXDAnKQorCQlpZiAoKm5wdHIgIT0gJ1wwJyAmJiAqZW5kcHRyID09ICdcMCcpCiAJCQlyZXR1cm4gZG9pdChhcmd2WzNdLCB2ZXIpOwogCX0KIAlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBjcmNpdCBbLXYgdmVyc2lvbl0gPGltYWdlPlxuIik7CmRpZmYgLS1naXQgYS9ib2FyZC9uZXRzdGFyL25ldHN0YXIuYyBiL2JvYXJkL25ldHN0YXIvbmV0c3Rhci5jCmluZGV4IDRiN2ViYTEuLmQ2YjYyMGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHN0YXIvbmV0c3Rhci5jCisrKyBiL2JvYXJkL25ldHN0YXIvbmV0c3Rhci5jCkBAIC0yNyw3ICsyNyw2IEBACiBpbnQgYm9hcmRfaW5pdCh2b2lkKQogewogCS8qIGFyY2ggbnVtYmVyIG9mIE5ldFN0YXIgYm9hcmQgKi8KLQkvKiBUT0RPOiB1c2UgZGVmaW5lIGZyb20gYXNtL21hY2gtdHlwZXMuaCAqLwogCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSA2OTI7CiAKIAkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCkBAIC01MSwxNSArNTAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIHZvaWQgcGFydGl0aW9uX2ZsYXNoKHZvaWQpOwotCiBpbnQgbWlzY19pbml0X3Iodm9pZCkKIHsKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIHZvaWQgbmFuZF9pbml0KHZvaWQpOwotCiBpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ib2FyZC9uZXRzdGFyL3NldHVwLlMgYi9ib2FyZC9uZXRzdGFyL3NldHVwLlMKaW5kZXggZjY3Nzg2ZC4uNWRhY2M5YyAxMDA2NDQKLS0tIGEvYm9hcmQvbmV0c3Rhci9zZXR1cC5TCisrKyBiL2JvYXJkL25ldHN0YXIvc2V0dXAuUwpAQCAtMTQ1LDI1ICsxNDUsMjMgQEAKIAlub3AKIAogCS8qIFNldHVwIGNsb2NraW5nIG1vZGUgKi8KLQlsZHIJcjAsIE9NQVA1OTEwX01QVV9DTEtNX0JBU0UJQCBwcmVwYXJlIGJhc2Ugb2YgQ0xPQ0sgdW5pdAotCWxkcmgJcjEsIFtyMCwgIzB4MThdCQkJQCBnZXQgcmVzZXQgc3RhdHVzCisJbGRyCXIwLCBPTUFQNTkxMF9NUFVfQ0xLTV9CQVNFCUAgYmFzZSBvZiBDTE9DSyB1bml0CisJbGRyaAlyMSwgW3IwLCAjMHgxOF0JCQlAIEFSTV9TWVNUIC0gZ2V0IHJlc2V0IHN0YXR1cwogCWJpYwlyMSwgcjEsICMoNyA8PCAxMSkJCUAgY2xlYXIgY2xvY2sgc2VsZWN0CiAJb3JyCXIxLCByMSwgIygyIDw8IDExKQkJQCBzZXQgc3luY2hyb25vdXMgc2NhbGFibGUKLQltb3YJcjIsICMwCQkJCUAgc2V0IHdhaXQgY291bnRlciB0byAxMDAgY2xvY2sgY3ljbGVzCi0KLWljYWNoZV9sb29wOgotCWNtcAlyMiwgIzB4MDEKLQlzdHJlcWgJcjEsIFtyMCwgIzB4MThdCi0JYWRkCXIyLCByMiwgIzB4MDEKLQljbXAJcjIsICMweDEwCi0JYm5lCWljYWNoZV9sb29wCisJbW92CXIyLCAjMAorbG9vcDoKKwljbXAJcjIsICMxCQkJCUAgdGhpcyBsb29wIHdpbGwgd2FpdCBmb3IgYXQgbGVhc3QgMTAwIGN5Y2xlcworCXN0cmVxaAlyMSwgW3IwLCAjMHgxOF0JCQlAIGJlZm9yZSBpc3N1aW5nIG5leHQgcmVxdWVzdCBmcm9tIE1QVQorCWFkZAlyMiwgcjIsICMxCQkJQCBvbiB0aGUgMXN0IHJ1biBjb2RlIGlzIGxvYWRlZCBpbnRvIEktY2FjaGUKKwljbXAJcjIsICMxNgkJCQlAIGFuZCBzZWNvbmQgcnVuIHdpbGwgc2V0IGNsb2NraW5nIG1vZGUKKwlibmUJbG9vcAogCW5vcAogCi0JLyogU2V0dXAgY2xvY2sgZGl2aXNvcnMgKi8KLQlsZHIJcjAsIE9NQVA1OTEwX01QVV9DTEtNX0JBU0UJQCBiYXNlIG9mIENMT0NLIHVuaXQKKwkvKiBTZXR1cCBjbG9jayBkaXZpZGVycyAqLwogCWxkcglyMSwgX09NQVA1OTEwX0FSTV9DS0NUTAogCW9ycglyMSwgcjEsICMweDIwMDAJCQlAIGVuYWJsZSBEU1AgY2xvY2sKLQlzdHJoCXIxLCBbcjAsICMweDAwXQkJCUAgc2V0dXAgY2xvY2sgZGl2aXNvcnMKKwlzdHJoCXIxLCBbcjBdCQkJQCBzZXR1cCBjbG9jayBkaXZpc29ycwogCiAJLyogU2V0dXAgRFBMTCB0byBnZW5lcmF0ZSByZXF1ZXN0ZWQgZnJlcSAqLwogCWxkcglyMCwgT01BUDU5MTBfRFBMTDFfQkFTRQkJQCBiYXNlIG9mIERQTEwxIHJlZ2lzdGVyCkBAIC0xODYsOCArMTg0LDcgQEAKIAlsZHIJcjEsIF9PTUFQNTkxMF9BUk1fRU5fQ0xLCiAJc3RyaAlyMSwgW3IwLCAjMHgwOF0KIAltb3YJcjEsICMweDAwM2YJCQlAIEZMQVNILlJQIG5vdCBlbmFibGVkIGluIGlkbGUgYW5kCi0JCQkJCQlAIG1heCBkZWxheWVkICggMzIgeCBDTEtJTiApCi0Jc3RyaAlyMSwgW3IwLCAjMHgwY10KKwlzdHJoCXIxLCBbcjAsICMweDBjXQkJCUAgbWF4IGRlbGF5ZWQgKCAzMiB4IENMS0lOICkKIAogCS8qIENvbmZpZ3VyZSA1OTEwIHBpbnMgZnVuY3Rpb25zIHRvIG1hdGNoIG91ciBib2FyZC4gKi8KIAlsZHIgICAgIHIwLCBNVVhfQ09ORklHX0JBU0UKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHRhL01ha2VmaWxlIGIvYm9hcmQvbmV0dGEvTWFrZWZpbGUKaW5kZXggNjhlMjQwMi4uMzkzNjJjNiAxMDA2NDQKLS0tIGEvYm9hcmQvbmV0dGEvTWFrZWZpbGUKKysrIGIvYm9hcmQvbmV0dGEvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBkc3AubyBjb2RlYy5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBkc3AubyBjb2RlYy5vIHBjbWNpYS5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9uZXR0YS9wY21jaWEuYyBiL2JvYXJkL25ldHRhL3BjbWNpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNzA5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9uZXR0YS9wY21jaWEuYwpAQCAtMCwwICsxLDM3MCBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzh4eC5oPgorI2luY2x1ZGUgPHBjbWNpYS5oPgorCisjdW5kZWYJQ09ORklHX1BDTUNJQQorCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkgJiYgZGVmaW5lZChDT05GSUdfSURFXzh4eF9QQ0NBUkQpCisjZGVmaW5lCUNPTkZJR19QQ01DSUEKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1BDTUNJQQorCisvKiBzb21lIHNhbmUgYml0IG1hY3JvcyAqLworI2RlZmluZSBfQkQoX2IpCQkJCSgxVSA8PCAoMzEtKF9iKSkpCisjZGVmaW5lIF9CRFIoX2wsIF9oKQkJCSgoKCgoMVUgPDwgKDMxLShfbCkpKSAtIDEpIDw8IDEpIHwgMSkgJiB+KCgxVSA8PCAoMzEtKF9oKSkpIC0gMSkpCisKKyNkZWZpbmUgX0JXKF9iKQkJCQkoMVUgPDwgKDE1LShfYikpKQorI2RlZmluZSBfQldSKF9sLCBfaCkJCQkoKCgoKDFVIDw8ICgxNS0oX2wpKSkgLSAxKSA8PCAxKSB8IDEpICYgfigoMVUgPDwgKDE1LShfaCkpKSAtIDEpKQorCisjZGVmaW5lIF9CQihfYikJCQkJKDFVIDw8ICg3LShfYikpKQorI2RlZmluZSBfQkJSKF9sLCBfaCkJCQkoKCgoKDFVIDw8ICg3LShfbCkpKSAtIDEpIDw8IDEpIHwgMSkgJiB+KCgxVSA8PCAoNy0oX2gpKSkgLSAxKSkKKworI2RlZmluZSBfQihfYikJCQkJX0JEKF9iKQorI2RlZmluZSBfQlIoX2wsIF9oKQkJCV9CRFIoX2wsIF9oKQorCisjZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIk5FVFRBIgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdnBwZF9tYXNrc1syXSA9IHsgX0JXKDE0KSwgX0JXKDE1KSB9OworCitzdGF0aWMgdm9pZCBjZmdfdnBwZChpbnQgbm8pCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXVuc2lnbmVkIHNob3J0IG1hc2s7CisKKwlpZiAoKHVuc2lnbmVkIGludClubyA+PSBzaXplb2YodnBwZF9tYXNrcykvc2l6ZW9mKHZwcGRfbWFza3NbMF0pKQorCQlyZXR1cm47CisKKwltYXNrID0gdnBwZF9tYXNrc1tub107CisKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYXBhciAmPSB+bWFzazsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYW9kciAmPSB+bWFzazsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciB8PSAgbWFzazsKK30KKworc3RhdGljIHZvaWQgc2V0X3ZwcGQoaW50IG5vLCBpbnQgd2hhdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdW5zaWduZWQgc2hvcnQgbWFzazsKKworCWlmICgodW5zaWduZWQgaW50KW5vID49IHNpemVvZih2cHBkX21hc2tzKS9zaXplb2YodnBwZF9tYXNrc1swXSkpCisJCXJldHVybjsKKworCW1hc2sgPSB2cHBkX21hc2tzW25vXTsKKworCWlmICh3aGF0KQorCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRhdCB8PSBtYXNrOworCWVsc2UKKwkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgJj0gfm1hc2s7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB2Y2NkX21hc2tzWzJdID0geyBfQlcoMTApLCBfQlcoNikgfTsKKworc3RhdGljIHZvaWQgY2ZnX3ZjY2QoaW50IG5vKQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl1bnNpZ25lZCBzaG9ydCBtYXNrOworCisJaWYgKCh1bnNpZ25lZCBpbnQpbm8gPj0gc2l6ZW9mKHZjY2RfbWFza3MpL3NpemVvZih2Y2NkX21hc2tzWzBdKSkKKwkJcmV0dXJuOworCisJbWFzayA9IHZjY2RfbWFza3Nbbm9dOworCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFwYXIgJj0gfm1hc2s7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFvZHIgJj0gfm1hc2s7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkaXIgfD0gIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIHNldF92Y2NkKGludCBubywgaW50IHdoYXQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXVuc2lnbmVkIHNob3J0IG1hc2s7CisKKwlpZiAoKHVuc2lnbmVkIGludClubyA+PSBzaXplb2YodmNjZF9tYXNrcykvc2l6ZW9mKHZjY2RfbWFza3NbMF0pKQorCQlyZXR1cm47CisKKwltYXNrID0gdmNjZF9tYXNrc1tub107CisKKwlpZiAod2hhdCkKKwkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgfD0gbWFzazsKKwllbHNlCisJCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0ICY9IH5tYXNrOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgb2NfbWFzayA9IF9CVyg4KTsKKworc3RhdGljIHZvaWQgY2ZnX29jKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXVuc2lnbmVkIHNob3J0IG1hc2sgPSBvY19tYXNrOworCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIgJj0gfm1hc2s7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNzbyAgJj0gfm1hc2s7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNpbnQgJj0gfm1hc2s7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNwYXIgJj0gfm1hc2s7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29jKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXVuc2lnbmVkIHNob3J0IG1hc2sgPSBvY19tYXNrOworCWludCB3aGF0OworCisJd2hhdCA9ICEhKGltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0ICYgbWFzayk7OworCXJldHVybiB3aGF0OworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2hkbl9tYXNrID0gX0JXKDEyKTsKKworc3RhdGljIHZvaWQgY2ZnX3NoZG4odm9pZCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdW5zaWduZWQgc2hvcnQgbWFzazsKKworCW1hc2sgPSBzaGRuX21hc2s7CisKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYXBhciAmPSB+bWFzazsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYW9kciAmPSB+bWFzazsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciB8PSAgbWFzazsKK30KKworc3RhdGljIHZvaWQgc2V0X3NoZG4oaW50IHdoYXQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXVuc2lnbmVkIHNob3J0IG1hc2s7CisKKwltYXNrID0gc2hkbl9tYXNrOworCisJaWYgKHdoYXQpCisJCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0IHw9IG1hc2s7CisJZWxzZQorCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRhdCAmPSB+bWFzazsKK30KKworc3RhdGljIHZvaWQgY2ZnX3BvcnRzICh2b2lkKQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKworCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7CisKKworCWNmZ192cHBkKDApOyBjZmdfdnBwZCgxKTsJLyogVlBQRDAsVlBQRDEgVkFWUFAgPT4gSGktWiAqLworCWNmZ192Y2NkKDApOyBjZmdfdmNjZCgxKTsJLyogM1YgYW5kIDVWIG9mZiAqLworCWNmZ19zaGRuKCk7CisJY2ZnX29jKCk7CisKKwkvKgorCSogQ29uZmlndXJlIFBvcnQgQSBmb3IgVFBTMjIxMSBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2gKKwkqCisJKiBTd2l0Y2ggb2ZmIGFsbCB2b2x0YWdlcywgYXNzZXJ0IHNodXRkb3duCisJKi8KKwlzZXRfdnBwZCgwLCAxKTsgc2V0X3ZwcGQoMSwgMSk7CisJc2V0X3ZjY2QoMCwgMCk7IHNldF92Y2NkKDEsIDApOworCXNldF9zaGRuKDEpOworCisJdWRlbGF5KDEwMDAwMCk7Cit9CisKK2ludCBwY21jaWFfaGFyZHdhcmVfZW5hYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7CisJdm9sYXRpbGUgc3lzY29uZjh4eF90CSpzeXNwOworCXVpbnQgcmVnLCBwaXByLCBtYXNrOworCWludCBpOworCisJZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKKworCXVkZWxheSgxMDAwMCk7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJc3lzcCAgPSAoc3lzY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9zaXVfY29uZikpOworCXBjbXAgID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7CisJY3AgICAgPSAoY3BtOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX2NwbSkpOworCisJLyogQ29uZmlndXJlIFBvcnRzIGZvciBUUFMyMjExQSBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2ggKi8KKwljZmdfcG9ydHMgKCk7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soX3Nsb3RfKTsKKwlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0soX3Nsb3RfKTsKKworCS8qCisJKiBEaXNhYmxlIGludGVycnVwdHMsIERNQSwgYW5kIFBDTUNJQSBidWZmZXJzCisJKiAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKSBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAorCSovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSAwOworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7CisKKwl1ZGVsYXkoNTAwKTsKKworCS8qCisJKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBjYXJkIGluIHRoZSBzbG90LCB0aGVuIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlLgorCSovCisJdWRlbGF5KDEwMDAwKTsKKwlkZWJ1ZyAoIlslZF0gJXM6IFBJUFIoJXApPTB4JXhcbiIsCisJICAgICAgIF9fTElORV9fLF9fRlVOQ1RJT05fXywKKwkgICAgICAgJihwY21wLT5wY21jX3BpcHIpLHBjbXAtPnBjbWNfcGlwcik7CisJaWYgKHBjbXAtPnBjbWNfcGlwciAmICgweDE4MDAwMDAwID4+IChzbG90IDw8IDQpKSkgeworCQlwcmludGYgKCIgICBObyBDYXJkIGZvdW5kXG4iKTsKKwkJcmV0dXJuICgxKTsKKwl9CisKKwkvKgorCSogUG93ZXIgT246IFNldCBWQVZDQyB0byAzLjNWIG9yIDVWLCBzZXQgVkFWUFAgdG8gSGktWgorCSovCisJbWFzayA9IFBDTUNJQV9WUzEoc2xvdCkgfCBQQ01DSUFfVlMyKHNsb3QpOworCXBpcHIgPSBwY21wLT5wY21jX3BpcHI7CisJZGVidWcgKCJQSVBSOiAweCV4ID09PiBWUzE9byVzLCBWUzI9byVzXG4iLAorCSAgICAgICBwaXByLAorCSAgICAgICAocmVnJlBDTUNJQV9WUzEoc2xvdCkpPyJuIjoiZmYiLAorCSAgICAgICAocmVnJlBDTUNJQV9WUzIoc2xvdCkpPyJuIjoiZmYiKTsKKworCWlmICgocGlwciAmIG1hc2spID09IG1hc2spIHsKKwkJc2V0X3ZwcGQoMCwgMSk7IHNldF92cHBkKDEsIDEpOyAJCS8qIFZBVlBQID0+IEhpLVogKi8KKwkJc2V0X3ZjY2QoMCwgMCk7IHNldF92Y2NkKDEsIDEpOyAJCS8qIDVWIG9uLCAzViBvZmYgKi8KKwkJcHV0cyAoIiA1LjBWIGNhcmQgZm91bmQ6ICIpOworCX0gZWxzZSB7CisJCXNldF92cHBkKDAsIDEpOyBzZXRfdnBwZCgxLCAxKTsgCQkvKiBWQVZQUCA9PiBIaS1aICovCisJCXNldF92Y2NkKDAsIDEpOyBzZXRfdmNjZCgxLCAwKTsgCQkvKiA1ViBvZmYsIDNWIG9uICovCisJCXB1dHMgKCIgMy4zViBjYXJkIGZvdW5kOiAiKTsKKwl9CisKKwkvKiAgV2FpdCA1MDAgbXM7IHVzZSB0aGlzIHRvIGNoZWNrIGZvciBvdmVyLWN1cnJlbnQgKi8KKwlmb3IgKGk9MDsgaTw1MDAwOyArK2kpIHsKKwkJaWYgKCFnZXRfb2MoKSkgeworCQkJcHJpbnRmICgiICAgKioqIE92ZXJjdXJyZW50IC0gU2FmZXR5IHNodXRkb3duICoqKlxuIik7CisJCQlzZXRfdmNjZCgwLCAwKTsgc2V0X3ZjY2QoMSwgMCk7IAkJLyogVkFWUFAgPT4gSGktWiAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCQl1ZGVsYXkgKDEwMCk7CisJfQorCisJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCisJdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCisKKwlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOworCisJcmV0dXJuICgwKTsKK30KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKKwl1X2xvbmcgcmVnOworCisJZGVidWcgKCJoYXJkd2FyZV9kaXNhYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKKworCS8qIENvbmZpZ3VyZSBQQ01DSUEgR2VuZXJhbCBDb250cm9sIFJlZ2lzdGVyICovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSAwOworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7CisKKwkvKiBBbGwgdm9sdGFnZXMgb2ZmIC8gSGktWiAqLworCXNldF92cHBkKDAsIDEpOyBzZXRfdnBwZCgxLCAxKTsKKwlzZXRfdmNjZCgwLCAxKTsgc2V0X3ZjY2QoMSwgMSk7CisKKwl1ZGVsYXkoMTAwMDApOworCisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLworCisKK2ludCBwY21jaWFfdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCit7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7CisJdm9sYXRpbGUgY3BtOHh4X3QJKmNwOworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKKwl1X2xvbmcgcmVnOworCXVzaG9ydCBzcmVnOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIgorCQkJUENNQ0lBX0JPQVJEX01TRworCQkJIiBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKKwknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKKworCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7CisJcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKKwkvKgorCSogRGlzYWJsZSBQQ01DSUEgYnVmZmVycyAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKQorCSogYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKKwkqLworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgID0gUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKKwl1ZGVsYXkoNTAwKTsKKworCS8qCisJKiBDb25maWd1cmUgUG9ydCBDIHBpbnMgZm9yCisJKiA1IFZvbHRzIEVuYWJsZSBhbmQgMyBWb2x0cyBlbmFibGUsCisJKiBUdXJuIGFsbCBwb3dlciBwaW5zIHRvIEhpLVoKKwkqLworCWRlYnVnICgiUENNQ0lBIHBvd2VyIE9GRlxuIik7CisJY2ZnX3BvcnRzICgpOwkvKiBFbmFibGVzIHN3aXRjaCwgYnV0IGFsbCBpbiBIaS1aICovCisKKwlzcmVnICA9IGltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0OworCXNldF92cHBkKDAsIDEpOyBzZXRfdnBwZCgxLCAxKTsKKworCXN3aXRjaCh2Y2MpIHsKKwkJY2FzZSAgMDoKKwkJCWJyZWFrOwkvKiBTd2l0Y2ggb2ZmCQkqLworCisJCWNhc2UgMzM6CisJCQlzZXRfdmNjZCgwLCAxKTsgc2V0X3ZjY2QoMSwgMCk7CisJCQlicmVhazsKKworCQljYXNlIDUwOgorCQkJc2V0X3ZjY2QoMCwgMCk7IHNldF92Y2NkKDEsIDEpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBDaGVja2luZyBzdXBwb3J0ZWQgdm9sdGFnZXMgKi8KKworCWRlYnVnICgiUElQUjogMHgleCAtLT4gJXNcbiIsCisJICAgICAgIHBjbXAtPnBjbWNfcGlwciwKKwkgICAgICAgKHBjbXAtPnBjbWNfcGlwciAmIDB4MDAwMDgwMDApID8gIm9ubHkgNSBWIiA6ICJjYW4gZG8gMy4zViIpOworCitkb25lOgorCQkJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCXVkZWxheSg1MDApOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlYywgRE9ORVxuIiwKKwkgICAgICAgc2xvdCsnQScpOworCXJldHVybiAoMCk7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfUENNQ0lBICovCmRpZmYgLS1naXQgYS9ib2FyZC9uZXR0YTIvTWFrZWZpbGUgYi9ib2FyZC9uZXR0YTIvTWFrZWZpbGUKaW5kZXggZDQ1NzAyMC4uZTNkMjRiMyAxMDA2NDQKLS0tIGEvYm9hcmQvbmV0dGEyL01ha2VmaWxlCisrKyBiL2JvYXJkL25ldHRhMi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbmV0dmlhL01ha2VmaWxlIGIvYm9hcmQvbmV0dmlhL01ha2VmaWxlCmluZGV4IDEzY2U5ZmMuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHZpYS9NYWtlZmlsZQorKysgYi9ib2FyZC9uZXR2aWEvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9uczk3NTBkZXYvTWFrZWZpbGUgYi9ib2FyZC9uczk3NTBkZXYvTWFrZWZpbGUKaW5kZXggZmI0MzMzYy4uZGVmYzI5YiAxMDA2NDQKLS0tIGEvYm9hcmQvbnM5NzUwZGV2L01ha2VmaWxlCisrKyBiL2JvYXJkL25zOTc1MGRldi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMiArMjMsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBuczk3NTBkZXYubyBmbGFzaC5vIGxlZC5vCitDT0JKUwk6PSBuczk3NTBkZXYubyBmbGFzaC5vIGxlZC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9ueDgyMy9NYWtlZmlsZSBiL2JvYXJkL254ODIzL01ha2VmaWxlCmluZGV4IDdhMjAxNGQuLjFiNTdkMmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL254ODIzL01ha2VmaWxlCisrKyBiL2JvYXJkL254ODIzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbzJkbnQvTWFrZWZpbGUgYi9ib2FyZC9vMmRudC9NYWtlZmlsZQppbmRleCAyZWI0MzY2Li42MjZmNjEwIDEwMDY0NAotLS0gYS9ib2FyZC9vMmRudC9NYWtlZmlsZQorKysgYi9ib2FyZC9vMmRudC9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKIAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDUKKyMgKEMpIENvcHlyaWdodCAyMDA1LTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI0LDExICsyNCwxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDE1MTBpbm4vTWFrZWZpbGUgYi9ib2FyZC9vbWFwMTUxMGlubi9NYWtlZmlsZQppbmRleCA5MDJiMjRlLi43Y2RjOGQwIDEwMDY0NAotLS0gYS9ib2FyZC9vbWFwMTUxMGlubi9NYWtlZmlsZQorKysgYi9ib2FyZC9vbWFwMTUxMGlubi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMyArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBvbWFwMTUxMGlubm92YXRvci5vCitDT0JKUwk6PSBvbWFwMTUxMGlubm92YXRvci5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvb21hcDE2MTBpbm4vTWFrZWZpbGUgYi9ib2FyZC9vbWFwMTYxMGlubi9NYWtlZmlsZQppbmRleCA0NTYwMTAyLi5lNTIzZGM2IDEwMDY0NAotLS0gYS9ib2FyZC9vbWFwMTYxMGlubi9NYWtlZmlsZQorKysgYi9ib2FyZC9vbWFwMTYxMGlubi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMyArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBvbWFwMTYxMGlubm92YXRvci5vIGZsYXNoLm8KK0NPQkpTCTo9IG9tYXAxNjEwaW5ub3ZhdG9yLm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXAyNDIwaDQvTWFrZWZpbGUgYi9ib2FyZC9vbWFwMjQyMGg0L01ha2VmaWxlCmluZGV4IGVkNDc4NjguLjc2N2E5ZDYgMTAwNjQ0Ci0tLSBhL2JvYXJkL29tYXAyNDIwaDQvTWFrZWZpbGUKKysrIGIvYm9hcmQvb21hcDI0MjBoNC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMyArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBvbWFwMjQyMGg0Lm8gbWVtLm8gc3lzX2luZm8ubworQ09CSlMJOj0gb21hcDI0MjBoNC5vIG1lbS5vIHN5c19pbmZvLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwNTkxMm9zay9NYWtlZmlsZSBiL2JvYXJkL29tYXA1OTEyb3NrL01ha2VmaWxlCmluZGV4IDRiNTY0MjEuLmM3MzRiNDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL29tYXA1OTEyb3NrL01ha2VmaWxlCisrKyBiL2JvYXJkL29tYXA1OTEyb3NrL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTMgKzIzLDE3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gb21hcDU5MTJvc2subworQ09CSlMJOj0gb21hcDU5MTJvc2subwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA3MzBwMi9NYWtlZmlsZSBiL2JvYXJkL29tYXA3MzBwMi9NYWtlZmlsZQppbmRleCAyOTQ2N2FjLi5kNjc4ZmQ1IDEwMDY0NAotLS0gYS9ib2FyZC9vbWFwNzMwcDIvTWFrZWZpbGUKKysrIGIvYm9hcmQvb21hcDczMHAyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEzICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IG9tYXA3MzBwMi5vIGZsYXNoLm8KK0NPQkpTCTo9IG9tYXA3MzBwMi5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9veGMvTWFrZWZpbGUgYi9ib2FyZC9veGMvTWFrZWZpbGUKaW5kZXggYWU3YTkzMi4uZTNkMjRiMyAxMDA2NDQKLS0tIGEvYm9hcmQvb3hjL01ha2VmaWxlCisrKyBiL2JvYXJkL294Yy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3BiMXgwMC9NYWtlZmlsZSBiL2JvYXJkL3BiMXgwMC9NYWtlZmlsZQppbmRleCBkMWNkYzZiLi5kMWU5YWQzIDEwMDY0NAotLS0gYS9ib2FyZC9wYjF4MDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvcGIxeDAwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE5ICsyMywyMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogU09CSlMJPSBtZW1zZXR1cC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9wY2lwcGMyL01ha2VmaWxlIGIvYm9hcmQvcGNpcHBjMi9NYWtlZmlsZQppbmRleCAyOTk4ZjIzLi4yYWYzMjg2IDEwMDY0NAotLS0gYS9ib2FyZC9wY2lwcGMyL01ha2VmaWxlCisrKyBiL2JvYXJkL3BjaXBwYzIvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjMgKzIzLDI1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKIENPQkpTCT0gJChCT0FSRCkubyBjcGM3MTBfcGNpLm8gZmxhc2gubyBzY29uc29sZS5vIFwKIAkgIGZwZ2Ffc2VyaWFsLm8gcGNpcHBjMl9mcGdhLm8gY3BjNzEwX2luaXRfcmFtLm8gaTJjLm8KIAotQU9CSlMJPQorU09CSlMJPQogCi1PQkpTCT0gJChDT0JKUykgJChBT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkKE9CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDogTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkkKENDKSAtTSAkKENGTEFHUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9wY3M0NDBlcC9NYWtlZmlsZSBiL2JvYXJkL3BjczQ0MGVwL01ha2VmaWxlCmluZGV4IDRhMmEzODguLjlkYTkwYzEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BjczQ0MGVwL01ha2VmaWxlCisrKyBiL2JvYXJkL3BjczQ0MGVwL01ha2VmaWxlCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIFNPQkpTCT0gaW5pdC5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3BsZWIyL01ha2VmaWxlIGIvYm9hcmQvcGxlYjIvTWFrZWZpbGUKaW5kZXggOTVkOTE3MC4uMDc5OTc3MiAxMDA2NDQKLS0tIGEvYm9hcmQvcGxlYjIvTWFrZWZpbGUKKysrIGIvYm9hcmQvcGxlYjIvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNCwxMiArMjQsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBwbGViMi5vIGZsYXNoLm8KK0NPQkpTCTo9IHBsZWIyLm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CkBAIC00MCw5ICs0NCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvcG01MjAvTWFrZWZpbGUgYi9ib2FyZC9wbTUyMC9NYWtlZmlsZQppbmRleCA4Y2YwZDdkLi44ZTYxYzc5IDEwMDY0NAotLS0gYS9ib2FyZC9wbTUyMC9NYWtlZmlsZQorKysgYi9ib2FyZC9wbTUyMC9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKIAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjQsMTEgKzI0LDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9wbTgyNi9NYWtlZmlsZSBiL2JvYXJkL3BtODI2L01ha2VmaWxlCmluZGV4IDdhMjAxNGQuLjFiNTdkMmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BtODI2L01ha2VmaWxlCisrKyBiL2JvYXJkL3BtODI2L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvcG04MjYvY29uZmlnLm1rIGIvYm9hcmQvcG04MjYvY29uZmlnLm1rCmluZGV4IGM5M2JhZDkuLjQ4YWMyOTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BtODI2L2NvbmZpZy5taworKysgYi9ib2FyZC9wbTgyNi9jb25maWcubWsKQEAgLTI2LDcgKzI2LDcgQEAKICMKIAogCi1zaW5jbHVkZSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLnRtcAorc2luY2x1ZGUgJChPQkpUUkVFKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCiAKIGlmbmRlZiBURVhUX0JBU0UKICMjIFN0YW5kYXJkOiBib290IDY0LWJpdCBmbGFzaApkaWZmIC0tZ2l0IGEvYm9hcmQvcG04MjgvTWFrZWZpbGUgYi9ib2FyZC9wbTgyOC9NYWtlZmlsZQppbmRleCBiOWVmMGMwLi4xYjU3ZDJiIDEwMDY0NAotLS0gYS9ib2FyZC9wbTgyOC9NYWtlZmlsZQorKysgYi9ib2FyZC9wbTgyOC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvcG04MjgvY29uZmlnLm1rIGIvYm9hcmQvcG04MjgvY29uZmlnLm1rCmluZGV4IGU4OTRhZjcuLjYyODg0MzEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BtODI4L2NvbmZpZy5taworKysgYi9ib2FyZC9wbTgyOC9jb25maWcubWsKQEAgLTI2LDcgKzI2LDcgQEAKICMKIAogCi1zaW5jbHVkZSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLnRtcAorc2luY2x1ZGUgJChPQkpUUkVFKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCiAKIGlmbmRlZiBURVhUX0JBU0UKICMjIFN0YW5kYXJkOiBib290IDY0LWJpdCBmbGFzaApkaWZmIC0tZ2l0IGEvYm9hcmQvcG04NTQvTWFrZWZpbGUgYi9ib2FyZC9wbTg1NC9NYWtlZmlsZQppbmRleCA3ODI4MTY2Li4zZjFlOGYyIDEwMDY0NAotLS0gYS9ib2FyZC9wbTg1NC9NYWtlZmlsZQorKysgYi9ib2FyZC9wbTg1NC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDUKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEzICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9ICQoQk9BUkQpLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8KIFNPQkpTCTo9IGluaXQubwogI1NPQkpTCTo9CiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC00MCw5ICs0NCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvcG04NTYvTWFrZWZpbGUgYi9ib2FyZC9wbTg1Ni9NYWtlZmlsZQppbmRleCA1ZDhlYTM0Li4zZjFlOGYyIDEwMDY0NAotLS0gYS9ib2FyZC9wbTg1Ni9NYWtlZmlsZQorKysgYi9ib2FyZC9wbTg1Ni9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMyArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vCitDT0JKUwk6PSAkKEJPQVJEKS5vCiBTT0JKUwk6PSBpbml0Lm8KICNTT0JKUwk6PQogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtNDAsOSArNDQsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3BuNjIvTWFrZWZpbGUgYi9ib2FyZC9wbjYyL01ha2VmaWxlCmluZGV4IGU4NWQ0ZmQuLmE4Mzc4MjAgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BuNjIvTWFrZWZpbGUKKysrIGIvYm9hcmQvcG42Mi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUyA9ICAkKEJPQVJEKS5vIGNtZF9wbjYyLm8gbWlzYy5vCitDT0JKUwk9ICQoQk9BUkQpLm8gY21kX3BuNjIubyBtaXNjLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3BwbWM3eHgvTWFrZWZpbGUgYi9ib2FyZC9wcG1jN3h4L01ha2VmaWxlCmluZGV4IGMzNzg2NzcuLjE2NTViM2UgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BwbWM3eHgvTWFrZWZpbGUKKysrIGIvYm9hcmQvcHBtYzd4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMiArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBwcG1jN3h4Lm8gcGNpLm8gZmxhc2gubwogU09CSlMJOj0gaW5pdC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCitDT0JKUwk6PSBwcG1jN3h4Lm8gcGNpLm8gZmxhc2gubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQ0LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9wcG1jN3h4L2NvbmZpZy5tayBiL2JvYXJkL3BwbWM3eHgvY29uZmlnLm1rCmluZGV4IGJjYjZjODEuLmI1YjQ2ZGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BwbWM3eHgvY29uZmlnLm1rCisrKyBiL2JvYXJkL3BwbWM3eHgvY29uZmlnLm1rCkBAIC0xLDYgKzEsNiBAQAogIwogIyAoQykgQ29weXJpZ2h0IDIwMDUKLSMgUmljaGFyZCBEYW50ZXIsIFdpbmQgUml2ZXIgU3lzdGVtcyAKKyMgUmljaGFyZCBEYW50ZXIsIFdpbmQgUml2ZXIgU3lzdGVtcwogIwogIyAoQykgQ29weXJpZ2h0IDIwMDAKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KQEAgLTIyLDExICsyMiw2IEBACiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAjIE1BIDAyMTExLTEzMDcgVVNBCi0jCi0KLSMKLSMgCi0jCiAKIFRFWFRfQkFTRSA9IDB4RkZGMDAwMDAKIFRFWFRfRU5EICA9IDB4RkZGNDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL3BwbWM3eHgvZmxhc2guYyBiL2JvYXJkL3BwbWM3eHgvZmxhc2guYwppbmRleCAxY2JjYWRjLi40YmU2ZjEzIDEwMDY0NAotLS0gYS9ib2FyZC9wcG1jN3h4L2ZsYXNoLmMKKysrIGIvYm9hcmQvcHBtYzd4eC9mbGFzaC5jCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogZmxhc2guYwogICogLS0tLS0tLQotICogCisgKgogICogRmxhc2ggcHJvZ3JhbW1pbmcgcm91dGluZXMgZm9yIHRoZSBXaW5kIFJpdmVyIFBQTUMgNzR4eC83eHgKICAqIGJhc2VkIG9uIGZsYXNoLmMgZnJvbSB0aGUgVFFNODI2MCBib2FyZC4KLSAqIAorICoKICAqIEJ5IFJpY2hhcmQgRGFudGVyIChyaWNoYXJkLmRhbnRlckB3aW5kcml2ZXIuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA1IFdpbmQgUml2ZXIgU3lzdGVtcwogICovCkBAIC0yNywxMyArMjcsMTMgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG1zcjsKIAlEV09SRCBjbWRfcmVzZXQgPSAweDAwRjAwMEYwMDBGMDAwRjBMTDsKLQkKKwogCWlmIChmbGFzaF9pbmZvWzBdLmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pIHsKIAkJbXNyID0gZ2V0X21zciAoKTsKIAkJc2V0X21zciAobXNyIHwgTVNSX0ZQKTsKIAogCQl3cml0ZV92aWFfZnB1ICgoRFdPUkQqKWZsYXNoX2luZm9bMF0uc3RhcnRbMF0sICZjbWRfcmVzZXQgKTsKLQkJCisKIAkJc2V0X21zciAobXNyKTsKIAl9CiB9CkBAIC01MCwxNiArNTAsMTYgQEAKIAogCS8qIEVuYWJsZSBGUFUgKi8KIAltc3IgPSBnZXRfbXNyICgpOwotCXNldF9tc3IgKG1zciB8IE1TUl9GUCk7CQotCQkJCQkJCQorCXNldF9tc3IgKG1zciB8IE1TUl9GUCk7CisKIAkvKiBXcml0ZSBhdXRvLXNlbGVjdCBjb21tYW5kIHNlcXVlbmNlICovCiAJd3JpdGVfdmlhX2ZwdSAoKERXT1JEKikoYmFzZWFkZHIgKyAoMHgwNTU1IDw8IDMpKSwgJmNtZF9zZWxlY3RbMF0gKTsKIAl3cml0ZV92aWFfZnB1ICgoRFdPUkQqKShiYXNlYWRkciArICgweDAyQUEgPDwgMykpLCAmY21kX3NlbGVjdFsxXSApOwogCXdyaXRlX3ZpYV9mcHUgKChEV09SRCopKGJhc2VhZGRyICsgKDB4MDU1NSA8PCAzKSksICZjbWRfc2VsZWN0WzJdICk7Ci0JCisKIAkvKiBSZXN0b3JlIEZQVSAqLwogCXNldF9tc3IgKG1zcik7Ci0JCisKIAkvKiBSZWFkIG1hbnVmYWN0dXJlciBJRCAqLwogCWZsYXNodGVzdCA9ICoodm9sYXRpbGUgRFdPUkQqKWJhc2VhZGRyOwogCXN3aXRjaCAoKGludClmbGFzaHRlc3QpIHsKQEAgLTcwLDcgKzcwLDcgQEAKIAkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fRlVKOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQkvKiBObywgZmF1bHR5IG9yIHVua25vd24gZmxhc2ggKi8gCisJCS8qIE5vLCBmYXVsdHkgb3IgdW5rbm93biBmbGFzaCAqLwogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CiAJCWluZm8tPnNpemUgPSAwOwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJRFdPUkQgY21kX2VyYXNlWzZdID0geyAweDAwQUEwMEFBMDBBQTAwQUFMTCwgMHgwMDU1MDA1NTAwNTUwMDU1TEwsCiAJCQkJCQkgICAweDAwODAwMDgwMDA4MDAwODBMTCwgMHgwMEFBMDBBQTAwQUEwMEFBTEwsCiAJCQkJCQkgICAweDAwNTUwMDU1MDA1NTAwNTVMTCwgMHgwMDMwMDAzMDAwMzAwMDMwTEwgfTsKLQkKKwogCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewogCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewogCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKQEAgLTMxOSw3ICszMTksNyBAQAogCS8qIEVuYWJsZSBGUFUgKi8KIAltc3IgPSBnZXRfbXNyKCk7CiAJc2V0X21zciAoIG1zciB8IE1TUl9GUCApOwotCQkJCQkJICAgCisKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KIAlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzICgpOwogCkBAIC0zNDQsNyArMzQ0LDcgQEAKIAogCS8qIFJlc3RvcmUgRlBVICovCiAJc2V0X21zciAobXNyKTsKLQkKKwogCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwogCXVkZWxheSAoMTAwMCk7CiAKQEAgLTM3Myw3ICszNzMsNyBAQAogICBET05FOgogCS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwogCWZsYXNoX3Jlc2V0ICgpOwotCQorCiAJcHJpbnRmICgiIGRvbmVcbiIpOwogCXJldHVybiAwOwogfQpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJRFdPUkQgZGF0YTsKIAlEV09SRCBjbWRfd3JpdGVbM10gPSB7IDB4MDBBQTAwQUEwMEFBMDBBQUxMLCAweDAwNTUwMDU1MDA1NTAwNTVMTCwKIAkJCQkJCSAgIDB4MDBBMDAwQTAwMEEwMDBBMExMIH07Ci0JCQkJCQkgICAKKwogCWZvciAoZGF0YSA9IDAsIGkgPSAwOyBpIDwgODsgaSsrKQogCQlkYXRhID0gKGRhdGEgPDwgOCkgKyAqcGRhdGErKzsKIApAQCAtNDU0LDExICs0NTQsMTEgQEAKIAlpZiAoKCooRFdPUkQqKWRlc3QgJiBkYXRhKSAhPSBkYXRhKSB7CiAJCXJldHVybiAoMik7CiAJfQotCQorCiAJLyogRW5hYmxlIEZQVSAqLwogCW1zciA9IGdldF9tc3IoKTsKIAlzZXRfbXNyKCBtc3IgfCBNU1JfRlAgKTsKLQkKKwogCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwogCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CiAKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCiAJLyogUmVzdG9yZSBGUFUgKi8KIAlzZXRfbXNyKG1zcik7Ci0JCisKIAkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCiAJc3RhcnQgPSBnZXRfdGltZXIgKDApOwogCXdoaWxlICgqKHZvbGF0aWxlIERXT1JEKilkZXN0ICE9IGRhdGEgKSB7CmRpZmYgLS1naXQgYS9ib2FyZC9wcG1jN3h4L2luaXQuUyBiL2JvYXJkL3BwbWM3eHgvaW5pdC5TCmluZGV4IGU0ZWQ3YTYuLjk5YTgxOGEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BwbWM3eHgvaW5pdC5TCisrKyBiL2JvYXJkL3BwbWM3eHgvaW5pdC5TCkBAIC0yMSwzMTQgKzIxLDMxNCBAQAogICAgICAgb3JpICAgIHI0LHI0LDB4MDAwMAogICAgICAgbGlzICAgIHI1LDB4RkVFMAogICAgICAgb3JpICAgIHI1LHI1LDB4MDAwMAotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMDAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzAwCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDAwCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MTA1NyAgICAgICAgICAjIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDEwNTcgICAgICAgICAgIyBWRU5ET1IKICAgICAgIGxpICAgIHI4LCAweDAKICAgICAgIHN0aGJyeCAgICByMyxyOCxyNQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMDIgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzAyCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDAyCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MDAwNCAgICAgICAgICAjIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDAwMDQgICAgICAgICAgIyBJRAogICAgICAgbGkgICAgcjgsIDB4MgogICAgICAgc3RoYnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8wNCAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMDQKICAgICAgIG9yaSAgICByMyxyMywweDAwMDQKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwMDA2ICAgICAgICAgICMgUENJQ01EICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDAwNiAgICAgICAgICAjIFBDSUNNRAogICAgICAgbGkgICAgcjgsIDB4MAogICAgICAgc3RoYnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8wNiAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMDYKICAgICAgIG9yaSAgICByMyxyMywweDAwMDYKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwMEEwICAgICAgICAgICMgUENJU1RBVCAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDBBMCAgICAgICAgICAjIFBDSVNUQVQKICAgICAgIGxpICAgIHI4LCAweDIKICAgICAgIHN0aGJyeCAgICByMyxyOCxyNQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMDggICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzA4CiAgICAgICBvcmkgICAgcjMscjMsMHgwMDA4CiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MTAgICAgICAgICAgICAjIFJFVklEICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDEwICAgICAgICAgICAgIyBSRVZJRAogICAgICAgc3RiICAgIHIzLDB4MChyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzA5ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8wOQogICAgICAgb3JpICAgIHIzLHIzLDB4MDAwOQogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBQUk9HSVIgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgUFJPR0lSCiAgICAgICBzdGIgICAgcjMsMHgxKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMEEgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzBBCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDBBCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIFNVQkNDT0RFICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBTVUJDQ09ERQogICAgICAgc3RiICAgIHIzLDB4MihyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzBCICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8wQgogICAgICAgb3JpICAgIHIzLHIzLDB4MDAwQgogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweDA2ICAgICAgICAgICAgIyBQQkNDUiAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHgwNiAgICAgICAgICAgICMgUEJDQ1IKICAgICAgIHN0YiAgICByMywweDMocjUpCi0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8wQyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMEMKICAgICAgIG9yaSAgICByMyxyMywweDAwMEMKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwOCAgICAgICAgICAgICMgUENMU1IgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDggICAgICAgICAgICAjIFBDTFNSCiAgICAgICBzdGIgICAgcjMsMHgwKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMEQgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzBECiAgICAgICBvcmkgICAgcjMscjMsMHgwMDBECiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIFBMVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBQTFRSCiAgICAgICBzdGIgICAgcjMsMHgxKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMEUgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzBFCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDBFCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIEhFQURUWVBFICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBIRUFEVFlQRQogICAgICAgc3RiICAgIHIzLDB4MihyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzBGICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8wRgogICAgICAgb3JpICAgIHIzLHIzLDB4MDAwRgogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBCSVNUQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgQklTVENUUkwKICAgICAgIHN0YiAgICByMywweDMocjUpCi0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8xMCAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfMTAKICAgICAgIG9yaSAgICByMyxyMywweDAwMTAKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaXMgICAgcjMsMHgwMDAwICAgICAgICAgICMgTE1CQVIgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4MDAwMCAgICAgICAgICAjIExNQkFSCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDA4CiAgICAgICBsaSAgICByOCwgMHgwCiAgICAgICBzdHdicnggICAgcjMscjgscjUKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzE0ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8xNAogICAgICAgb3JpICAgIHIzLHIzLDB4MDAxNAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpcyAgICByMywweEYwMDAgICAgICAgICAgIyBQQ1NSQkFSICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHhGMDAwICAgICAgICAgICMgUENTUkJBUgogICAgICAgb3JpICAgIHIzLHIzLDB4MDAwMAogICAgICAgbGkgICAgcjgsIDB4MAogICAgICAgc3R3YnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8zQyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfM0MKICAgICAgIG9yaSAgICByMyxyMywweDAwM0MKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgSUxSICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIElMUgogICAgICAgc3RiICAgIHIzLDB4MChyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzNEICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl8zRAogICAgICAgb3JpICAgIHIzLHIzLDB4MDAzRAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweDAxICAgICAgICAgICAgIyBJTlRQSU4gICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHgwMSAgICAgICAgICAgICMgSU5UUElOCiAgICAgICBzdGIgICAgcjMsMHgxKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfM0UgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzNFCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDNFCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIE1JTl9HTlQgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBNSU5fR05UCiAgICAgICBzdGIgICAgcjMsMHgyKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfM0YgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzNGCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDNGCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIE1BWF9MQVQgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBNQVhfTEFUCiAgICAgICBzdGIgICAgcjMsMHgzKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfNDAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzQwCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDQwCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIEJVU05CICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBCVVNOQgogICAgICAgc3RiICAgIHIzLDB4MChyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzQxICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl80MQogICAgICAgb3JpICAgIHIzLHIzLDB4MDA0MQogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBTQlVTTkIgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgU0JVU05CCiAgICAgICBzdGIgICAgcjMsMHgxKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfNDYgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzQ2CiAgICAgICBvcmkgICAgcjMscjMsMHgwMDQ2CiAgICAgICBzdHdicnggICAgcjMsMCxyNAotIyAgICAgIGxpICAgICByMywweEUwODAgICAgICAgICAgIyBQQ0lBUkIgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBsaSAgICAgcjMsLTB4MUY4MCAgICAgICAgICAjIFBDSUFSQiAgICAgICAgICAgICAgICAgICAgICAgICAKKyMgICAgICBsaSAgICAgcjMsMHhFMDgwICAgICAgICAgICMgUENJQVJCCisgICAgICBsaSAgICAgcjMsLTB4MUY4MCAgICAgICAgICAjIFBDSUFSQgogICAgICAgbGkgICAgcjgsIDB4MgogICAgICAgc3RoYnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl83MCAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfNzAKICAgICAgIG9yaSAgICByMyxyMywweDAwNzAKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwMDAwICAgICAgICAgICMgUE1DUjEgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDAwMCAgICAgICAgICAjIFBNQ1IxCiAgICAgICBsaSAgICByOCwgMHgwCiAgICAgICBzdGhicnggICAgcjMscjgscjUKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzcyICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl83MgogICAgICAgb3JpICAgIHIzLHIzLDB4MDA3MgogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweEMwICAgICAgICAgICAgIyBQTUNSMiAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHhDMCAgICAgICAgICAgICMgUE1DUjIKICAgICAgIHN0YiAgICByMywweDIocjUpCi0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl83MyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfNzMKICAgICAgIG9yaSAgICByMyxyMywweDAwNzMKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHhFRiAgICAgICAgICAgICMgT0RDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4RUYgICAgICAgICAgICAjIE9EQ1IKICAgICAgIHN0YiAgICByMywweDMocjUpCi0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl83NCAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfNzQKICAgICAgIG9yaSAgICByMyxyMywweDAwNzQKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHg3RDAwICAgICAgICAgICMgQ0xLRENSICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4N0QwMCAgICAgICAgICAjIENMS0RDUgogICAgICAgbGkgICAgcjgsIDB4MAogICAgICAgc3RoYnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl83NiAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfNzYKICAgICAgIG9yaSAgICByMyxyMywweDAwNzYKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgTURDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIE1EQ1IKICAgICAgIHN0YiAgICByMywweDIocjUpCiAgICAgICBsaXMgICAgcjYsMHhGQ0UwCiAgICAgICBvcmkgICAgcjYscjYsMHgwMDAwICAgICAgICMgcjYgaXMgdGhlIEVVTUJBUiBCYXNlIEFkZHJlc3MKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzc4ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl83OAogICAgICAgb3JpICAgIHIzLHIzLDB4MDA3OAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpcyAgICByMywweEZDRTAgICAgICAgICAgIyBFVU1CQkFSICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHhGQ0UwICAgICAgICAgICMgRVVNQkJBUgogICAgICAgb3JpICAgIHIzLHIzLDB4MDAwMAogICAgICAgbGkgICAgcjgsIDB4MAogICAgICAgc3R3YnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl84MCAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfODAKICAgICAgIG9yaSAgICByMyxyMywweDAwODAKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaXMgICAgcjMsMHhGRkZGICAgICAgICAgICMgTVNBRERSMSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4RkZGRiAgICAgICAgICAjIE1TQUREUjEKICAgICAgIG9yaSAgICByMyxyMywweDQwMDAKICAgICAgIGxpICAgIHI4LCAweDAKICAgICAgIHN0d2JyeCAgICByMyxyOCxyNQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfODQgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzg0CiAgICAgICBvcmkgICAgcjMscjMsMHgwMDg0CiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGlzICAgIHIzLDB4RkZGRiAgICAgICAgICAjIE1TQUREUjIgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweEZGRkYgICAgICAgICAgIyBNU0FERFIyCiAgICAgICBvcmkgICAgcjMscjMsMHhGRkZGCiAgICAgICBsaSAgICByOCwgMHgwCiAgICAgICBzdHdicnggICAgcjMscjgscjUKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzg4ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl84OAogICAgICAgb3JpICAgIHIzLHIzLDB4MDA4OAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpcyAgICByMywweDAzMDMgICAgICAgICAgIyBFTVNBRERSMSAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHgwMzAzICAgICAgICAgICMgRU1TQUREUjEKICAgICAgIG9yaSAgICByMyxyMywweDAwMDAKICAgICAgIGxpICAgIHI4LCAweDAKICAgICAgIHN0d2JyeCAgICByMyxyOCxyNQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfOEMgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzhDCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDhDCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGlzICAgIHIzLDB4MDMwMyAgICAgICAgICAjIEVNU0FERFIyICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDAzMDMgICAgICAgICAgIyBFTVNBRERSMgogICAgICAgb3JpICAgIHIzLHIzLDB4MDMwMwogICAgICAgbGkgICAgcjgsIDB4MAogICAgICAgc3R3YnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl85MCAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfOTAKICAgICAgIG9yaSAgICByMyxyMywweDAwOTAKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaXMgICAgcjMsMHhGRkZGICAgICAgICAgICMgRU1FQUREUjEgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4RkZGRiAgICAgICAgICAjIEVNRUFERFIxCiAgICAgICBvcmkgICAgcjMscjMsMHg3RjNGCiAgICAgICBsaSAgICByOCwgMHgwCiAgICAgICBzdHdicnggICAgcjMscjgscjUKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzk0ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl85NAogICAgICAgb3JpICAgIHIzLHIzLDB4MDA5NAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpcyAgICByMywweEZGRkYgICAgICAgICAgIyBFTUVBRERSMiAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHhGRkZGICAgICAgICAgICMgRU1FQUREUjIKICAgICAgIG9yaSAgICByMyxyMywweEZGRkYKICAgICAgIGxpICAgIHI4LCAweDAKICAgICAgIHN0d2JyeCAgICByMyxyOCxyNQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfOTggICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSXzk4CiAgICAgICBvcmkgICAgcjMscjMsMHgwMDk4CiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGlzICAgIHIzLDB4MDMwMyAgICAgICAgICAjIEVYVEVNRU0xICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDAzMDMgICAgICAgICAgIyBFWFRFTUVNMQogICAgICAgb3JpICAgIHIzLHIzLDB4MDAwMAogICAgICAgbGkgICAgcjgsIDB4MAogICAgICAgc3R3YnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl85QyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfOUMKICAgICAgIG9yaSAgICByMyxyMywweDAwOUMKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaXMgICAgcjMsMHgwMzAzICAgICAgICAgICMgRVhURU1FTTIgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4MDMwMyAgICAgICAgICAjIEVYVEVNRU0yCiAgICAgICBvcmkgICAgcjMscjMsMHgwMzAzCiAgICAgICBsaSAgICByOCwgMHgwCiAgICAgICBzdHdicnggICAgcjMscjgscjUKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0EwICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9BMAogICAgICAgb3JpICAgIHIzLHIzLDB4MDBBMAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweDAzICAgICAgICAgICAgIyBNRU1CTktFTiAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHgwMyAgICAgICAgICAgICMgTUVNQk5LRU4KICAgICAgIHN0YiAgICByMywweDAocjUpCi0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9BMyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfQTMKICAgICAgIG9yaSAgICByMyxyMywweDAwQTMKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgTUVNUE1PREUgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIE1FTVBNT0RFCiAgICAgICBzdGIgICAgcjMsMHgzKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfQjggICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0I4CiAgICAgICBvcmkgICAgcjMscjMsMHgwMEI4CiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIEVDQ0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBFQ0NDTlQKICAgICAgIHN0YiAgICByMywweDAocjUpCi0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9COSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfQjkKICAgICAgIG9yaSAgICByMyxyMywweDAwQjkKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgRUNDVFJHICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIEVDQ1RSRwogICAgICAgc3RiICAgIHIzLDB4MShyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0MwICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9DMAogICAgICAgb3JpICAgIHIzLHIzLDB4MDBDMAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweEZGICAgICAgICAgICAgIyBFUlJFTlIxICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHhGRiAgICAgICAgICAgICMgRVJSRU5SMQogICAgICAgc3RiICAgIHIzLDB4MChyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0MxICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9DMQogICAgICAgb3JpICAgIHIzLHIzLDB4MDBDMQogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBFUlJEUjEgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgRVJSRFIxCiAgICAgICBzdGIgICAgcjMsMHgxKHI1KQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfQzMgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0MzCiAgICAgICBvcmkgICAgcjMscjMsMHgwMEMzCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4NTAgICAgICAgICAgICAjIElQQkVTUiAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweDUwICAgICAgICAgICAgIyBJUEJFU1IKICAgICAgIHN0YiAgICByMywweDMocjUpCi0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9DNCAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfQzQKICAgICAgIG9yaSAgICByMyxyMywweDAwQzQKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHhCRiAgICAgICAgICAgICMgRVJSRU5SMiAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4QkYgICAgICAgICAgICAjIEVSUkVOUjIKICAgICAgIHN0YiAgICByMywweDAocjUpCi0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9DNSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfQzUKICAgICAgIG9yaSAgICByMyxyMywweDAwQzUKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgRVJSRFIyICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGkgICAgIHIzLDB4MDAgICAgICAgICAgICAjIEVSUkRSMgogICAgICAgc3RiICAgIHIzLDB4MShyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0M3ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9DNwogICAgICAgb3JpICAgIHIzLHIzLDB4MDBDNwogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpICAgICByMywweDAwICAgICAgICAgICAgIyBQQ0lCRVNSICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaSAgICAgcjMsMHgwMCAgICAgICAgICAgICMgUENJQkVTUgogICAgICAgc3RiICAgIHIzLDB4MyhyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0M4ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9DOAogICAgICAgb3JpICAgIHIzLHIzLDB4MDBDOAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpcyAgICByMywweDAwMDAgICAgICAgICAgIyBCRVJSQUREUiAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHgwMDAwICAgICAgICAgICMgQkVSUkFERFIKICAgICAgIG9yaSAgICByMyxyMywweEUwRkUKICAgICAgIGxpICAgIHI4LCAweDAKICAgICAgIHN0d2JyeCAgICByMyxyOCxyNQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfRTAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0UwCiAgICAgICBvcmkgICAgcjMscjMsMHgwMEUwCiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGkgICAgIHIzLDB4QzAgICAgICAgICAgICAjIEFNQk9SICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpICAgICByMywweEMwICAgICAgICAgICAgIyBBTUJPUgogICAgICAgc3RiICAgIHIzLDB4MChyNSkKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0Y0ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9GNAogICAgICAgb3JpICAgIHIzLHIzLDB4MDBGNAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpcyAgICByMywweDAwMDAgICAgICAgICAgIyBNQ0NSMiAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHgwMDAwICAgICAgICAgICMgTUNDUjIKICAgICAgIG9yaSAgICByMyxyMywweDAyMEMKICAgICAgIGxpICAgIHI4LCAweDAKICAgICAgIHN0d2JyeCAgICByMyxyOCxyNQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfRjggICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0Y4CiAgICAgICBvcmkgICAgcjMscjMsMHgwMEY4CiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGlzICAgIHIzLDB4MDIzMCAgICAgICAgICAjIE1DQ1IzICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDAyMzAgICAgICAgICAgIyBNQ0NSMwogICAgICAgb3JpICAgIHIzLHIzLDB4MDAwMAogICAgICAgbGkgICAgcjgsIDB4MAogICAgICAgc3R3YnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9GQyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfRkMKICAgICAgIG9yaSAgICByMyxyMywweDAwRkMKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaXMgICAgcjMsMHgyNTMyICAgICAgICAgICMgTUNDUjQgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4MjUzMiAgICAgICAgICAjIE1DQ1I0CiAgICAgICBvcmkgICAgcjMscjMsMHgyMjIwCiAgICAgICBsaSAgICByOCwgMHgwCiAgICAgICBzdHdicnggICAgcjMscjgscjUKLSAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0YwICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9GMAogICAgICAgb3JpICAgIHIzLHIzLDB4MDBGMAogICAgICAgc3R3YnJ4ICAgIHIzLDAscjQKLSAgICAgIGxpcyAgICByMywweEZGQzggICAgICAgICAgIyBNQ0NSMSAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICBsaXMgICAgcjMsMHhGRkM4ICAgICAgICAgICMgTUNDUjEKICAgICAgIG9yaSAgICByMyxyMywweDAwMDAKICAgICAgIGxpICAgIHI4LCAweDAKICAgICAgIHN0d2JyeCAgICByMyxyOCxyNQotICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfQTggICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweDgwMDAgICAgICAgICAgIyBBRERSX0E4CiAgICAgICBvcmkgICAgcjMscjMsMHgwMEE4CiAgICAgICBzdHdicnggICAgcjMsMCxyNAotICAgICAgbGlzICAgIHIzLDB4RkYxNCAgICAgICAgICAjIFBJQ1IxICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIGxpcyAgICByMywweEZGMTQgICAgICAgICAgIyBQSUNSMQogICAgICAgb3JpICAgIHIzLHIzLDB4MUNDOAogICAgICAgbGkgICAgcjgsIDB4MAogICAgICAgc3R3YnJ4ICAgIHIzLHI4LHI1Ci0gICAgICBsaXMgICAgcjMsMHg4MDAwICAgICAgICAgICMgQUREUl9BQyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4ODAwMCAgICAgICAgICAjIEFERFJfQUMKICAgICAgIG9yaSAgICByMyxyMywweDAwQUMKICAgICAgIHN0d2JyeCAgICByMywwLHI0Ci0gICAgICBsaXMgICAgcjMsMHgwMDAwICAgICAgICAgICMgUElDUjIgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgbGlzICAgIHIzLDB4MDAwMCAgICAgICAgICAjIFBJQ1IyCiAgICAgICBvcmkgICAgcjMscjMsMHgwMDAwCiAgICAgICBsaSAgICByOCwgMHgwCiAgICAgICBzdHdicnggICAgcjMscjgscjUKZGlmZiAtLWdpdCBhL2JvYXJkL3BwbWM3eHgvcHBtYzd4eC5jIGIvYm9hcmQvcHBtYzd4eC9wcG1jN3h4LmMKaW5kZXggMDU5N2M3Mi4uNDAyYWM1ZSAxMDA2NDQKLS0tIGEvYm9hcmQvcHBtYzd4eC9wcG1jN3h4LmMKKysrIGIvYm9hcmQvcHBtYzd4eC9wcG1jN3h4LmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogcHBtYzd4eC5jCiAgKiAtLS0tLS0tLS0KLSAqIAorICoKICAqIE1haW4gYm9hcmQtc3BlY2lmaWMgcm91dGluZXMgZm9yIFdpbmQgUml2ZXIgUFBNQyA3eHgvNzR4eCBib2FyZC4KLSAqIAorICoKICAqIEJ5IFJpY2hhcmQgRGFudGVyIChyaWNoYXJkLmRhbnRlckB3aW5kcml2ZXIuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA1IFdpbmQgUml2ZXIgU3lzdGVtcwogICovCkBAIC0yNCw3ICsyNCw3IEBACiAKIC8qCiAgKiBpbml0ZHJhbSgpCi0gKiAKKyAqCiAgKiBUaGlzIGZ1bmN0aW9uIG5vcm1hbGx5IGluaXRpYWxpc2VzIHRoZSAoUylEUkFNIG9mIHRoZSBzeXN0ZW0uIEZvciB0aGlzIGJvYXJkCiAgKiB0aGUgU0RSQU0gd2FzIGFscmVhZHkgaW5pdGlhbGlzZWQgYnkgYm9hcmRfYXNtX2luaXQgKHNlZSBpbml0LlMpIHNvIHdlIGp1c3QKICAqIHJldHVybiB0aGUgc2l6ZSBvZiBSQU0uCkBAIC0zNywxMiArMzcsMTIgQEAKIAogLyoKICAqIGFmdGVyX3JlbG9jKCkKLSAqIAorICoKICAqIFRoaXMgaXMgY2FsbGVkIGFmdGVyIFUtQm9vdCBoYXMgYmVlbiBjb3BpZWQgZnJvbSBGbGFzaC9ST00gdG8gUkFNLiBJdCBnaXZlcwogICogdXMgYW4gb3Bwb3J0dW5pdHkgdG8gZG8gc29tZSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtCiAgKiBpcyBpbml0aWFsaXNlZC4gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZywgc28gd2UganVzdCBjYWxsIGJvYXJkX2luaXRfcigpCiAgKiB3aGljaCBzaG91bGQgbmV2ZXIgcmV0dXJuLgotICovIAorICovCiB2b2lkIGFmdGVyX3JlbG9jKCB1bG9uZyBkZXN0X2FkZHIsIGdkX3QqIGdkICkKIHsKIAkvKiBKdW1wIHRvIHRoZSBtYWluIFUtQm9vdCBib2FyZCBpbml0IGNvZGUgKi8KQEAgLTUyLDcgKzUyLDcgQEAKIAogLyoKICAqIGNoZWNrYm9hcmQoKQotICogCisgKgogICogV2UgY291bGQgZG8gc29tZSBib2FyZCBsZXZlbCBjaGVja3MgaGVyZSwgc3VjaCBhcyB3b3JraW5nIG91dCB3aGF0IHZlcnNpb24KICAqIGl0IGlzLCBidXQgZm9yIHRoaXMgYm9hcmQgd2Ugc2ltcGx5IGRpc3BsYXkgaXQncyBuYW1lIChvbiB0aGUgY29uc29sZSkuCiAgKi8KQEAgLTY1LDcgKzY1LDcgQEAKIAogLyoKICAqIG1pc2NfaW5pdF9yCi0gKiAKKyAqCiAgKiBVc2VkIGZvciBvdGhlciBzZXR1cCB3aGljaCBuZWVkcyB0byBiZSBkb25lIGxhdGUgaW4gdGhlIGJyaW5nLXVwIHBoYXNlLgogICovCiBpbnQgbWlzY19pbml0X3IoIHZvaWQgKQpAQCAtNzgsMjcgKzc4LDI3IEBACiAKIAkvKiBFbmFibGUgdGhlIEktQ2FjaGUgKi8KIAlpY2FjaGVfZW5hYmxlKCk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAogCiAvKgogICogZG9fcmVzZXQoKQotICogCisgKgogICogU2hlbGwgY29tbWFuZCB0byByZXNldCB0aGUgYm9hcmQuCiAgKi8KIHZvaWQgZG9fcmVzZXQoIGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKIHsKIAlwcmludGYoICJSZXNldHRpbmcuLi5cbiIgKTsKLQkKKwogCS8qIERpc2FiZSBhbmQgaW52YWxpZGF0ZSBjYWNoZSAqLwogCWljYWNoZV9kaXNhYmxlKCk7CiAJZGNhY2hlX2Rpc2FibGUoKTsKIAogCS8qIEp1bXAgdG8gd2FybSBzdGFydCAoaW4gUkFNKSAqLwogCV9zdGFydF93YXJtKCk7Ci0JCisKIAkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KIAl3aGlsZSgxKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3BwbWM4MjYwL01ha2VmaWxlIGIvYm9hcmQvcHBtYzgyNjAvTWFrZWZpbGUKaW5kZXggMzUxZjRlZS4uZTE3Y2I3YSAxMDA2NDQKLS0tIGEvYm9hcmQvcHBtYzgyNjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvcHBtYzgyNjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gcHBtYzgyNjAubworQ09CSlMJOj0gcHBtYzgyNjAubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL3AzcDQ0MC9NYWtlZmlsZSBiL2JvYXJkL3Byb2RyaXZlL3AzcDQ0MC9NYWtlZmlsZQppbmRleCA0NzExNmQzLi5hNDdhMDY3IDEwMDY0NAotLS0gYS9ib2FyZC9wcm9kcml2ZS9wM3A0NDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvcHJvZHJpdmUvcDNwNDQwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAyLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDExICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubworQ09CSlMJPSAkKEJPQVJEKS5vCiBTT0JKUwk9IGluaXQubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKwogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIApAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9wcm9kcml2ZS9wZG5iMy9NYWtlZmlsZSBiL2JvYXJkL3Byb2RyaXZlL3BkbmIzL01ha2VmaWxlCmluZGV4IGYzY2Q1YTMuLjMyZmZhYzAgMTAwNjQ0Ci0tLSBhL2JvYXJkL3Byb2RyaXZlL3BkbmIzL01ha2VmaWxlCisrKyBiL2JvYXJkL3Byb2RyaXZlL3BkbmIzL01ha2VmaWxlCkBAIC0yMywxMiArMjMsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBmbGFzaC5vIHBkbmIzLm8gbmFuZC5vCitDT0JKUwk6PSBmbGFzaC5vIHBkbmIzLm8gbmFuZC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL3BkbmIzL2NvbmZpZy5tayBiL2JvYXJkL3Byb2RyaXZlL3BkbmIzL2NvbmZpZy5tawppbmRleCA2YjBmMThiLi43NjcwNzU4IDEwMDY0NAotLS0gYS9ib2FyZC9wcm9kcml2ZS9wZG5iMy9jb25maWcubWsKKysrIGIvYm9hcmQvcHJvZHJpdmUvcGRuYjMvY29uZmlnLm1rCkBAIC0xLDQgKzEsNCBAQAogVEVYVF9CQVNFID0gMHgwMWYwMDAwMAogCiAjIGluY2x1ZGUgTlBFIGV0aGVybmV0IGRyaXZlcgotQk9BUkRMSUJTID0gY3B1L2l4cC9ucGUvbGlibnBlLmEKK0JPQVJETElCUyA9ICQob2JqKWNwdS9peHAvbnBlL2xpYm5wZS5hCmRpZmYgLS1naXQgYS9ib2FyZC9wc3llbnQvcGNpNTQ0MS9NYWtlZmlsZSBiL2JvYXJkL3BzeWVudC9wY2k1NDQxL01ha2VmaWxlCmluZGV4IDhlNTVjOWIuLjdkNzRiNGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BzeWVudC9wY2k1NDQxL01ha2VmaWxlCisrKyBiL2JvYXJkL3BzeWVudC9wY2k1NDQxL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTIyLDE3ICsyMiwyMiBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAogQ09NT0JKUyA6PSAuLi9jb21tb24vQU1ETFYwNjVELm8KIAotT0JKUwk6PSAkKEJPQVJEKS5vICQoQ09NT0JKUykKK0NPQkpTCTo9ICQoQk9BUkQpLm8gJChDT01PQkpTKQogCi1TT0JKUwk9CitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAotJChMSUIpOiAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTQyLDkgKzQ3LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9wc3llbnQvcGsxYzIwL01ha2VmaWxlIGIvYm9hcmQvcHN5ZW50L3BrMWMyMC9NYWtlZmlsZQppbmRleCA1YzFkYjAzLi5jYmU5OTE5IDEwMDY0NAotLS0gYS9ib2FyZC9wc3llbnQvcGsxYzIwL01ha2VmaWxlCisrKyBiL2JvYXJkL3BzeWVudC9wazFjMjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjIsMTcgKzIyLDIyIEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCiBDT01PQkpTIDo9IC4uL2NvbW1vbi9BTURMVjA2NUQubwogCi1PQkpTCTo9ICQoQk9BUkQpLm8gbGVkLm8gJChDT01PQkpTKQorQ09CSlMJOj0gJChCT0FSRCkubyBsZWQubyAkKENPTU9CSlMpCiAKLVNPQkpTCT0KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCi0kKExJQik6ICQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtNDIsOSArNDcsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3B1cnBsZS9NYWtlZmlsZSBiL2JvYXJkL3B1cnBsZS9NYWtlZmlsZQppbmRleCBiMmYyZmMwLi4xMjYyZDgwIDEwMDY0NAotLS0gYS9ib2FyZC9wdXJwbGUvTWFrZWZpbGUKKysrIGIvYm9hcmQvcHVycGxlL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjQsMTkgKzI0LDIzIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gc2NvbnNvbGUubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gc2NvbnNvbGUubwogU09CSlMJPSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3B4YTI1NV9pZHAvTWFrZWZpbGUgYi9ib2FyZC9weGEyNTVfaWRwL01ha2VmaWxlCmluZGV4IGI1ZjM1MmEuLjJkMDA3N2IgMTAwNjQ0Ci0tLSBhL2JvYXJkL3B4YTI1NV9pZHAvTWFrZWZpbGUKKysrIGIvYm9hcmQvcHhhMjU1X2lkcC9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKIAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjQsMTIgKzI0LDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gcHhhX2lkcC5vCitDT0JKUwk6PSBweGFfaWRwLm8KIFNPQkpTCTo9IG1lbXNldHVwLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTQwLDkgKzQ0LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9xdWFudHVtL01ha2VmaWxlIGIvYm9hcmQvcXVhbnR1bS9NYWtlZmlsZQppbmRleCBlNTBmNWZmLi42MDI4NjVmIDEwMDY0NAotLS0gYS9ib2FyZC9xdWFudHVtL01ha2VmaWxlCisrKyBiL2JvYXJkL3F1YW50dW0vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTkgKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZwZ2EubworQ09CSlMJPSAkKEJPQVJEKS5vIGZwZ2EubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvcjM2MG1waS9NYWtlZmlsZSBiL2JvYXJkL3IzNjBtcGkvTWFrZWZpbGUKaW5kZXggMTNjZTlmYy4uMDE3OWI0NiAxMDA2NDQKLS0tIGEvYm9hcmQvcjM2MG1waS9NYWtlZmlsZQorKysgYi9ib2FyZC9yMzYwbXBpL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBwY21jaWEubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvcjM2MG1waS9wY21jaWEuYyBiL2JvYXJkL3IzNjBtcGkvcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzNGFjOAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3IzNjBtcGkvcGNtY2lhLmMKQEAgLTAsMCArMSwyMzYgQEAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM4eHguaD4KKyNpbmNsdWRlIDxwY21jaWEuaD4KKworI3VuZGVmCUNPTkZJR19QQ01DSUEKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19QQ01DSUEKKworI2RlZmluZSBQQ01DSUFfQk9BUkRfTVNHICJSMzYwTVBJIgorCitpbnQgcGNtY2lhX2hhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKKwl2b2xhdGlsZSBjcG04eHhfdAkqY3A7CisJdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOworCXZvbGF0aWxlIHN5c2NvbmY4eHhfdAkqc3lzcDsKKwl1aW50IHJlZywgbWFzazsKKworCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7CisKKwl1ZGVsYXkoMTAwMDApOworCisJaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXN5c3AgID0gKHN5c2NvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fc2l1X2NvbmYpKTsKKwlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKKworCS8qCisJKiBDb25maWd1cmUgU0lVTUNSIHRvIGVuYWJsZSBQQ01DSUEgcG9ydCBCCisJKiAoVkZMU1swOjFdIGFyZSBub3QgdXNlZCBmb3IgZGVidWdnaW5nLCB3ZSBjb25uZWN0IEZSWiMgaW5zdGVhZCkKKwkqLworCXN5c3AtPnNjX3NpdW1jciAmPSB+U0lVTUNSX0RCR0MxMTsJLyogc2V0IERCR0MgdG8gMDAgKi8KKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0ZSwgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLworCXBjbXAtPnBjbWNfcHNjciA9ICBQQ01DSUFfTUFTSyhfc2xvdF8pOworCXBjbXAtPnBjbWNfcGVyICY9IH5QQ01DSUFfTUFTSyhfc2xvdF8pOworCisJLyoKKwkqIERpc2FibGUgaW50ZXJydXB0cywgRE1BLCBhbmQgUENNQ0lBIGJ1ZmZlcnMKKwkqIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCisJKi8KKwlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7CisJcmVnICA9IDA7CisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKKwl1ZGVsYXkoNTAwKTsKKworCS8qCisJKiBDb25maWd1cmUgUG9ydHMgQSwgQiAmIEMgcGlucyBmb3IKKwkqIDUgVm9sdHMgRW5hYmxlIGFuZCAzIFZvbHRzIGVuYWJsZQorCSovCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNwYXIgJj0gfigweDA0MDApOworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3Bjc28gICY9IH4oMHgwNDAwKTsvKgorCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGlyIHw9IDB4MDQwMDsqLworCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFwYXIgJj0gfigweDAyMDApOy8qCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkaXIgfD0gMHgwMjAwOyovCisjaWYgMAorCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BicGFyICY9IH4oMHhDMDAwKTsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYmRpciAmPSB+KDB4QzAwMCk7CisjZW5kaWYKKwkvKiByZW1vdmUgYWxsIHBvd2VyICovCisKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCB8PSAweDA0MDA7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgfD0gMHgwMjAwOworCisJLyoKKwkqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGNhcmQgaW4gdGhlIHNsb3QsIHRoZW4gY29uZmlndXJlIHRoZSBpbnRlcmZhY2UuCisJKi8KKwl1ZGVsYXkoMTAwMDApOworCWRlYnVnICgiWyVkXSAlczogUElQUiglcCk9MHgleFxuIiwKKwkgICAgICAgX19MSU5FX18sX19GVU5DVElPTl9fLAorCSAgICAgICAmKHBjbXAtPnBjbWNfcGlwcikscGNtcC0+cGNtY19waXByKTsKKwlpZiAocGNtcC0+cGNtY19waXByICYgKDB4MTgwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKSB7CisJCXByaW50ZiAoIiAgIE5vIENhcmQgZm91bmRcbiIpOworCQlyZXR1cm4gKDEpOworCX0KKworCS8qCisJKiBQb3dlciBPbi4KKwkqLworCW1hc2sgPSBQQ01DSUFfVlMxKHNsb3QpIHwgUENNQ0lBX1ZTMihzbG90KTsKKwlyZWcgID0gcGNtcC0+cGNtY19waXByOworCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwKKwkgICAgICAgcmVnLAorCSAgICAgICAocmVnJlBDTUNJQV9WUzEoc2xvdCkpPyJuIjoiZmYiLAorCSAgICAgICAocmVnJlBDTUNJQV9WUzIoc2xvdCkpPyJuIjoiZmYiKTsKKwlpZiAoKHJlZyAmIG1hc2spID09IG1hc2spIHsKKwkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgJj0gfigweDQwMDApOworCQlwdXRzICgiIDUuMFYgY2FyZCBmb3VuZDogIik7CisJfSBlbHNlIHsKKwkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgJj0gfigweDAwMDIpOworCQlwdXRzICgiIDMuM1YgY2FyZCBmb3VuZDogIik7CisJfQorCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGlyIHw9IDB4MDQwMDsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciB8PSAweDAyMDA7CisjaWYgMAorCS8qICBWQ0Mgc3dpdGNoIGVycm9yIGZsYWcsIFBDTUNJQSBzbG90IElOUEFDS18gcGluICovCisJY3AtPmNwX3BiZGlyICY9IH4oMHgwMDIwIHwgMHgwMDEwKTsKKwljcC0+Y3BfcGJwYXIgJj0gfigweDAwMjAgfCAweDAwMTApOworCXVkZWxheSg1MDAwMDApOworI2VuZGlmCisJZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7CisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCisJdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCisKKwlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOworCisJcmV0dXJuICgwKTsKK30KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKKwl1X2xvbmcgcmVnOworCisJZGVidWcgKCJoYXJkd2FyZV9kaXNhYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJcGNtcCA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCisJLyogcmVtb3ZlIGFsbCBwb3dlciAqLworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0IHw9IDB4MDQwMDsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRhdCB8PSAweDAyMDA7CisKKwkvKiBDb25maWd1cmUgUENNQ0lBIEdlbmVyYWwgQ29udHJvbCBSZWdpc3RlciAqLworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgID0gMDsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCisJdWRlbGF5KDEwMDAwKTsKKworCXJldHVybiAoMCk7Cit9CisjZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KKworCitpbnQgcGNtY2lhX3ZvbHRhZ2Vfc2V0KGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKKwl1X2xvbmcgcmVnOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIgorCQkJUENNQ0lBX0JPQVJEX01TRworCQkJIiBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKKwknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKKworCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlwY21wID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7CisJLyoKKwkqIERpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgKGlzb2xhdGUgdGhlIGludGVyZmFjZSkKKwkqIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCisJKi8KKwlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7CisJcmVnICA9IFBDTUNJQV9QR0NSWChfc2xvdF8pOworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7CisJdWRlbGF5KDUwMCk7CisKKwkvKgorCSogQ29uZmlndXJlIFBvcnRzIEEgJiBDIHBpbnMgZm9yCisJKiA1IFZvbHRzIEVuYWJsZSBhbmQgMyBWb2x0cyBlbmFibGUsCisJKiBUdXJuIG9mZiBhbGwgcG93ZXIKKwkqLworCWRlYnVnICgiUENNQ0lBIHBvd2VyIE9GRlxuIik7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNwYXIgJj0gfigweDA0MDApOworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3Bjc28gICY9IH4oMHgwNDAwKTsvKgorCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGlyIHw9IDB4MDQwMDsqLworCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFwYXIgJj0gfigweDAyMDApOy8qCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkaXIgfD0gMHgwMjAwOyovCisKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCB8PSAweDA0MDA7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgfD0gMHgwMjAwOworCisJcmVnID0gMDsKKwlzd2l0Y2godmNjKSB7CisJCWNhc2UgIDA6IAkJYnJlYWs7CisJCWNhc2UgMzM6IHJlZyB8PSAweDAyMDA7CWJyZWFrOworCQljYXNlIDUwOiByZWcgfD0gMHgwNDAwOwlicmVhazsKKwkJZGVmYXVsdDogCQlnb3RvIGRvbmU7CisJfQorCisJLyogQ2hlY2tpbmcgc3VwcG9ydGVkIHZvbHRhZ2VzICovCisKKwlkZWJ1ZyAoIlBJUFI6IDB4JXggLS0+ICVzXG4iLAorCSAgICAgICBwY21wLT5wY21jX3BpcHIsCisJICAgICAgIChwY21wLT5wY21jX3BpcHIgJiAweDAwMDA4MDAwKSA/ICJvbmx5IDUgViIgOiAiY2FuIGRvIDMuM1YiKTsKKworCWlmIChyZWcgJiAweDAyMDApCisJCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0ICY9ICFyZWc7CisJaWYgKHJlZyAmIDB4MDQwMCkKKwkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgJj0gIXJlZzsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RpciB8PSAweDAyMDA7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkaXIgfD0gMHgwNDAwOworCWlmIChyZWcpIHsKKwkJZGVidWcgKCJQQ01DSUEgcG93ZXJlZCBhdCAlc1ZcbiIsCisJCSAgICAgICAocmVnJjB4MDQwMCkgPyAiNS4wIiA6ICIzLjMiKTsKKwl9IGVsc2UgeworCQlkZWJ1ZyAoIlBDTUNJQSBwb3dlcmVkIGRvd25cbiIpOworCX0KKworZG9uZToKKwkJCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKKwlyZWcgID0gIFBDTUNJQV9QR0NSWChfc2xvdF8pOworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKKwl1ZGVsYXkoNTAwKTsKKworCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWMsIERPTkVcbiIsCisJICAgICAgIHNsb3QrJ0EnKTsKKwlyZXR1cm4gKDApOworfQorCisjZW5kaWYJLyogQ0NPTkZJR19QQ01DSUEgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3I1MjAwL01ha2VmaWxlIGIvYm9hcmQvcjUyMDAvTWFrZWZpbGUKaW5kZXggZDAzNjRlZC4uMjk1MWI5NiAxMDA2NDQKLS0tIGEvYm9hcmQvcjUyMDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvcjUyMDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8KK0NPQkpTCT0gJChCT0FSRCkubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvcmF0dGxlci9NYWtlZmlsZSBiL2JvYXJkL3JhdHRsZXIvTWFrZWZpbGUKaW5kZXggNTJmMGZkNi4uZTg4MGY4NyAxMDA2NDQKLS0tIGEvYm9hcmQvcmF0dGxlci9NYWtlZmlsZQorKysgYi9ib2FyZC9yYXR0bGVyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubworQ09CSlMJOj0gJChCT0FSRCkubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3JiYzgyMy9NYWtlZmlsZSBiL2JvYXJkL3JiYzgyMy9NYWtlZmlsZQppbmRleCAwMTIxZGRjLi5mMDA0ODgxIDEwMDY0NAotLS0gYS9ib2FyZC9yYmM4MjMvTWFrZWZpbGUKKysrIGIvYm9hcmQvcmJjODIzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGtiZC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBrYmQubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvcm11L01ha2VmaWxlIGIvYm9hcmQvcm11L01ha2VmaWxlCmluZGV4IDEzY2U5ZmMuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3JtdS9NYWtlZmlsZQorKysgYi9ib2FyZC9ybXUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9ycHhzdXBlci9NYWtlZmlsZSBiL2JvYXJkL3JweHN1cGVyL01ha2VmaWxlCmluZGV4IDQ1MzUxMDYuLjI2ODljNmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3JweHN1cGVyL01ha2VmaWxlCisrKyBiL2JvYXJkL3JweHN1cGVyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDExICsyMywxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHJweHN1cGVyLm8gZmxhc2gubyBtaWlfcGh5Lm8KK0NPQkpTCTo9IHJweHN1cGVyLm8gZmxhc2gubyBtaWlfcGh5Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9yc2Rwcm90by9NYWtlZmlsZSBiL2JvYXJkL3JzZHByb3RvL01ha2VmaWxlCmluZGV4IDk5MzQ3ODcuLjRhN2JkM2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL3JzZHByb3RvL01ha2VmaWxlCisrKyBiL2JvYXJkL3JzZHByb3RvL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDI1ICsyMywyOSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHJzZHByb3RvLm8gZmxhc2gubworQ09CSlMJOj0gcnNkcHJvdG8ubyBmbGFzaC5vCiBTT0JKUwk6PSBmbGFzaF9hc20ubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKIAogZGlzdGNsZWFuOgljbGVhbgotCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Fjc25nL01ha2VmaWxlIGIvYm9hcmQvc2Fjc25nL01ha2VmaWxlCmluZGV4IGJhZWZhNGEuLjJkZmYyNDIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhY3NuZy9NYWtlZmlsZQorKysgYi9ib2FyZC9zYWNzbmcvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gc2Fjc25nLm8gZmxhc2gubyBjbGtpbml0Lm8KK0NPQkpTCTo9IHNhY3NuZy5vIGZsYXNoLm8gY2xraW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zOCw5ICs0Miw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2FuZGJ1cnN0L2thcmVmL01ha2VmaWxlIGIvYm9hcmQvc2FuZGJ1cnN0L2thcmVmL01ha2VmaWxlCmluZGV4IDhiMzE3M2MuLjYwZDU1NzMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhbmRidXJzdC9rYXJlZi9NYWtlZmlsZQorKysgYi9ib2FyZC9zYW5kYnVyc3Qva2FyZWYvTWFrZWZpbGUKQEAgLTEsNCArMSw3IEBACiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIwogIyAoQykgQ29weXJpZ2h0IDIwMDUKICMgU2FuZGJ1cnN0IENvcnBvcmF0aW9uCiAjIFRyYXZpcyBCLiBTYXd5ZXIKQEAgLTIzLDYgKzI2LDkgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgogCiAjIFRCUzogYWRkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKIEJVSUxEVVNFUiA6PSAkKHNoZWxsIHdob2FtaSkKQEAgLTMyLDEzICszOCwxNiBAQAogIyBUQlM6IGVuZCBkZWJ1Z2dpbmcKIAogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9wcGM0NDBneF9pMmMubyBcCitDT0JKUwk9ICQoQk9BUkQpLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL3BwYzQ0MGd4X2kyYy5vIFwKIAkuLi9jb21tb24vc2JfY29tbW9uLm8KIAogU09CSlMJPSBpbml0Lm8KIAorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC01MSw5ICs2MCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NhbmRidXJzdC9tZXRyb2JveC9NYWtlZmlsZSBiL2JvYXJkL3NhbmRidXJzdC9tZXRyb2JveC9NYWtlZmlsZQppbmRleCAwNmE5YTIyLi45NTc5NTEyIDEwMDY0NAotLS0gYS9ib2FyZC9zYW5kYnVyc3QvbWV0cm9ib3gvTWFrZWZpbGUKKysrIGIvYm9hcmQvc2FuZGJ1cnN0L21ldHJvYm94L01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKEMpIENvcHlyaWdodCAyMDA1CiAjIFRyYXZpcyBCLiBTYXd5ZXIsIFNhbmRidXJzdCBDb3Jwb3JhdGlvbiwgdHNhd3llckBzYW5kYnVyc3QuY29tCiAjCkBAIC0yMiw2ICsyNSw5IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKIAogIyBUQlM6IGFkZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCiBCVUlMRFVTRVIgOj0gJChzaGVsbCB3aG9hbWkpCkBAIC0zMSwxMiArMzcsMTUgQEAKICMgVEJTOiBlbmQgZGVidWdnaW5nCiAKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vcHBjNDQwZ3hfaTJjLm8gXAorQ09CSlMJPSAkKEJPQVJEKS5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9wcGM0NDBneF9pMmMubyBcCiAJLi4vY29tbW9uL3NiX2NvbW1vbi5vCiBTT0JKUwk9IGluaXQubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKQEAgLTQ5LDkgKzU4LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2FuZHBvaW50L01ha2VmaWxlIGIvYm9hcmQvc2FuZHBvaW50L01ha2VmaWxlCmluZGV4IGQ2YmJmMmYuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhbmRwb2ludC9NYWtlZmlsZQorKysgYi9ib2FyZC9zYW5kcG9pbnQvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMgPSAgJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjMjQxMHgvTWFrZWZpbGUgYi9ib2FyZC9zYmMyNDEweC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDhiNWZmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc2JjMjQxMHgvTWFrZWZpbGUKQEAgLTAsMCArMSw1MSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBzYmMyNDEweC5vIGZsYXNoLm8KK1NPQkpTCTo9IGxvd2xldmVsX2luaXQubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zYmMyNDEweC9jb25maWcubWsgYi9ib2FyZC9zYmMyNDEweC9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0NGU2NAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NiYzI0MTB4L2NvbmZpZy5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMgorIyBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisjIERhdmlkIE11ZWxsZXIsIEVMU09GVCBBRywgPGQubXVlbGxlckBlbHNvZnQuY2g+CisjCisjIFNBTVNVTkcgU01ESzI0MTAgYm9hcmQgd2l0aCBTM0MyNDEwWCAoQVJNOTIwVCkgY3B1CisjCisjIHNlZSBodHRwOi8vd3d3LnNhbXN1bmcuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTQU1TVU5HCisjCisKKyMKKyMgU01ESzI0MTAgaGFzIDEgYmFuayBvZiA2NCBNQiBEUkFNCisjCisjIDMwMDAnMDAwMCB0byAzNDAwJzAwMDAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDMwMDAnODAwMCwgZW50cnkgMzAwMCc4MDAwCisjIG9wdGlvbmFsbHkgd2l0aCBhIHJhbWRpc2sgYXQgMzA4MCcwMDAwCisjCisjIHdlIGxvYWQgb3Vyc2VsZiB0byAzM0Y4JzAwMDAKKyMKKyMgZG93bmxvYWQgYXJlYSBpcyAzMzAwJzAwMDAKKworVEVYVF9CQVNFID0gMHgzM0Y4MDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjMjQxMHgvZmxhc2guYyBiL2JvYXJkL3NiYzI0MTB4L2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI3MThmMgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NiYzI0MTB4L2ZsYXNoLmMKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogQWxleCBadWVwa2UgPGF6dUBzeXNnby5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKK3Vsb25nIG15Zmx1c2ggKHZvaWQpOworCisjZGVmaW5lIEZMQVNIX0JBTktfU0laRQlQSFlTX0ZMQVNIX1NJWkUKKyNkZWZpbmUgTUFJTl9TRUNUX1NJWkUgIDB4MTAwMDAJLyogNjQgS0IgKi8KKworZmxhc2hfaW5mb190IGZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107CisKKyNkZWZpbmUgQ01EX1JFQURfQVJSQVkJCTB4MDAwMDAwRjAKKyNkZWZpbmUgQ01EX1VOTE9DSzEJCTB4MDAwMDAwQUEKKyNkZWZpbmUgQ01EX1VOTE9DSzIJCTB4MDAwMDAwNTUKKyNkZWZpbmUgQ01EX0VSQVNFX1NFVFVQCQkweDAwMDAwMDgwCisjZGVmaW5lIENNRF9FUkFTRV9DT05GSVJNCTB4MDAwMDAwMzAKKyNkZWZpbmUgQ01EX1BST0dSQU0JCTB4MDAwMDAwQTAKKyNkZWZpbmUgQ01EX1VOTE9DS19CWVBBU1MJMHgwMDAwMDAyMAorCisjZGVmaW5lIE1FTV9GTEFTSF9BRERSMQkJKCoodm9sYXRpbGUgdTE2ICopKENGR19GTEFTSF9CQVNFICsgKDB4MDAwMDA1NTUgPDwgMSkpKQorI2RlZmluZSBNRU1fRkxBU0hfQUREUjIJCSgqKHZvbGF0aWxlIHUxNiAqKShDRkdfRkxBU0hfQkFTRSArICgweDAwMDAwMkFBIDw8IDEpKSkKKworI2RlZmluZSBCSVRfRVJBU0VfRE9ORQkJMHgwMDAwMDA4MAorI2RlZmluZSBCSVRfUkRZX01BU0sJCTB4MDAwMDAwODAKKyNkZWZpbmUgQklUX1BST0dSQU1fRVJST1IJMHgwMDAwMDAyMAorI2RlZmluZSBCSVRfVElNRU9VVAkJMHg4MDAwMDAwMAkvKiBvdXIgZmxhZyAqLworCisjZGVmaW5lIFJFQURZIDEKKyNkZWZpbmUgRVJSICAgMgorI2RlZmluZSBUTU8gICA0CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit1bG9uZyBmbGFzaF9pbml0ICh2b2lkKQoreworCWludCBpLCBqOworCXVsb25nIHNpemUgPSAwOworCisJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykgeworCQl1bG9uZyBmbGFzaGJhc2UgPSAwOworCisJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPQorI2lmIGRlZmluZWQoQ09ORklHX0FNRF9MVjQwMCkKKwkJCShBTURfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykgfAorCQkJKEFNRF9JRF9MVjQwMEIgJiBGTEFTSF9UWVBFTUFTSyk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19BTURfTFY4MDApCisJCQkoQU1EX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spIHwKKwkJCShBTURfSURfTFY4MDBCICYgRkxBU0hfVFlQRU1BU0spOworI2Vsc2UKKyNlcnJvciAiVW5rbm93biBmbGFzaCBjb25maWd1cmVkIgorI2VuZGlmCisJCQlmbGFzaF9pbmZvW2ldLnNpemUgPSBGTEFTSF9CQU5LX1NJWkU7CisJCWZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50ID0gQ0ZHX01BWF9GTEFTSF9TRUNUOworCQltZW1zZXQgKGZsYXNoX2luZm9baV0ucHJvdGVjdCwgMCwgQ0ZHX01BWF9GTEFTSF9TRUNUKTsKKwkJaWYgKGkgPT0gMCkKKwkJCWZsYXNoYmFzZSA9IFBIWVNfRkxBU0hfMTsKKwkJZWxzZQorCQkJcGFuaWMgKCJjb25maWd1cmVkIHRvbyBtYW55IGZsYXNoIGJhbmtzIVxuIik7CisJCWZvciAoaiA9IDA7IGogPCBmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudDsgaisrKSB7CisJCQlpZiAoaiA8PSAzKSB7CisJCQkJLyogMXN0IG9uZSBpcyAxNiBLQiAqLworCQkJCWlmIChqID09IDApIHsKKwkJCQkJZmxhc2hfaW5mb1tpXS5zdGFydFtqXSA9CisJCQkJCQlmbGFzaGJhc2UgKyAwOworCQkJCX0KKworCQkJCS8qIDJuZCBhbmQgM3JkIGFyZSBib3RoIDggS0IgKi8KKwkJCQlpZiAoKGogPT0gMSkgfHwgKGogPT0gMikpIHsKKwkJCQkJZmxhc2hfaW5mb1tpXS5zdGFydFtqXSA9CisJCQkJCQlmbGFzaGJhc2UgKyAweDQwMDAgKyAoaiAtCisJCQkJCQkJCSAgICAgIDEpICoKKwkJCQkJCTB4MjAwMDsKKwkJCQl9CisKKwkJCQkvKiA0dGggMzIgS0IgKi8KKwkJCQlpZiAoaiA9PSAzKSB7CisJCQkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPQorCQkJCQkJZmxhc2hiYXNlICsgMHg4MDAwOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZmxhc2hfaW5mb1tpXS5zdGFydFtqXSA9CisJCQkJCWZsYXNoYmFzZSArIChqIC0gMykgKiBNQUlOX1NFQ1RfU0laRTsKKwkJCX0KKwkJfQorCQlzaXplICs9IGZsYXNoX2luZm9baV0uc2l6ZTsKKwl9CisKKwlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkgICAgICAgQ0ZHX0ZMQVNIX0JBU0UsCisJCSAgICAgICBDRkdfRkxBU0hfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkJICAgICAgICZmbGFzaF9pbmZvWzBdKTsKKworCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgICBDRkdfRU5WX0FERFIsCisJCSAgICAgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLCAmZmxhc2hfaW5mb1swXSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwljYXNlIChBTURfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSyk6CisJCXByaW50ZiAoIkFNRDogIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKKwljYXNlIChBTURfSURfTFY0MDBCICYgRkxBU0hfVFlQRU1BU0spOgorCQlwcmludGYgKCIxeCBBbWQyOUxWNDAwQkIgKDRNYml0KVxuIik7CisJCWJyZWFrOworCWNhc2UgKEFNRF9JRF9MVjgwMEIgJiBGTEFTSF9UWVBFTUFTSyk6CisJCXByaW50ZiAoIjF4IEFtZDI5TFY4MDBCQiAoOE1iaXQpXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOworCQlnb3RvIERvbmU7CisJCWJyZWFrOworCX0KKworCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCisJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisKKwlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJCWlmICgoaSAlIDUpID09IDApIHsKKwkJCXByaW50ZiAoIlxuICAgIik7CisJCX0KKwkJcHJpbnRmICgiICUwOGxYJXMiLCBpbmZvLT5zdGFydFtpXSwKKwkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CisJfQorCXByaW50ZiAoIlxuIik7CisKKyAgICAgIERvbmU6OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwl1c2hvcnQgcmVzdWx0OworCWludCBpZmxhZywgY2ZsYWcsIHByb3QsIHNlY3Q7CisJaW50IHJjID0gRVJSX09LOworCWludCBjaGlwOworCisJLyogZmlyc3QgbG9vayBmb3IgcHJvdGVjdGlvbiBiaXRzICovCisKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKKwkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEU7CisKKwlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKKwkJcmV0dXJuIEVSUl9JTlZBTDsKKwl9CisKKwlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9CisJICAgIChBTURfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykpIHsKKwkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1ZFTkRPUjsKKwl9CisKKwlwcm90ID0gMDsKKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7CisJCQlwcm90Kys7CisJCX0KKwl9CisJaWYgKHByb3QpCisJCXJldHVybiBFUlJfUFJPVEVDVEVEOworCisJLyoKKwkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0CisJICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCisJICogYXQgYWRkcmVzcyAwIGluIHRoZSBmbGFzaCwgYW5kIHdlIGRvbid0IHdhbnQgYQorCSAqICh0aWNrZXIpIGV4Y2VwdGlvbiB0byBoYXBwZW4gd2hpbGUgdGhlIGZsYXNoCisJICogY2hpcCBpcyBpbiBwcm9ncmFtbWluZyBtb2RlLgorCSAqLworCWNmbGFnID0gaWNhY2hlX3N0YXR1cyAoKTsKKwlpY2FjaGVfZGlzYWJsZSAoKTsKKwlpZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdCAmJiAhY3RybGMgKCk7IHNlY3QrKykgeworCQlwcmludGYgKCJFcmFzaW5nIHNlY3RvciAlMmQgLi4uICIsIHNlY3QpOworCisJCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCisJCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKKworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkJCXZ1X3Nob3J0ICphZGRyID0gKHZ1X3Nob3J0ICopIChpbmZvLT5zdGFydFtzZWN0XSk7CisKKwkJCU1FTV9GTEFTSF9BRERSMSA9IENNRF9VTkxPQ0sxOworCQkJTUVNX0ZMQVNIX0FERFIyID0gQ01EX1VOTE9DSzI7CisJCQlNRU1fRkxBU0hfQUREUjEgPSBDTURfRVJBU0VfU0VUVVA7CisKKwkJCU1FTV9GTEFTSF9BRERSMSA9IENNRF9VTkxPQ0sxOworCQkJTUVNX0ZMQVNIX0FERFIyID0gQ01EX1VOTE9DSzI7CisJCQkqYWRkciA9IENNRF9FUkFTRV9DT05GSVJNOworCisJCQkvKiB3YWl0IHVudGlsIGZsYXNoIGlzIHJlYWR5ICovCisJCQljaGlwID0gMDsKKworCQkJZG8geworCQkJCXJlc3VsdCA9ICphZGRyOworCisJCQkJLyogY2hlY2sgdGltZW91dCAqLworCQkJCWlmIChnZXRfdGltZXJfbWFza2VkICgpID4KKwkJCQkgICAgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkJCQkJTUVNX0ZMQVNIX0FERFIxID0gQ01EX1JFQURfQVJSQVk7CisJCQkJCWNoaXAgPSBUTU87CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmICghY2hpcAorCQkJCSAgICAmJiAocmVzdWx0ICYgMHhGRkZGKSAmIEJJVF9FUkFTRV9ET05FKQorCQkJCQljaGlwID0gUkVBRFk7CisKKwkJCQlpZiAoIWNoaXAKKwkJCQkgICAgJiYgKHJlc3VsdCAmIDB4RkZGRikgJiBCSVRfUFJPR1JBTV9FUlJPUikKKwkJCQkJY2hpcCA9IEVSUjsKKworCQkJfSB3aGlsZSAoIWNoaXApOworCisJCQlNRU1fRkxBU0hfQUREUjEgPSBDTURfUkVBRF9BUlJBWTsKKworCQkJaWYgKGNoaXAgPT0gRVJSKSB7CisJCQkJcmMgPSBFUlJfUFJPR19FUlJPUjsKKwkJCQlnb3RvIG91dGFoZXJlOworCQkJfQorCQkJaWYgKGNoaXAgPT0gVE1PKSB7CisJCQkJcmMgPSBFUlJfVElNT1VUOworCQkJCWdvdG8gb3V0YWhlcmU7CisJCQl9CisKKwkJCXByaW50ZiAoIm9rLlxuIik7CisJCX0gZWxzZSB7CS8qIGl0IHdhcyBwcm90ZWN0ZWQgKi8KKworCQkJcHJpbnRmICgicHJvdGVjdGVkIVxuIik7CisJCX0KKwl9CisKKwlpZiAoY3RybGMgKCkpCisJCXByaW50ZiAoIlVzZXIgSW50ZXJydXB0IVxuIik7CisKKyAgICAgIG91dGFoZXJlOgorCS8qIGFsbG93IGZsYXNoIHRvIHNldHRsZSAtIHdhaXQgMTAgbXMgKi8KKwl1ZGVsYXlfbWFza2VkICgxMDAwMCk7CisKKwlpZiAoaWZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzICgpOworCisJaWYgKGNmbGFnKQorCQlpY2FjaGVfZW5hYmxlICgpOworCisJcmV0dXJuIHJjOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5IG1lbW9yeSB0byBmbGFzaAorICovCisKK3ZvbGF0aWxlIHN0YXRpYyBpbnQgd3JpdGVfaHdvcmQgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsIHVzaG9ydCBkYXRhKQoreworCXZ1X3Nob3J0ICphZGRyID0gKHZ1X3Nob3J0ICopIGRlc3Q7CisJdXNob3J0IHJlc3VsdDsKKwlpbnQgcmMgPSBFUlJfT0s7CisJaW50IGNmbGFnLCBpZmxhZzsKKwlpbnQgY2hpcDsKKworCS8qCisJICogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkCisJICovCisJcmVzdWx0ID0gKmFkZHI7CisJaWYgKChyZXN1bHQgJiBkYXRhKSAhPSBkYXRhKQorCQlyZXR1cm4gRVJSX05PVF9FUkFTRUQ7CisKKworCS8qCisJICogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dAorCSAqIGhlcmUuIFJlbWVtYmVyIHRoYXQgb3VyIGV4Y2VwdGlvbiB2ZWN0b3JzIGFyZQorCSAqIGF0IGFkZHJlc3MgMCBpbiB0aGUgZmxhc2gsIGFuZCB3ZSBkb24ndCB3YW50IGEKKwkgKiAodGlja2VyKSBleGNlcHRpb24gdG8gaGFwcGVuIHdoaWxlIHRoZSBmbGFzaAorCSAqIGNoaXAgaXMgaW4gcHJvZ3JhbW1pbmcgbW9kZS4KKwkgKi8KKwljZmxhZyA9IGljYWNoZV9zdGF0dXMgKCk7CisJaWNhY2hlX2Rpc2FibGUgKCk7CisJaWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKwlNRU1fRkxBU0hfQUREUjEgPSBDTURfVU5MT0NLMTsKKwlNRU1fRkxBU0hfQUREUjIgPSBDTURfVU5MT0NLMjsKKwlNRU1fRkxBU0hfQUREUjEgPSBDTURfVU5MT0NLX0JZUEFTUzsKKwkqYWRkciA9IENNRF9QUk9HUkFNOworCSphZGRyID0gZGF0YTsKKworCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCisJcmVzZXRfdGltZXJfbWFza2VkICgpOworCisJLyogd2FpdCB1bnRpbCBmbGFzaCBpcyByZWFkeSAqLworCWNoaXAgPSAwOworCWRvIHsKKwkJcmVzdWx0ID0gKmFkZHI7CisKKwkJLyogY2hlY2sgdGltZW91dCAqLworCQlpZiAoZ2V0X3RpbWVyX21hc2tlZCAoKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCQljaGlwID0gRVJSIHwgVE1POworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjaGlwICYmICgocmVzdWx0ICYgMHg4MCkgPT0gKGRhdGEgJiAweDgwKSkpCisJCQljaGlwID0gUkVBRFk7CisKKwkJaWYgKCFjaGlwICYmICgocmVzdWx0ICYgMHhGRkZGKSAmIEJJVF9QUk9HUkFNX0VSUk9SKSkgeworCQkJcmVzdWx0ID0gKmFkZHI7CisKKwkJCWlmICgocmVzdWx0ICYgMHg4MCkgPT0gKGRhdGEgJiAweDgwKSkKKwkJCQljaGlwID0gUkVBRFk7CisJCQllbHNlCisJCQkJY2hpcCA9IEVSUjsKKwkJfQorCisJfSB3aGlsZSAoIWNoaXApOworCisJKmFkZHIgPSBDTURfUkVBRF9BUlJBWTsKKworCWlmIChjaGlwID09IEVSUiB8fCAqYWRkciAhPSBkYXRhKQorCQlyYyA9IEVSUl9QUk9HX0VSUk9SOworCisJaWYgKGlmbGFnKQorCQllbmFibGVfaW50ZXJydXB0cyAoKTsKKworCWlmIChjZmxhZykKKwkJaWNhY2hlX2VuYWJsZSAoKTsKKworCXJldHVybiByYzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weSBtZW1vcnkgdG8gZmxhc2guCisgKi8KKworaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCit7CisJdWxvbmcgY3AsIHdwOworCWludCBsOworCWludCBpLCByYzsKKwl1c2hvcnQgZGF0YTsKKworCXdwID0gKGFkZHIgJiB+MSk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLworCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCisJICovCisJaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7CisJCWRhdGEgPSAwOworCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgbDsgKytpLCArK2NwKSB7CisJCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKSBjcCA8PCA4KTsKKwkJfQorCQlmb3IgKDsgaSA8IDIgJiYgY250ID4gMDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKnNyYysrIDw8IDgpOworCQkJLS1jbnQ7CisJCQkrK2NwOworCQl9CisJCWZvciAoOyBjbnQgPT0gMCAmJiBpIDwgMjsgKytpLCArK2NwKSB7CisJCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKSBjcCA8PCA4KTsKKwkJfQorCisJCWlmICgocmMgPSB3cml0ZV9od29yZCAoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQl3cCArPSAyOworCX0KKworCS8qCisJICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0CisJICovCisJd2hpbGUgKGNudCA+PSAyKSB7CisJCWRhdGEgPSAqKCh2dV9zaG9ydCAqKSBzcmMpOworCQlpZiAoKHJjID0gd3JpdGVfaHdvcmQgKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgeworCQkJcmV0dXJuIChyYyk7CisJCX0KKwkJc3JjICs9IDI7CisJCXdwICs9IDI7CisJCWNudCAtPSAyOworCX0KKworCWlmIChjbnQgPT0gMCkgeworCQlyZXR1cm4gRVJSX09LOworCX0KKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCisJICovCisJZGF0YSA9IDA7CisJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IDIgJiYgY250ID4gMDsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqc3JjKysgPDwgOCk7CisJCS0tY250OworCX0KKwlmb3IgKDsgaSA8IDI7ICsraSwgKytjcCkgeworCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKSBjcCA8PCA4KTsKKwl9CisKKwlyZXR1cm4gd3JpdGVfaHdvcmQgKGluZm8sIHdwLCBkYXRhKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzI0MTB4L2xvd2xldmVsX2luaXQuUyBiL2JvYXJkL3NiYzI0MTB4L2xvd2xldmVsX2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGY2M2NkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc2JjMjQxMHgvbG93bGV2ZWxfaW5pdC5TCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogTWVtb3J5IFNldHVwIHN0dWZmIC0gdGFrZW4gZnJvbSBibG9iIG1lbXNldHVwLlMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgMjAwMCAyMDAxIEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCkgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgIEphbi1EZXJrIEJha2tlciAoSi5ELkJha2tlckBpdHMudHVkZWxmdC5ubCkKKyAqCisgKiBNb2RpZmllZCBmb3IgdGhlIFNhbXN1bmcgU01ESzI0MTAgYnkKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogRGF2aWQgTXVlbGxlciwgRUxTT0ZUIEFHLCA8ZC5tdWVsbGVyQGVsc29mdC5jaD4KKyAqCisgKiBNb2RpZmllZCBmb3IgdGhlIGZyaWVuZGx5LWFybSBTQkMtMjQxMFggYnkKKyAqIChDKSBDb3B5cmlnaHQgMjAwNQorICogSmluSHVhIEx1bywgR3VhbmdEb25nIExpbnV4IENlbnRlciwgPGx1by5qaW5odWFAZ2QtbGludXguY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKy8qCisgKiBUYWtlbiBmcm9tIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXMzYzI0MTAuUworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBTYW1zdW5nIEVsZWN0cm9uaWNzIFNXLkxFRSAgPGhpdGNoY2FyQHNlYy5zYW1zdW5nLmNvbT4KKyAqLworCisjZGVmaW5lIEJXU0NPTgkweDQ4MDAwMDAwCisKKy8qIEJXU0NPTiAqLworI2RlZmluZSBEVzgJCQkoMHgwKQorI2RlZmluZSBEVzE2CQkJKDB4MSkKKyNkZWZpbmUgRFczMgkJCSgweDIpCisjZGVmaW5lIFdBSVQJCQkoMHgxPDwyKQorI2RlZmluZSBVQkxCCQkJKDB4MTw8MykKKworI2RlZmluZSBCMV9CV1NDT04JCShEVzE2KQorI2RlZmluZSBCMl9CV1NDT04JCShEVzE2KQorI2RlZmluZSBCM19CV1NDT04JCShEVzE2ICsgV0FJVCArIFVCTEIpCisjZGVmaW5lIEI0X0JXU0NPTgkJKERXMTYpCisjZGVmaW5lIEI1X0JXU0NPTgkJKERXMTYpCisjZGVmaW5lIEI2X0JXU0NPTgkJKERXMzIpCisjZGVmaW5lIEI3X0JXU0NPTgkJKERXMzIpCisKKyNkZWZpbmUgQjBfVGFjcwkJCTB4MAorI2RlZmluZSBCMF9UY29zCQkJMHgwCisjZGVmaW5lIEIwX1RhY2MJCQkweDcKKyNkZWZpbmUgQjBfVGNvaAkJCTB4MAorI2RlZmluZSBCMF9UYWgJCQkweDAKKyNkZWZpbmUgQjBfVGFjcAkJCTB4MAorI2RlZmluZSBCMF9QTUMJCQkweDAKKworI2RlZmluZSBCMV9UYWNzCQkJMHgwCisjZGVmaW5lIEIxX1Rjb3MJCQkweDAKKyNkZWZpbmUgQjFfVGFjYwkJCTB4NworI2RlZmluZSBCMV9UY29oCQkJMHgwCisjZGVmaW5lIEIxX1RhaAkJCTB4MAorI2RlZmluZSBCMV9UYWNwCQkJMHgwCisjZGVmaW5lIEIxX1BNQwkJCTB4MAorCisjZGVmaW5lIEIyX1RhY3MJCQkweDAKKyNkZWZpbmUgQjJfVGNvcwkJCTB4MAorI2RlZmluZSBCMl9UYWNjCQkJMHg3CisjZGVmaW5lIEIyX1Rjb2gJCQkweDAKKyNkZWZpbmUgQjJfVGFoCQkJMHgwCisjZGVmaW5lIEIyX1RhY3AJCQkweDAKKyNkZWZpbmUgQjJfUE1DCQkJMHgwCisKKyNkZWZpbmUgQjNfVGFjcwkJCTB4YworI2RlZmluZSBCM19UY29zCQkJMHg3CisjZGVmaW5lIEIzX1RhY2MJCQkweGYKKyNkZWZpbmUgQjNfVGNvaAkJCTB4MQorI2RlZmluZSBCM19UYWgJCQkweDAKKyNkZWZpbmUgQjNfVGFjcAkJCTB4MAorI2RlZmluZSBCM19QTUMJCQkweDAKKworI2RlZmluZSBCNF9UYWNzCQkJMHgwCisjZGVmaW5lIEI0X1Rjb3MJCQkweDAKKyNkZWZpbmUgQjRfVGFjYwkJCTB4NworI2RlZmluZSBCNF9UY29oCQkJMHgwCisjZGVmaW5lIEI0X1RhaAkJCTB4MAorI2RlZmluZSBCNF9UYWNwCQkJMHgwCisjZGVmaW5lIEI0X1BNQwkJCTB4MAorCisjZGVmaW5lIEI1X1RhY3MJCQkweGMKKyNkZWZpbmUgQjVfVGNvcwkJCTB4NworI2RlZmluZSBCNV9UYWNjCQkJMHhmCisjZGVmaW5lIEI1X1Rjb2gJCQkweDEKKyNkZWZpbmUgQjVfVGFoCQkJMHgwCisjZGVmaW5lIEI1X1RhY3AJCQkweDAKKyNkZWZpbmUgQjVfUE1DCQkJMHgwCisKKyNkZWZpbmUgQjZfTVQJCQkweDMJLyogU0RSQU0gKi8KKyNkZWZpbmUgQjZfVHJjZAkJCTB4MQorI2RlZmluZSBCNl9TQ0FOCQkJMHgxCS8qIDliaXQgKi8KKworI2RlZmluZSBCN19NVAkJCTB4MwkvKiBTRFJBTSAqLworI2RlZmluZSBCN19UcmNkCQkJMHgxCS8qIDNjbGsgKi8KKyNkZWZpbmUgQjdfU0NBTgkJCTB4MQkvKiA5Yml0ICovCisKKy8qIFJFRlJFU0ggcGFyYW1ldGVyICovCisjZGVmaW5lIFJFRkVOCQkJMHgxCS8qIFJlZnJlc2ggZW5hYmxlICovCisjZGVmaW5lIFRSRUZNRAkJCTB4MAkvKiBDQlIoQ0FTIGJlZm9yZSBSQVMpL0F1dG8gcmVmcmVzaCAqLworI2RlZmluZSBUcnAJCQkweDAJLyogMmNsayAqLworI2RlZmluZSBUcmMJCQkweDMJLyogN2NsayAqLworI2RlZmluZSBUY2hyCQkJMHgyCS8qIDNjbGsgKi8KKyNkZWZpbmUgUkVGQ05UCQkJMHgwNDU5CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK19URVhUX0JBU0U6CisJLndvcmQJVEVYVF9CQVNFCisKKy5nbG9ibCBsb3dsZXZlbF9pbml0Citsb3dsZXZlbF9pbml0OgorCS8qIG1lbW9yeSBjb250cm9sIGNvbmZpZ3VyYXRpb24gKi8KKwkvKiBtYWtlIHIwIHJlbGF0aXZlIHRoZSBjdXJyZW50IGxvY2F0aW9uIHNvIHRoYXQgaXQgKi8KKwkvKiByZWFkcyBTTVJEQVRBIG91dCBvZiBGTEFTSCByYXRoZXIgdGhhbiBtZW1vcnkgISAqLworCWxkciAgICAgcjAsID1TTVJEQVRBCisJbGRyCXIxLCBfVEVYVF9CQVNFCisJc3ViCXIwLCByMCwgcjEKKwlsZHIJcjEsID1CV1NDT04JLyogQnVzIFdpZHRoIFN0YXR1cyBDb250cm9sbGVyICovCisJYWRkICAgICByMiwgcjAsICMxMyo0CiswOgorCWxkciAgICAgcjMsIFtyMF0sICM0CisJc3RyICAgICByMywgW3IxXSwgIzQKKwljbXAgICAgIHIyLCByMAorCWJuZSAgICAgMGIKKworCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSBub3cgKi8KKwltb3YJcGMsIGxyCisKKwkubHRvcmcKKy8qIHRoZSBsaXRlcmFsIHBvb2xzIG9yaWdpbiAqLworCitTTVJEQVRBOgorICAgIC53b3JkICgwKyhCMV9CV1NDT048PDQpKyhCMl9CV1NDT048PDgpKyhCM19CV1NDT048PDEyKSsoQjRfQldTQ09OPDwxNikrKEI1X0JXU0NPTjw8MjApKyhCNl9CV1NDT048PDI0KSsoQjdfQldTQ09OPDwyOCkpCisgICAgLndvcmQgKChCMF9UYWNzPDwxMykrKEIwX1Rjb3M8PDExKSsoQjBfVGFjYzw8OCkrKEIwX1Rjb2g8PDYpKyhCMF9UYWg8PDQpKyhCMF9UYWNwPDwyKSsoQjBfUE1DKSkKKyAgICAud29yZCAoKEIxX1RhY3M8PDEzKSsoQjFfVGNvczw8MTEpKyhCMV9UYWNjPDw4KSsoQjFfVGNvaDw8NikrKEIxX1RhaDw8NCkrKEIxX1RhY3A8PDIpKyhCMV9QTUMpKQorICAgIC53b3JkICgoQjJfVGFjczw8MTMpKyhCMl9UY29zPDwxMSkrKEIyX1RhY2M8PDgpKyhCMl9UY29oPDw2KSsoQjJfVGFoPDw0KSsoQjJfVGFjcDw8MikrKEIyX1BNQykpCisgICAgLndvcmQgKChCM19UYWNzPDwxMykrKEIzX1Rjb3M8PDExKSsoQjNfVGFjYzw8OCkrKEIzX1Rjb2g8PDYpKyhCM19UYWg8PDQpKyhCM19UYWNwPDwyKSsoQjNfUE1DKSkKKyAgICAud29yZCAoKEI0X1RhY3M8PDEzKSsoQjRfVGNvczw8MTEpKyhCNF9UYWNjPDw4KSsoQjRfVGNvaDw8NikrKEI0X1RhaDw8NCkrKEI0X1RhY3A8PDIpKyhCNF9QTUMpKQorICAgIC53b3JkICgoQjVfVGFjczw8MTMpKyhCNV9UY29zPDwxMSkrKEI1X1RhY2M8PDgpKyhCNV9UY29oPDw2KSsoQjVfVGFoPDw0KSsoQjVfVGFjcDw8MikrKEI1X1BNQykpCisgICAgLndvcmQgKChCNl9NVDw8MTUpKyhCNl9UcmNkPDwyKSsoQjZfU0NBTikpCisgICAgLndvcmQgKChCN19NVDw8MTUpKyhCN19UcmNkPDwyKSsoQjdfU0NBTikpCisgICAgLndvcmQgKChSRUZFTjw8MjMpKyhUUkVGTUQ8PDIyKSsoVHJwPDwyMCkrKFRyYzw8MTgpKyhUY2hyPDwxNikrUkVGQ05UKQorICAgIC53b3JkIDB4YjIKKyAgICAud29yZCAweDMwCisgICAgLndvcmQgMHgzMApkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjMjQxMHgvc2JjMjQxMHguYyBiL2JvYXJkL3NiYzI0MTB4L3NiYzI0MTB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzMDk4NQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3NiYzI0MTB4L3NiYzI0MTB4LmMKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgorICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogRGF2aWQgTXVlbGxlciwgRUxTT0ZUIEFHLCA8ZC5tdWVsbGVyQGVsc29mdC5jaD4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDUKKyAqIEppbkh1YSBMdW8sIEd1YW5nRG9uZyBMaW51eCBDZW50ZXIsIDxsdW8uamluaHVhQGdkLWxpbnV4LmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8czNjMjQxMC5oPgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBGQ0xLX1NQRUVEIDEKKworI2lmIEZDTEtfU1BFRUQ9PTAJCS8qIEZvdXQgPSAyMDNNSHosIEZpbiA9IDEyTUh6IGZvciBBdWRpbyAqLworI2RlZmluZSBNX01ESVYJMHhDMworI2RlZmluZSBNX1BESVYJMHg0CisjZGVmaW5lIE1fU0RJVgkweDEKKyNlbGlmIEZDTEtfU1BFRUQ9PTEJCS8qIEZvdXQgPSAyMDIuOE1IeiAqLworI2RlZmluZSBNX01ESVYJMHg1YworI2RlZmluZSBNX1BESVYJMHg0CisjZGVmaW5lIE1fU0RJVgkweDAKKyNlbmRpZgorCisjZGVmaW5lIFVTQl9DTE9DSyAxCisKKyNpZiBVU0JfQ0xPQ0s9PTAKKyNkZWZpbmUgVV9NX01ESVYJMHhBMQorI2RlZmluZSBVX01fUERJVgkweDMKKyNkZWZpbmUgVV9NX1NESVYJMHgxCisjZWxpZiBVU0JfQ0xPQ0s9PTEKKyNkZWZpbmUgVV9NX01ESVYJMHg0OAorI2RlZmluZSBVX01fUERJVgkweDMKKyNkZWZpbmUgVV9NX1NESVYJMHgyCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGRlbGF5ICh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCV9fYXNtX18gdm9sYXRpbGUgKCIxOlxuIgorCQkJICAic3VicyAlMCwgJTEsICMxXG4iCisJCQkgICJibmUgMWIiOiI9ciIgKGxvb3BzKToiMCIgKGxvb3BzKSk7Cit9CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMKKyAqLworCitpbnQgYm9hcmRfaW5pdCAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwlTM0MyNFgwX0NMT0NLX1BPV0VSICogY29uc3QgY2xrX3Bvd2VyID0gUzNDMjRYMF9HZXRCYXNlX0NMT0NLX1BPV0VSKCk7CisJUzNDMjRYMF9HUElPICogY29uc3QgZ3BpbyA9IFMzQzI0WDBfR2V0QmFzZV9HUElPKCk7CisKKwkvKiB0byByZWR1Y2UgUExMIGxvY2sgdGltZSwgYWRqdXN0IHRoZSBMT0NLVElNRSByZWdpc3RlciAqLworCWNsa19wb3dlci0+TE9DS1RJTUUgPSAweEZGRkZGRjsKKworCS8qIGNvbmZpZ3VyZSBNUExMICovCisJY2xrX3Bvd2VyLT5NUExMQ09OID0gKChNX01ESVYgPDwgMTIpICsgKE1fUERJViA8PCA0KSArIE1fU0RJVik7CisKKwkvKiBzb21lIGRlbGF5IGJldHdlZW4gTVBMTCBhbmQgVVBMTCAqLworCWRlbGF5ICg0MDAwKTsKKworCS8qIGNvbmZpZ3VyZSBVUExMICovCisJY2xrX3Bvd2VyLT5VUExMQ09OID0gKChVX01fTURJViA8PCAxMikgKyAoVV9NX1BESVYgPDwgNCkgKyBVX01fU0RJVik7CisKKwkvKiBzb21lIGRlbGF5IGJldHdlZW4gTVBMTCBhbmQgVVBMTCAqLworCWRlbGF5ICg4MDAwKTsKKworCS8qIHNldCB1cCB0aGUgSS9PIHBvcnRzICovCisJZ3Bpby0+R1BBQ09OID0gMHgwMDdGRkZGRjsKKwlncGlvLT5HUEJDT04gPSAweDAwMDQ0NTU2OworCWdwaW8tPkdQQlVQID0gMHgwMDAwMDdGRjsKKwlncGlvLT5HUENDT04gPSAweEFBQUFBQUFBOworCWdwaW8tPkdQQ1VQID0gMHgwMDAwRkZGRjsKKwlncGlvLT5HUERDT04gPSAweEFBQUFBQUFBOworCWdwaW8tPkdQRFVQID0gMHgwMDAwRkZGRjsKKwlncGlvLT5HUEVDT04gPSAweEFBQUFBQUFBOworCWdwaW8tPkdQRVVQID0gMHgwMDAwRkZGRjsKKwlncGlvLT5HUEZDT04gPSAweDAwMDA1NUFBOworCWdwaW8tPkdQRlVQID0gMHgwMDAwMDBGRjsKKwlncGlvLT5HUEdDT04gPSAweEZGOTVGRjNBOworCWdwaW8tPkdQR1VQID0gMHgwMDAwRkZGRjsKKwlncGlvLT5HUEhDT04gPSAweDAwMTZGQUFBOworCWdwaW8tPkdQSFVQID0gMHgwMDAwMDdGRjsKKworCWdwaW8tPkVYVElOVDA9MHgyMjIyMjIyMjsKKwlncGlvLT5FWFRJTlQxPTB4MjIyMjIyMjI7CisJZ3Bpby0+RVhUSU5UMj0weDIyMjIyMjIyOworCisJLyogYXJjaCBudW1iZXIgb2YgU01ESzI0MTAtQm9hcmQgKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX1NNREsyNDEwOworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweDMwMDAwMTAwOworCisJaWNhY2hlX2VuYWJsZSgpOworCWRjYWNoZV9lbmFibGUoKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0ICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTV8xOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV8xX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCitleHRlcm4gdWxvbmcgbmFuZF9wcm9iZSh1bG9uZyBwaHlzYWRyKTsKKworc3RhdGljIGlubGluZSB2b2lkIE5GX1Jlc2V0KHZvaWQpCit7CisJaW50IGk7CisKKwlORl9TZXRDRShORkNFX0xPVyk7CisJTkZfQ21kKDB4RkYpOwkJLyogcmVzZXQgY29tbWFuZCAqLworCWZvcihpID0gMDsgaSA8IDEwOyBpKyspOwkvKiB0V0IgPSAxMDBucy4gKi8KKwlORl9XYWl0UkIoKTsJCS8qIHdhaXQgMjAwfjUwMHVzOyAqLworCU5GX1NldENFKE5GQ0VfSElHSCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBORl9Jbml0KHZvaWQpCit7CisjaWYgMQorI2RlZmluZSBUQUNMUyAgIDAKKyNkZWZpbmUgVFdSUEgwICAzCisjZGVmaW5lIFRXUlBIMSAgMAorI2Vsc2UKKyNkZWZpbmUgVEFDTFMgICAwCisjZGVmaW5lIFRXUlBIMCAgNAorI2RlZmluZSBUV1JQSDEgIDIKKyNlbmRpZgorCisJTkZfQ29uZigoMTw8MTUpfCgwPDwxNCl8KDA8PDEzKXwoMTw8MTIpfCgxPDwxMSl8KFRBQ0xTPDw4KXwoVFdSUEgwPDw0KXwoVFdSUEgxPDwwKSk7CisJLypuYW5kLT5ORkNPTkYgPSAoMTw8MTUpfCgxPDwxNCl8KDE8PDEzKXwoMTw8MTIpfCgxPDwxMSl8KFRBQ0xTPDw4KXwoVFdSUEgwPDw0KXwoVFdSUEgxPDwwKTsgKi8KKwkvKiAxICAxICAgIDEgICAgIDEsICAgMSAgICAgIHh4eCwgIHIgeHh4LCAgIHIgeHh4ICovCisJLyogRW4gNTEyQiA0c3RlcCBFQ0NSIG5GQ0U9SCB0QUNMUyAgIHRXUlBIMCAgIHRXUlBIMSAqLworCisJTkZfUmVzZXQoKTsKK30KKwordm9pZCBuYW5kX2luaXQodm9pZCkKK3sKKwlTM0MyNDEwX05BTkQgKiBjb25zdCBuYW5kID0gUzNDMjQxMF9HZXRCYXNlX05BTkQoKTsKKworCU5GX0luaXQoKTsKKyNpZmRlZiBERUJVRworCXByaW50ZigiTkFORCBmbGFzaCBwcm9iaW5nIGF0IDB4JS44bFhcbiIsICh1bG9uZyluYW5kKTsKKyNlbmRpZgorCXByaW50ZiAoIiU0bHUgTUJcbiIsIG5hbmRfcHJvYmUoKHVsb25nKW5hbmQpID4+IDIwKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzI0MTB4L3UtYm9vdC5sZHMgYi9ib2FyZC9zYmMyNDEweC91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZGY2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zYmMyNDEweC91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2pAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCisvKk9VVFBVVF9GT1JNQVQoImVsZjMyLWFybSIsICJlbGYzMi1hcm0iLCAiZWxmMzItYXJtIikqLworT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJICBjcHUvYXJtOTIwdC9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjNDA1L01ha2VmaWxlIGIvYm9hcmQvc2JjNDA1L01ha2VmaWxlCmluZGV4IGM0MTk4YzQuLjliOWYwMzMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NiYzQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9zYmM0MDUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsOSArMjMsMTMgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gc3RyYXRhZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIHN0cmF0YWZsYXNoLm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCkBAIC0zOCw5ICs0Miw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzgyNDAvTWFrZWZpbGUgYi9ib2FyZC9zYmM4MjQwL01ha2VmaWxlCmluZGV4IDdhMjAxNGQuLjFiNTdkMmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NiYzgyNDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvc2JjODI0MC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzgyNjAvTWFrZWZpbGUgYi9ib2FyZC9zYmM4MjYwL01ha2VmaWxlCmluZGV4IDE0ZWQ0NTcuLjcwNzdhODIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NiYzgyNjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvc2JjODI2MC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBzYmM4MjYwLm8gZmxhc2gubworQ09CSlMJOj0gc2JjODI2MC5vIGZsYXNoLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zYmM4NTYwL01ha2VmaWxlIGIvYm9hcmQvc2JjODU2MC9NYWtlZmlsZQppbmRleCBkYTI5NWZiLi40ZDljMmU3IDEwMDY0NAotLS0gYS9ib2FyZC9zYmM4NTYwL01ha2VmaWxlCisrKyBiL2JvYXJkL3NiYzg1NjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDQtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyAoQykgQ29weXJpZ2h0IDIwMDQgV2luZCBSaXZlciBTeXN0ZW1zIEluYyA8d3d3LndpbmRyaXZlci5jb20+LgpAQCAtMjYsMTMgKzI2LDE3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubworQ09CSlMJOj0gJChCT0FSRCkubwogU09CSlMJOj0gaW5pdC5vCiAjU09CSlMJOj0KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTQzLDkgKzQ3LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9jZHAvTWFrZWZpbGUgYi9ib2FyZC9zYzUyMF9jZHAvTWFrZWZpbGUKaW5kZXggYWIwNmViYy4uNzU1NWI0ZiAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfY2RwL01ha2VmaWxlCisrKyBiL2JvYXJkL3NjNTIwX2NkcC9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCiAjIChDKSBDb3B5cmlnaHQgMjAwMgogIyBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UuCiAjCkBAIC0yMywxMiArMjYsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBzYzUyMF9jZHAubyBmbGFzaC5vCitDT0JKUwk6PSBzYzUyMF9jZHAubyBmbGFzaC5vCiBTT0JKUwk6PSBzYzUyMF9jZHBfYXNtLm8gc2M1MjBfY2RwX2FzbTE2Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQ2LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9zcHVuay9NYWtlZmlsZSBiL2JvYXJkL3NjNTIwX3NwdW5rL01ha2VmaWxlCmluZGV4IDI0MmQ1M2MuLjk5NThlODAgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NjNTIwX3NwdW5rL01ha2VmaWxlCisrKyBiL2JvYXJkL3NjNTIwX3NwdW5rL01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMgCiAjIChDKSBDb3B5cmlnaHQgMjAwMgogIyBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UuCiAjCkBAIC0yMywxMiArMjYsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBzYzUyMF9zcHVuay5vIGZsYXNoLm8KK0NPQkpTCTo9IHNjNTIwX3NwdW5rLm8gZmxhc2gubwogU09CSlMJOj0gc2M1MjBfc3B1bmtfYXNtLm8gc2M1MjBfc3B1bmtfYXNtMTYubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDYsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NjYjkzMjgvTWFrZWZpbGUgYi9ib2FyZC9zY2I5MzI4L01ha2VmaWxlCmluZGV4IDVkYzNmZDQuLjAxYjkwOGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NjYjkzMjgvTWFrZWZpbGUKKysrIGIvYm9hcmQvc2NiOTMyOC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEzICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHNjYjkzMjgubyBmbGFzaC5vCitDT0JKUwk6PSBzY2I5MzI4Lm8gZmxhc2gubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NoYW5ub24vTWFrZWZpbGUgYi9ib2FyZC9zaGFubm9uL01ha2VmaWxlCmluZGV4IGY2NmIwOTYuLmEwNGQ4NDEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NoYW5ub24vTWFrZWZpbGUKKysrIGIvYm9hcmQvc2hhbm5vbi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMiArMjMsMTYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSBzaGFubm9uLm8gZmxhc2gubworQ09CSlMJOj0gc2hhbm5vbi5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvQ0NNL01ha2VmaWxlIGIvYm9hcmQvc2llbWVucy9DQ00vTWFrZWZpbGUKaW5kZXggZWUyZmM1My4uMmFkNGM4MyAxMDA2NDQKLS0tIGEvYm9hcmQvc2llbWVucy9DQ00vTWFrZWZpbGUKKysrIGIvYm9hcmQvc2llbWVucy9DQ00vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMjAgKzIyLDI4IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi8uLi90cW04eHgpCitlbmRpZgogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSBjY20ubyBmbGFzaC5vIGZwZ2FfY2NtLm8gLi4vY29tbW9uL2ZwZ2EubyBcCitDT0JKUwk9IGNjbS5vIGZsYXNoLm8gZnBnYV9jY20ubyAuLi9jb21tb24vZnBnYS5vIFwKIAkgIC4uLy4uL3RxbTh4eC9sb2FkX3Nlcm51bV9ldGhhZGRyLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvSUFEMjEwL01ha2VmaWxlIGIvYm9hcmQvc2llbWVucy9JQUQyMTAvTWFrZWZpbGUKaW5kZXggODdhNjg5My4uMzk2NDM4MSAxMDA2NDQKLS0tIGEvYm9hcmQvc2llbWVucy9JQUQyMTAvTWFrZWZpbGUKKysrIGIvYm9hcmQvc2llbWVucy9JQUQyMTAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gYXRtLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGF0bS5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zaWVtZW5zL1NDTS9NYWtlZmlsZSBiL2JvYXJkL3NpZW1lbnMvU0NNL01ha2VmaWxlCmluZGV4IGFmNjQ2ZTQuLmI0YmJiNTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpZW1lbnMvU0NNL01ha2VmaWxlCisrKyBiL2JvYXJkL3NpZW1lbnMvU0NNL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDIxICsyMiwyOCBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vLi4vdHFtOHh4LykKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9IHNjbS5vIGZsYXNoLm8gZnBnYV9zY20ubyAuLi9jb21tb24vZnBnYS5vIFwKK0NPQkpTCT0gc2NtLm8gZmxhc2gubyBmcGdhX3NjbS5vIC4uL2NvbW1vbi9mcGdhLm8gXAogCSAgLi4vLi4vdHFtOHh4L2xvYWRfc2VybnVtX2V0aGFkZHIubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9wY3VfZS9NYWtlZmlsZSBiL2JvYXJkL3NpZW1lbnMvcGN1X2UvTWFrZWZpbGUKaW5kZXggN2EyMDE0ZC4uMWI1N2QyYiAxMDA2NDQKLS0tIGEvYm9hcmQvc2llbWVucy9wY3VfZS9NYWtlZmlsZQorKysgYi9ib2FyZC9zaWVtZW5zL3BjdV9lL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2l4bmV0L01ha2VmaWxlIGIvYm9hcmQvc2l4bmV0L01ha2VmaWxlCmluZGV4IDEzY2U5ZmMuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpeG5ldC9NYWtlZmlsZQorKysgYi9ib2FyZC9zaXhuZXQvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zbDgyNDUvTWFrZWZpbGUgYi9ib2FyZC9zbDgyNDUvTWFrZWZpbGUKaW5kZXggNmQxMTI0MC4uNDNjMjdlOSAxMDA2NDQKLS0tIGEvYm9hcmQvc2w4MjQ1L01ha2VmaWxlCisrKyBiL2JvYXJkL3NsODI0NS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxIC0gMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMgCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUyAJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NtZGsyNDAwL01ha2VmaWxlIGIvYm9hcmQvc21kazI0MDAvTWFrZWZpbGUKaW5kZXggZmMzZDQ4Zi4uYjNjZWZjZiAxMDA2NDQKLS0tIGEvYm9hcmQvc21kazI0MDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvc21kazI0MDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gc21kazI0MDAubyBmbGFzaC5vCitDT0JKUwk6PSBzbWRrMjQwMC5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NtZGsyNDEwL01ha2VmaWxlIGIvYm9hcmQvc21kazI0MTAvTWFrZWZpbGUKaW5kZXggNGVlMjFmNS4uNjVmMWE0ZCAxMDA2NDQKLS0tIGEvYm9hcmQvc21kazI0MTAvTWFrZWZpbGUKKysrIGIvYm9hcmQvc21kazI0MTAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gc21kazI0MTAubyBmbGFzaC5vCitDT0JKUwk6PSBzbWRrMjQxMC5vIGZsYXNoLm8KIFNPQkpTCTo9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NubWMvcXM4NTAvTWFrZWZpbGUgYi9ib2FyZC9zbm1jL3FzODUwL01ha2VmaWxlCmluZGV4IGU1ZDg0NDYuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NubWMvcXM4NTAvTWFrZWZpbGUKKysrIGIvYm9hcmQvc25tYy9xczg1MC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc25tYy9xczg2MHQvTWFrZWZpbGUgYi9ib2FyZC9zbm1jL3FzODYwdC9NYWtlZmlsZQppbmRleCAxM2NlOWZjLi5lM2QyNGIzIDEwMDY0NAotLS0gYS9ib2FyZC9zbm1jL3FzODYwdC9NYWtlZmlsZQorKysgYi9ib2FyZC9zbm1jL3FzODYwdC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NvcmNlcnkvTWFrZWZpbGUgYi9ib2FyZC9zb3JjZXJ5L01ha2VmaWxlCmluZGV4IDNkNmQ2NzMuLmM1OWEzYmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NvcmNlcnkvTWFrZWZpbGUKKysrIGIvYm9hcmQvc29yY2VyeS9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKLSMgKEMpIENvcHlyaWdodCAyMDA1CisjCisjIChDKSBDb3B5cmlnaHQgMjAwNS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vCitDT0JKUwk6PSAkKEJPQVJEKS5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzcsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3NvcmNlcnkvc29yY2VyeS5jIGIvYm9hcmQvc29yY2VyeS9zb3JjZXJ5LmMKaW5kZXggMzVkNmEwNi4uMTY1ZTllMiAxMDA2NDQKLS0tIGEvYm9hcmQvc29yY2VyeS9zb3JjZXJ5LmMKKysrIGIvYm9hcmQvc29yY2VyeS9zb3JjZXJ5LmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogCXNpemUgPSBkcmFtU2V0dXAgKCk7CiAKLQlyZXR1cm4gZ2V0X3JhbV9zaXplKCh1bG9uZyAqKUNGR19TRFJBTV9CQVNFLCBzaXplKTsKKwlyZXR1cm4gZ2V0X3JhbV9zaXplKENGR19TRFJBTV9CQVNFLCBzaXplKTsKIH0KIAogaW50IGNoZWNrYm9hcmQgKHZvaWQpCmRpZmYgLS1naXQgYS9ib2FyZC9zcGMxOTIwL01ha2VmaWxlIGIvYm9hcmQvc3BjMTkyMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTUxYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3BjMTkyMC9NYWtlZmlsZQpAQCAtMCwwICsxLDQ0IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCT0gJChCT0FSRCkubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvc3BjMTkyMC9jb25maWcubWsgYi9ib2FyZC9zcGMxOTIwL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYxNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3BjMTkyMC9jb25maWcubWsKQEAgLTAsMCArMSwzNSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBNb2RpZmllZCBieSwgWXVsaSBCYXJjb2hlbiwgQXJhYmVsbGEgU29mdHdhcmUgTHRkLiwgeXVsaUBhcmFiZWxsYXN3LmNvbQorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIE1vdG9yb2xhIG9sZCBNUEM4MjEvODYwQURTLCBNUEM4eHhGQURTLCBuZXcgTVBDODY2QURTLCBhbmQKKyMgTVBDODg1QURTIGJvYXJkcworIworCisjVEVYVF9CQVNFID0gMHhGRTAwMDAwMAorVEVYVF9CQVNFID0gMHhGRkYwMDAwMAorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLUkkKFRPUERJUikvYm9hcmQvc3BjMTkyMAorSE9TVF9DRkxBR1MgKz0gLUkkKFRPUERJUikvYm9hcmQvc3BjMTkyMAorSE9TVF9FTlZJUk9fQ0ZMQUdTICs9IC1JJChUT1BESVIpL2JvYXJkL3NwYzE5MjAKZGlmZiAtLWdpdCBhL2JvYXJkL3NwYzE5MjAvcGxkLmggYi9ib2FyZC9zcGMxOTIwL3BsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTRmODIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9zcGMxOTIwL3BsZC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX19QTERfSF9fCisjZGVmaW5lIF9fUExEX0hfXworCit0eXBlZGVmIHN0cnVjdCBzcGMxOTIwX3BsZCB7CisJdWNoYXIgY29tMV9lbjsKKwl1Y2hhciBkc3BfcmVzZXQ7CisJdWNoYXIgZHNwX2hwaV9vbjsKKwl1Y2hhciBjb2RlY19kc3BfcG93ZXJfZW47CisJdWNoYXIgY2xrMl9lbjsKKwl1Y2hhciBjbGszX3NlbGVjdDsKKwl1Y2hhciBjbGs0X3NlbGVjdDsKK30gc3BjMTkyMF9wbGRfdDsKKworI2VuZGlmIC8qIF9fUExEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvc3BjMTkyMC9zcGMxOTIwLmMgYi9ib2FyZC9zcGMxOTIwL3NwYzE5MjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjhmNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3BjMTkyMC9zcGMxOTIwLmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBNb2RpZmllZCBieSwgWXVsaSBCYXJjb2hlbiwgQXJhYmVsbGEgU29mdHdhcmUgTHRkLiwgeXVsaUBhcmFiZWxsYXN3LmNvbQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM4eHguaD4KKyNpbmNsdWRlICJwbGQuaCIKKworI2RlZmluZQlfTk9UX1VTRURfCTB4RkZGRkZGRkYKKy8qICNkZWZpbmUgZGVidWcoZm10LGFyZ3MuLi4pICAgICBwcmludGYgKGZtdCAsIyNhcmdzKSAqLworCitzdGF0aWMgbG9uZyBpbnQgZHJhbV9zaXplIChsb25nIGludCwgbG9uZyBpbnQgKiwgbG9uZyBpbnQpOworCitjb25zdCB1aW50IHNkcmFtX3RhYmxlW10gPSB7CisJLyoKKwkgKiBTaW5nbGUgUmVhZC4gKE9mZnNldCAwIGluIFVQTUIgUkFNKQorCSAqLworCTB4MUYwN0ZDMDQsIDB4RUVBRUZDMDQsIDB4MTFBREZDMDQsIDB4RUZCQkJDMDAsCisJMHgxRkY3N0M0NywgLyogbGFzdCAqLworCS8qCisJICogU0RSQU0gSW5pdGlhbGl6YXRpb24gKG9mZnNldCA1IGluIFVQTUIgUkFNKQorCSAqCisJICogVGhpcyBpcyBubyBVUE0gZW50cnkgcG9pbnQuIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiB1c2VzCisJICogdGhlIHJlbWFpbmluZyBzcGFjZSB0byBlc3RhYmxpc2ggYW4gaW5pdGlhbGl6YXRpb24KKwkgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KKwkgKgorCSAqLworCTB4MUZGNzdDMzQsIDB4RUZFQUJDMzQsIDB4MUZCNTdDMzUsIC8qIGxhc3QgKi8KKwkvKgorCSAqIEJ1cnN0IFJlYWQuIChPZmZzZXQgOCBpbiBVUE1CIFJBTSkKKwkgKi8KKwkweDFGMDdGQzA0LCAweEVFQUVGQzA0LCAweDEwQURGQzA0LCAweEYwQUZGQzAwLAorCTB4RjBBRkZDMDAsIDB4RjFBRkZDMDAsIDB4RUZCQkJDMDAsIDB4MUZGNzdDNDcsIC8qIGxhc3QgKi8KKwlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJLyoKKwkgKiBTaW5nbGUgV3JpdGUuIChPZmZzZXQgMTggaW4gVVBNQiBSQU0pCisJICovCisJMHgxRjA3RkMwNCwgMHhFRUFFQkMwMCwgMHgwMUI5M0MwNCwgMHgxRkY3N0M0NywgLyogbGFzdCAqLworCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJLyoKKwkgKiBCdXJzdCBXcml0ZS4gKE9mZnNldCAyMCBpbiBVUE1CIFJBTSkKKwkgKi8KKwkweDFGMDdGQzA0LCAweEVFQUVCQzAwLCAweDEwQUQ3QzAwLCAweEYwQUZGQzAwLAorCTB4RjBBRkZDMDAsIDB4RTFCQkJDMDQsIDB4MUZGNzdDNDcsIC8qIGxhc3QgKi8KKwlfTk9UX1VTRURfLAorCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkvKgorCSAqIFJlZnJlc2ggIChPZmZzZXQgMzAgaW4gVVBNQiBSQU0pCisJICovCisJMHgxRkY1RkM4NCwgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwKKwkweEZGRkZGQzg0LCAweEZGRkZGQzA3LCAvKiBsYXN0ICovCisJX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCS8qCisJICogRXhjZXB0aW9uLiAoT2Zmc2V0IDNjIGluIFVQTUIgUkFNKQorCSAqLworCTB4N0ZGRkZDMDcsIC8qIGxhc3QgKi8KKwlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorfTsKKworbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKKwl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbXItPmltX21lbWN0bDsKKwkvKiB2b2xhdGlsZSBzcGMxOTIwX3BsZF90ICpwbGQgPSAoc3BjMTkyMF9wbGRfdCAqKSBDRkdfU1BDMTkyMF9QTERfQkFTRTsgKi8KKworCWxvbmcgaW50IHNpemVfYjA7CisJbG9uZyBpbnQgc2l6ZTgsIHNpemU5OworCWludCBpOworCisJLyoKKwkgKiBDb25maWd1cmUgVVBNQiBmb3IgU0RSQU0KKwkgKi8KKwl1cG1jb25maWcgKFVQTUIsICh1aW50ICopc2RyYW1fdGFibGUsIHNpemVvZihzZHJhbV90YWJsZSkvc2l6ZW9mKHVpbnQpKTsKKworCXVkZWxheSgxMDApOworCisJbWVtY3RsLT5tZW1jX21wdHByID0gQ0ZHX01QVFBSOworCisJLyogYnVyc3QgbGVuZ3RoPTQsIGJ1cnN0IHR5cGU9c2VxdWVudGlhbCwgQ0FTIGxhdGVuY3k9MiAqLworCW1lbWN0bC0+bWVtY19tYXIgPSBDRkdfTUFSOworCisJLyoKKwkgKiBNYXAgY29udHJvbGxlciBiYW5rIDEgdG8gdGhlIFNEUkFNIGJhbmsgYXQgcHJlbGltaW5hcnkgYWRkcmVzcy4KKwkgKi8KKwltZW1jdGwtPm1lbWNfb3IxID0gQ0ZHX09SMV9QUkVMSU07CisJbWVtY3RsLT5tZW1jX2JyMSA9IENGR19CUjFfUFJFTElNOworCisJLyogaW5pdGlhbGl6ZSBtZW1vcnkgYWRkcmVzcyByZWdpc3RlciAqLworCW1lbWN0bC0+bWVtY19tYm1yID0gQ0ZHX01CTVJfOENPTDsgLyogcmVmcmVzaCBub3QgZW5hYmxlZCB5ZXQgKi8KKworCS8qIG1vZGUgaW5pdGlhbGl6YXRpb24gKG9mZnNldCA1KSAqLworCXVkZWxheSAoMjAwKTsJCQkJLyogMHg4MDAwNjEwNSAqLworCW1lbWN0bC0+bWVtY19tY3IgPSBNQ1JfT1BfUlVOIHwgTUNSX1VQTV9CIHwgTUNSX01CX0NTMSB8IE1DUl9NTENGICgxKSB8IE1DUl9NQUQgKDB4MDUpOworCisJLyogcnVuIDIgcmVmcmVzaCBzZXF1ZW5jZSB3aXRoIDQtYmVhdCByZWZyZXNoIGJ1cnN0IChvZmZzZXQgMHgzMCkgKi8KKwl1ZGVsYXkgKDEpOwkJCQkvKiAweDgwMDA2MTMwICovCisJbWVtY3RsLT5tZW1jX21jciA9IE1DUl9PUF9SVU4gfCBNQ1JfVVBNX0IgfCBNQ1JfTUJfQ1MxIHwgTUNSX01MQ0YgKDEpIHwgTUNSX01BRCAoMHgzMCk7CisJdWRlbGF5ICgxKTsJCQkJLyogMHg4MDAwNjEzMCAqLworCW1lbWN0bC0+bWVtY19tY3IgPSBNQ1JfT1BfUlVOIHwgTUNSX1VQTV9CIHwgTUNSX01CX0NTMSB8IE1DUl9NTENGICgxKSB8IE1DUl9NQUQgKDB4MzApOworCXVkZWxheSAoMSk7CQkJCS8qIDB4ODAwMDYxMDYgKi8KKwltZW1jdGwtPm1lbWNfbWNyID0gTUNSX09QX1JVTiB8IE1DUl9VUE1fQiB8IE1DUl9NQl9DUzEgfCBNQ1JfTUxDRiAoMSkgfCBNQ1JfTUFEICgweDA2KTsKKworCW1lbWN0bC0+bWVtY19tYm1yIHw9IE1CTVJfUFRCRTsJLyogcmVmcmVzaCBlbmFibGVkICovCisKKwl1ZGVsYXkgKDIwMCk7CisKKwkvKiBOZWVkIGF0IGxlYXN0IDEwIERSQU0gYWNjZXNzZXMgdG8gc3RhYmlsaXplICovCisJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkciA9CisJCQkodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSBDRkdfU0RSQU1fQkFTRTsKKwkJdW5zaWduZWQgbG9uZyB2YWw7CisKKwkJdmFsID0gKihhZGRyICsgaSk7CisJCSooYWRkciArIGkpID0gdmFsOworCX0KKworCS8qCisJICogQ2hlY2sgQmFuayAwIE1lbW9yeSBTaXplIGZvciByZS1jb25maWd1cmF0aW9uCisJICoKKwkgKiB0cnkgOCBjb2x1bW4gbW9kZQorCSAqLworCXNpemU4ID0gZHJhbV9zaXplIChDRkdfTUJNUl84Q09MLCAobG9uZyAqKUNGR19TRFJBTV9CQVNFLCBTRFJBTV9NQVhfU0laRSk7CisKKwl1ZGVsYXkgKDEwMDApOworCisJLyoKKwkgKiB0cnkgOSBjb2x1bW4gbW9kZQorCSAqLworCXNpemU5ID0gZHJhbV9zaXplIChDRkdfTUJNUl85Q09MLCAobG9uZyAqKUNGR19TRFJBTV9CQVNFLCBTRFJBTV9NQVhfU0laRSk7CisKKwlpZiAoc2l6ZTggPCBzaXplOSkgewkJLyogbGVhdmUgY29uZmlndXJhdGlvbiBhdCA5IGNvbHVtbnMgKi8KKwkJc2l6ZV9iMCA9IHNpemU5OworCQltZW1jdGwtPm1lbWNfbWJtciA9IENGR19NQk1SXzlDT0wgfCBNQk1SX1BUQkU7CisJCXVkZWxheSAoNTAwKTsKKwl9IGVsc2UgewkJCS8qIGJhY2sgdG8gOCBjb2x1bW5zICAgICAgICAgICAgKi8KKwkJc2l6ZV9iMCA9IHNpemU4OworCQltZW1jdGwtPm1lbWNfbWJtciA9IENGR19NQk1SXzhDT0wgfCBNQk1SX1BUQkU7CisJCXVkZWxheSAoNTAwKTsKKwl9CisKKwkvKgorCSAqIEZpbmFsIG1hcHBpbmc6CisJICovCisKKwltZW1jdGwtPm1lbWNfb3IxID0gKCgtc2l6ZV9iMCkgJiAweEZGRkYwMDAwKSB8CisJCQlPUl9DU05UX1NBTSB8IE9SX0c1TFMgfCBTRFJBTV9USU1JTkc7CisJbWVtY3RsLT5tZW1jX2JyMSA9IChDRkdfU0RSQU1fQkFTRSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1CIHwgQlJfVjsKKwl1ZGVsYXkgKDEwMDApOworCisKKwkvKiBQTEQgU2V0dXAgKi8KKwltZW1jdGwtPm1lbWNfb3I1ID0gQ0ZHX09SNV9QUkVMSU07CisJbWVtY3RsLT5tZW1jX2JyNSA9IENGR19CUjVfUFJFTElNOworCXVkZWxheSgxMDAwKTsKKworCXJldHVybiAoc2l6ZV9iMCk7Cit9CisKKy8qCisgKiBDaGVjayBtZW1vcnkgcmFuZ2UgZm9yIHZhbGlkIFJBTS4gQSBzaW1wbGUgbWVtb3J5IHRlc3QgZGV0ZXJtaW5lcworICogdGhlIGFjdHVhbGx5IGF2YWlsYWJsZSBSQU0gc2l6ZSBiZXR3ZWVuIGFkZHJlc3NlcyBgYmFzZScgYW5kCisgKiBgYmFzZSArIG1heHNpemUnLiBTb21lIChub3QgYWxsKSBoYXJkd2FyZSBlcnJvcnMgYXJlIGRldGVjdGVkOgorICogLSBzaG9ydCBiZXR3ZWVuIGFkZHJlc3MgbGluZXMKKyAqIC0gc2hvcnQgYmV0d2VlbiBkYXRhIGxpbmVzCisgKi8KK3N0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50IG1ibXJfdmFsdWUsIGxvbmcgaW50ICpiYXNlLAorCQkJICAgbG9uZyBpbnQgbWF4c2l6ZSkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOworCXZvbGF0aWxlIG1lbWN0bDh4eF90ICptZW1jdGwgPSAmaW1tYXAtPmltX21lbWN0bDsKKworCW1lbWN0bC0+bWVtY19tYm1yID0gbWJtcl92YWx1ZTsKKworCXJldHVybiAoZ2V0X3JhbV9zaXplIChiYXNlLCBtYXhzaXplKSk7Cit9CisKKworLyoqKioqKioqKioqKiogb3RoZXIgc3R1ZmYgKioqKioqKioqKioqKioqKioqLworCisKK2ludCBib2FyZF9lYXJseV9pbml0X2Yodm9pZCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOworCisKKwkvKiBUdXJuIG9uIExFRCBQRDkgKi8KKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wZHBhciAmPSB+KDB4MDA0MCk7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkaXIgfD0gMHgwMDQwOworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BkZGF0IHw9IDB4MDA0MDsKKworCS8qIEVuYWJsZSBQRDEwIChDT00yX0VOKSAqLworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BkcGFyICY9IH4weDAwMjA7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkaXIgJj0gfjB4NDAwMDsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGRpciB8PSAweDAwMjA7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkYXQgfD0gMHgwMDIwOworCisKKyNpZmRlZiBDRkdfU01DMV9QTERfQ0xLNCAvKiBTTUMxIHVzZXMgQ0xLNCBmcm9tIFBMRCAqLworCWltbWFwLT5pbV9jcG0uY3Bfc2ltb2RlIHw9IDB4NzAwMDsKKwlpbW1hcC0+aW1fY3BtLmNwX3NpbW9kZSAmPSB+KDB4ODAwMCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisKK2ludCBjaGVja2JvYXJkICh2b2lkKQoreworCXB1dHMoIkJvYXJkOiBTUEMxOTIwXG4iKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3NwYzE5MjAvdS1ib290LmxkcyBiL2JvYXJkL3NwYzE5MjAvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTI2ZDFkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc3BjMTkyMC91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAwCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9BUkNIKHBvd2VycGMpCitTRUFSQ0hfRElSKC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9wb3dlcnBjLWFueS1lbGYvbGliKTsKKy8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/CisgICBfX0RZTkFNSUMgPSAwOyAgICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJfQorICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQorICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCX0KKyAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQl9CisgIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KKyAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KKyAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQorICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQorICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCX0KKyAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCX0KKyAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQkJfQorICAucGx0IDogeyAqKC5wbHQpIH0KKyAgLnRleHQgICAgICA6CisgIHsKKyAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCisgICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCisKKyAgICBjcHUvbXBjOHh4L3N0YXJ0Lm8JCSgudGV4dCkKKyAgICBjcHUvbXBjOHh4L3RyYXBzLm8JCSgudGV4dCkKKyAgICBjb21tb24vZGxtYWxsb2MubwkJKC50ZXh0KQorICAgIGxpYl9wcGMvcHBjc3RyaW5nLm8JCSgudGV4dCkKKyAgICBsaWJfZ2VuZXJpYy92c3ByaW50Zi5vCSgudGV4dCkKKyAgICBsaWJfZ2VuZXJpYy9jcmMzMi5vCQkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCisgICAgbGliX3BwYy9jYWNoZS5vCQkoLnRleHQpCisgICAgbGliX3BwYy90aW1lLm8JCSgudGV4dCkKKworICAgIC4gPSBERUZJTkVEKGVudl9vZmZzZXQpID8gZW52X29mZnNldCA6IC47CisgICAgY29tbW9uL2Vudmlyb25tZW50Lm8JKC5wcGNlbnYpCisKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgIH0KKyAgX2V0ZXh0ID0gLjsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICA6CisgIHsKKyAgICAqKC5yb2RhdGEpCisgICAgKigucm9kYXRhMSkKKyAgICAqKC5yb2RhdGEuc3RyMS40KQorICAgICooLmVoX2ZyYW1lKQorICB9CisgIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKKyAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQorICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9CisKKyAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCisgIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOworICBfZXJvdGV4dCA9IC47CisgIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKKyAgLnJlbG9jICAgOgorICB7CisgICAgKiguZ290KQorICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgKiguZ290MikKKyAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAqKC5maXh1cCkKKyAgfQorICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7CisgIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7CisKKyAgLmRhdGEgICAgOgorICB7CisgICAgKiguZGF0YSkKKyAgICAqKC5kYXRhMSkKKyAgICAqKC5zZGF0YSkKKyAgICAqKC5zZGF0YTIpCisgICAgKiguZHluYW1pYykKKyAgICBDT05TVFJVQ1RPUlMKKyAgfQorICBfZWRhdGEgID0gIC47CisgIFBST1ZJREUgKGVkYXRhID0gLik7CisKKyAgLiA9IC47CisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKKyAgLiA9IC47CisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc3BkOHh4L01ha2VmaWxlIGIvYm9hcmQvc3BkOHh4L01ha2VmaWxlCmluZGV4IDEzY2U5ZmMuLmUzZDI0YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NwZDh4eC9NYWtlZmlsZQorKysgYi9ib2FyZC9zcGQ4eHgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zc3YvYWRucGVzYzEvTWFrZWZpbGUgYi9ib2FyZC9zc3YvYWRucGVzYzEvTWFrZWZpbGUKaW5kZXggOTE4MmE0ZS4uNzdkZTRmYiAxMDA2NDQKLS0tIGEvYm9hcmQvc3N2L2FkbnBlc2MxL01ha2VmaWxlCisrKyBiL2JvYXJkL3Nzdi9hZG5wZXNjMS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE0ICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubyBtaXNjLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubyBtaXNjLm8KK1NPQkpTCTo9IHZlY3RvcnMubwogCi1TT0JKUyAgPSB2ZWN0b3JzLm8KK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtNDAsOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3N0YW1wL01ha2VmaWxlIGIvYm9hcmQvc3RhbXAvTWFrZWZpbGUKaW5kZXggYWI5N2UxYi4uOGMyMDU0MyAxMDA2NDQKLS0tIGEvYm9hcmQvc3RhbXAvTWFrZWZpbGUKKysrIGIvYm9hcmQvc3RhbXAvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAjIENvcHlyaWdodCAoYykgMjAwNSBibGFja2Zpbi51Y2xpbnV4Lm9yZwogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjYsNyArMjYsNyBAQAogIwogCiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtNTAsMTkgKzUwLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIHN0YW1wLm8KLVNPQkpTCT0KK0NPQkpTCT0gJChCT0FSRCkubyBzdGFtcC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zdHhncDMvTWFrZWZpbGUgYi9ib2FyZC9zdHhncDMvTWFrZWZpbGUKaW5kZXggZDE1MGRmOC4uNTQ3N2ZmOSAxMDA2NDQKLS0tIGEvYm9hcmQvc3R4Z3AzL01ha2VmaWxlCisrKyBiL2JvYXJkL3N0eGdwMy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMyArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubwogU09CSlMJOj0gaW5pdC5vCiAjU09CSlMJOj0KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTQwLDkgKzQ0LDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zdHh4dGMvTWFrZWZpbGUgYi9ib2FyZC9zdHh4dGMvTWFrZWZpbGUKaW5kZXggOGM1MjlhMC4uMjk1MWI5NiAxMDA2NDQKLS0tIGEvYm9hcmQvc3R4eHRjL01ha2VmaWxlCisrKyBiL2JvYXJkL3N0eHh0Yy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubworQ09CSlMJPSAkKEJPQVJEKS5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9zdm1fc2M4eHgvTWFrZWZpbGUgYi9ib2FyZC9zdm1fc2M4eHgvTWFrZWZpbGUKaW5kZXggMTNjZTlmYy4uZTNkMjRiMyAxMDA2NDQKLS0tIGEvYm9hcmQvc3ZtX3NjOHh4L01ha2VmaWxlCisrKyBiL2JvYXJkL3N2bV9zYzh4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOCArMjMsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3N4MS9NYWtlZmlsZSBiL2JvYXJkL3N4MS9NYWtlZmlsZQppbmRleCA4ZmJkZjJhLi40ZTZhZGFjIDEwMDY0NAotLS0gYS9ib2FyZC9zeDEvTWFrZWZpbGUKKysrIGIvYm9hcmQvc3gxL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDA0LTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEzICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHN4MS5vCitDT0JKUwk6PSBzeDEubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtMzksOSArNDMsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3RiMDIyOS9NYWtlZmlsZSBiL2JvYXJkL3RiMDIyOS9NYWtlZmlsZQppbmRleCA0Mzc1MDczLi5hZWZhZjBkIDEwMDY0NAotLS0gYS9ib2FyZC90YjAyMjkvTWFrZWZpbGUKKysrIGIvYm9hcmQvdGIwMjI5L01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIwogIyAoQykgTWFzYW1pIEtvbWl5YSA8bWtvbWl5YUBzb25hcmUuaXQ+IDIwMDQKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI1LDE5ICsyNSwyMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIHZyNDEzMS1wY2kubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gdnI0MTMxLXBjaS5vCiBTT0JKUwk9IGxvd2xldmVsX2luaXQubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvdG90YWw1MjAwL01ha2VmaWxlIGIvYm9hcmQvdG90YWw1MjAwL01ha2VmaWxlCmluZGV4IDIzMjk1NmEuLjQyNDVmOTggMTAwNjQ0Ci0tLSBhL2JvYXJkL3RvdGFsNTIwMC9NYWtlZmlsZQorKysgYi9ib2FyZC90b3RhbDUyMDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIHNkcmFtLm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gc2RyYW0ubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3RvdGFsNTIwMC9jb25maWcubWsgYi9ib2FyZC90b3RhbDUyMDAvY29uZmlnLm1rCmluZGV4IDFhN2E3Y2YuLmU3YWM5M2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RvdGFsNTIwMC9jb25maWcubWsKKysrIGIvYm9hcmQvdG90YWw1MjAwL2NvbmZpZy5tawpAQCAtMzEsNyArMzEsNyBAQAogIwkweDAwMTAwMDAwICAgYm9vdCBmcm9tIFJBTSAoZm9yIHRlc3Rpbmcgb25seSkKICMKIAotc2luY2x1ZGUgJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKK3NpbmNsdWRlICQoT0JKVFJFRSkvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLnRtcAogCiBpZm5kZWYgVEVYVF9CQVNFCiAjIyBTdGFuZGFyZDogYm9vdCBoaWdoCmRpZmYgLS1naXQgYS9ib2FyZC90cW01MjAwL01ha2VmaWxlIGIvYm9hcmQvdHFtNTIwMC9NYWtlZmlsZQppbmRleCBhYjBmZjFhLi5kMGRkZTI2IDEwMDY0NAotLS0gYS9ib2FyZC90cW01MjAwL01ha2VmaWxlCisrKyBiL2JvYXJkL3RxbTUyMDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMSArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSAkKEJPQVJEKS5vIGNtZF9zdGs1Mnh4Lm8KK0NPQkpTCTo9ICQoQk9BUkQpLm8gY21kX3N0azUyeHgubyBjbWRfdGI1MjAwLm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC90cW01MjAwL2NtZF9zdGs1Mnh4LmMgYi9ib2FyZC90cW01MjAwL2NtZF9zdGs1Mnh4LmMKaW5kZXggOGI5MDU3Zi4uN2FmNjlmMiAxMDA3NTUKLS0tIGEvYm9hcmQvdHFtNTIwMC9jbWRfc3RrNTJ4eC5jCisrKyBiL2JvYXJkL3RxbTUyMDAvY21kX3N0azUyeHguYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKIC8qCi0gKiBTS1Q1MlhYIHNwZWNpZmljIGZ1bmN0aW9ucworICogU1RLNTJYWCBzcGVjaWZpYyBmdW5jdGlvbnMKICAqLwogLyojZGVmaW5lIERFQlVHKi8KIApAQCAtMzEsNiArMzEsNyBAQAogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQlNQKQogCisjaWYgZGVmaW5lZChDT05GSUdfU1RLNTJYWCkgfHwgZGVmaW5lZChDT05GSUdfRk8zMDApCiAjZGVmaW5lIERFRkFVTFRfVk9MCTQ1CiAjZGVmaW5lIERFRkFVTFRfRlJFUQk1MDAKICNkZWZpbmUgREVGQVVMVF9EVVJBVElPTgkyMDAKQEAgLTYwLDcgKzYxLDYgQEAKIHN0YXRpYyB2b2lkIHBjbTE3NzJfd3JpdGVfcmVnKHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKTsKIHN0YXRpYyB2b2lkIHNldF9hdHRlbnVhdGlvbih1bnNpZ25lZCBjaGFyIGF0dGVudWF0aW9uKTsKIAotI2lmZGVmIENPTkZJR19TVEs1MlhYCiBzdGF0aWMgdm9pZCBzcGlfaW5pdCh2b2lkKQogewogCXN0cnVjdCBtcGM1eHh4X3NwaSAqc3BpID0gKHN0cnVjdCBtcGM1eHh4X3NwaSopTVBDNVhYWF9TUEk7CkBAIC01MzcsNyArNTM3LDkgQEAKIAogCXJldHVybiByY29kZTsKIH0KKyNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU1RLNTJYWCkKIHZvaWQgbGVkX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbXBjNXh4eF9ncGlvICpncGlvID0gKHN0cnVjdCBtcGM1eHh4X2dwaW8gKilNUEM1WFhYX0dQSU87CkBAIC03MzYsNyArNzM4LDkgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TVEs1MlhYKSB8fCBkZWZpbmVkKENPTkZJR19GTzMwMCkKIC8qCiAgKiByZXR1cm4gMSBvbiBDQU4gaW5pdGlhbGl6YXRpb24gZmFpbHVyZQogICogcmV0dXJuIDAgaWYgbm8gZmFpbHVyZQpAQCAtMTEwNiw2ICsxMTEwLDcgQEAKIAlyZXR1cm4gZXJyb3Jfc3RhdHVzOwogfQogCisjaWZuZGVmIENPTkZJR19GTzMwMAogc3RhdGljIHZvaWQgc201MDFfYmFja2xpZ2h0ICh1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAJaWYgKHN0YXRlID09IEJMX09OKSB7CkBAIC0xMTE1LDYgKzExMjAsNyBAQAogCQkqKHZ1X2xvbmcgKikoU001MDFfTU1JT19CQVNFK1NNNTAxX1BBTkVMX0RJU1BMQVlfQ09OVFJPTCkgJj0KIAkJCX4oKDEgPDwgMjYpIHwgKDEgPDwgMjcpKTsKIH0KKyNlbmRpZgogCiBpbnQgY21kX2ZrdChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKQEAgLTExMjQsNyArMTEzMCw5IEBACiAJcHJpbnRmICgiUmV2aXNpb24gMTAwIG9mIFNUSzUyWFggbm90IHN1cHBvcnRlZCFcbiIpOwogCXJldHVybiAxOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1RLNTJYWCkKIAlsZWRfaW5pdCgpOworI2VuZGlmCiAJY2FuX2luaXQoKTsKIAogCXN3aXRjaCAoYXJnYykgewpAQCAtMTE1Miw2ICsxMTYwLDcgQEAKIAkJCWVsc2UKIAkJCQlwcmludGYgKCJFcnJvclxuIik7CiAJCQlyZXR1cm4gcmNvZGU7CisjaWZuZGVmIENPTkZJR19GTzMwMAogCQl9IGVsc2UgaWYgKHN0cm5jbXAgKGFyZ3ZbMV0sICJiYWNrbGlnaHQiLCA0KSA9PSAwKSB7CiAJCQlpZiAoc3RybmNtcCAoYXJndlsyXSwgIm9uIiwgMikgPT0gMCkgewogCQkJCXNtNTAxX2JhY2tsaWdodCAoQkxfT04pOwpAQCAtMTE2MSwxNCArMTE3MCwxNyBAQAogCQkJCXNtNTAxX2JhY2tsaWdodCAoQkxfT0ZGKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KKyNlbmRpZgogCQl9CiAJCWJyZWFrOwogCisjaWYgZGVmaW5lZChDT05GSUdfU1RLNTJYWCkKIAljYXNlIDQ6CiAJCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJsZWQiKSA9PSAwKSB7CiAJCQlyZXR1cm4gKGRvX2xlZCAoYXJndikpOwogCQl9CiAJCWJyZWFrOworI2VuZGlmCiAKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTEyMDQsMTIgKzEyMTYsMTQgQEAKIAkiW2NoYW5uZWxdXG4iCiAJIiAgICAtIHBsYXkgc2hvcnQgYmVlcCBvbiBcImxcImVmdCBvciBcInJcImlnaHQgY2hhbm5lbFxuIgogKTsKKyNlbmRpZiAvKiBDT05GSUdfU1RLNTJYWCAgfHwgQ09ORklHX0ZPMzAwICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TVEs1MlhYKQogVV9CT09UX0NNRCgKIAlma3QgLAk0LAkxLAljbWRfZmt0LAogCSJma3QgICAgIC0gRnVuY3Rpb24gdGVzdCByb3V0aW5lc1xuIiwKIAkibGVkIG51bWJlciBvbi9vZmZcbiIKLQkiICAgICAtICdudW1iZXIncyBsaWtlIHByaW50ZWQgb24gU0tUNTJYWCBib2FyZFxuIgorCSIgICAgIC0gJ251bWJlcidzIGxpa2UgcHJpbnRlZCBvbiBTVEs1MlhYIGJvYXJkXG4iCiAJImZrdCBjYW5cbiIKIAkiICAgICAtIGxvb3BiYWNrIHBsdWcgZm9yIFg4MyByZXF1aXJlZFxuIgogCSJma3QgcnMyMzIgbnVtYmVyXG4iCkBAIC0xMjE3LDUgKzEyMzEsMTQgQEAKIAkiZmt0IGJhY2tsaWdodCBvbi9vZmZcbiIKIAkiICAgICAtIHN3aXRjaCBiYWNrbGlnaHQgb24gb3Igb2ZmXG4iCiApOwotI2VuZGlmIC8qIENPTkZJR19TVEs1MlhYICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19GTzMwMCkKK1VfQk9PVF9DTUQoCisJZmt0ICwJMywJMSwJY21kX2ZrdCwKKwkiZmt0ICAgICAtIEZ1bmN0aW9uIHRlc3Qgcm91dGluZXNcbiIsCisJImZrdCBjYW5cbiIKKwkiICAgICAtIGxvb3BiYWNrIHBsdWcgZm9yIFgxNi9YMjkgcmVxdWlyZWRcbiIKKwkiZmt0IHJzMjMyIG51bWJlclxuIgorCSIgICAgIC0gbG9vcGJhY2sgcGx1ZyhzKSBmb3IgWDIxL1gyMiByZXF1aXJlZFxuIgorKTsKKyNlbmRpZgogI2VuZGlmIC8qIENGR19DTURfQlNQICovCmRpZmYgLS1naXQgYS9ib2FyZC90cW01MjAwL2NtZF90YjUyMDAuYyBiL2JvYXJkL3RxbTUyMDAvY21kX3RiNTIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ODRiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC90cW01MjAwL2NtZF90YjUyMDAuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNSAtIDIwMDYKKyAqIE1hcnRpbiBLcmF1c2UsIFRRLVN5c3RlbXMgR21iSCwgbWFydGluLmtyYXVzZUB0cXMuZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFRCNTIwMCBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqLworLyojZGVmaW5lIERFQlVHKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JTUCkKKyNpZiBkZWZpbmVkIChDT05GSUdfVEI1MjAwKQorCisjZGVmaW5lIFNNNTAxX1BBTkVMX0RJU1BMQVlfQ09OVFJPTAkweDAwMDgwMDAwVUwKKworc3RhdGljIHZvaWQgbGVkX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXBjNXh4eF9ncHRfMF83ICpncHQgPSAoc3RydWN0IG1wYzV4eHhfZ3B0XzBfNyAqKU1QQzVYWFhfR1BUOworCisJLyogY29uZmlndXJlIHRpbWVyIDQgZm9yIHNpbXBsZSBHUElPIG91dHB1dCAqLworCWdwdC0+Z3B0NC5lbXNyIHw9ICAweDAwMDAwMDI0OworfQorCitpbnQgY21kX2xlZChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgbXBjNXh4eF9ncHRfMF83ICpncHQgPSAoc3RydWN0IG1wYzV4eHhfZ3B0XzBfNyAqKU1QQzVYWFhfR1BUOworCisJbGVkX2luaXQoKTsKKworCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJvbiIpID09IDApIHsKKwkJZGVidWcgKCJzd2l0Y2ggc3RhdHVzIExFRCBvblxuIik7CisJCWdwdC0+Z3B0NC5lbXNyIHw9ICAoMSA8PCA0KTsKKwl9IGVsc2UgaWYgKHN0cmNtcCAoYXJndlsxXSwgIm9mZiIpID09IDApIHsKKwkJZGVidWcgKCJzd2l0Y2ggc3RhdHVzIExFRCBvZmZcbiIpOworCQlncHQtPmdwdDQuZW1zciAmPSAgfigxIDw8IDQpOworCX0gZWxzZSB7CisJCXByaW50ZiAoIlVzYWdlOlxubGVkIG9uL29mZlxuIik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbTUwMV9iYWNrbGlnaHQgKHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgPT0gMSkgeworCQkqKHZ1X2xvbmcgKikoU001MDFfTU1JT19CQVNFK1NNNTAxX1BBTkVMX0RJU1BMQVlfQ09OVFJPTCkgfD0KKwkJCSgxIDw8IDI2KSB8ICgxIDw8IDI3KTsKKwl9IGVsc2UgaWYgKHN0YXRlID09IDApCisJCSoodnVfbG9uZyAqKShTTTUwMV9NTUlPX0JBU0UrU001MDFfUEFORUxfRElTUExBWV9DT05UUk9MKSAmPQorCQkJfigoMSA8PCAyNikgfCAoMSA8PCAyNykpOworfQorCitpbnQgY21kX2JhY2tsaWdodChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoc3RyY21wIChhcmd2WzFdLCAib24iKSA9PSAwKSB7CisJCWRlYnVnICgic3dpdGNoIGJhY2tsaWdodCBvblxuIik7CisJCXNtNTAxX2JhY2tsaWdodCAoMSk7CisJfSBlbHNlIGlmIChzdHJjbXAgKGFyZ3ZbMV0sICJvZmYiKSA9PSAwKSB7CisJCWRlYnVnICgic3dpdGNoIGJhY2tsaWdodCBvZmZcbiIpOworCQlzbTUwMV9iYWNrbGlnaHQgKDApOworCX0gZWxzZSB7CisJCXByaW50ZiAoIlVzYWdlOlxuYmFja2xpZ2h0IG9uL29mZlxuIik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitVX0JPT1RfQ01EKAorCWxlZCAsCTIsCTEsCWNtZF9sZWQsCisJImxlZCAgICAgLSBzd2l0Y2ggc3RhdHVzIExFRCBvbiBvciBvZmZcbiIsCisJIm9uL29mZlxuIgorKTsKKworVV9CT09UX0NNRCgKKwliYWNrbGlnaHQgLAkyLAkxLAljbWRfYmFja2xpZ2h0LAorCSJiYWNrbGlnaHQgLSBzd2l0Y2ggYmFja2xpZ2h0IG9uIG9yIG9mZlxuIiwKKwkib24vb2ZmXG4iCisJKTsKKworI2VuZGlmIC8qIENPTkZJR19TVEs1MlhYICovCisjZW5kaWYgLyogQ0ZHX0NNRF9CU1AgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3RxbTUyMDAvY29uZmlnLm1rIGIvYm9hcmQvdHFtNTIwMC9jb25maWcubWsKaW5kZXggNTg1YTk5YS4uZDcyZGZlNyAxMDA2NDQKLS0tIGEvYm9hcmQvdHFtNTIwMC9jb25maWcubWsKKysrIGIvYm9hcmQvdHFtNTIwMC9jb25maWcubWsKQEAgLTI4LDEyICsyOCwxNyBAQAogIwogIwkweEZDMDAwMDAwICAgYm9vdCBsb3cgKHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gd2l0aCByb29tIGZvciBtYXggNjQgTUJ5dGUKICMJCSAgICAgRmxhc2ggUk9NKQorIwkweEZGRjAwMDAwICAgYm9vdCBoaWdoIChmb3IgYSBiYWNrdXAgY29weSBvZiBVLUJvb3QpCiAjCTB4MDAxMDAwMDAgICBib290IGZyb20gUkFNIChmb3IgdGVzdGluZyBvbmx5KQogIwogCitzaW5jbHVkZSAkKE9CSlRSRUUpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKKwogaWZuZGVmIFRFWFRfQkFTRQogIyMgU3RhbmRhcmQ6IGJvb3QgbG93CiBURVhUX0JBU0UgPSAweEZDMDAwMDAwCisjIyBGb3IgYSBiYWNrdXAgY29weSBvZiBVLUJvb3QgYXQgdGhlIGVuZCBvZiBmbGFzaDogYm9vdCBoaWdoCisjIFRFWFRfQkFTRSA9IDB4RkZGMDAwMDAKICMjIEZvciB0ZXN0aW5nOiBib290IGZyb20gUkFNCiAjIFRFWFRfQkFTRSA9IDB4MDAxMDAwMDAKIGVuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC90cW01MjAwL3RxbTUyMDAuYyBiL2JvYXJkL3RxbTUyMDAvdHFtNTIwMC5jCmluZGV4IDMxMGFiZDIuLmI3NjU3OWMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTUyMDAvdHFtNTIwMC5jCisrKyBiL2JvYXJkL3RxbTUyMDAvdHFtNTIwMC5jCkBAIC0xLDExICsxLDExIEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDAzLTIwMDQKKyAqIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKICAqIChDKSBDb3B5cmlnaHQgMjAwNAogICogTWFyayBKb25hcywgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIG1hcmsuam9uYXNAbW90b3JvbGEuY29tLgogICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA1CisgKiAoQykgQ29weXJpZ2h0IDIwMDQtMjAwNgogICogTWFydGluIEtyYXVzZSwgVFEtU3lzdGVtcyBHbWJILCBtYXJ0aW4ua3JhdXNlQHRxcy5kZQogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bXBjNXh4eC5oPgogI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2lmZGVmIENPTkZJR19WSURFT19TTTUwMQogI2luY2x1ZGUgPHNtNTAxLmg+CkBAIC0xMDEsNiArMTAyLDggQEAKIHsKIAl1bG9uZyBkcmFtc2l6ZSA9IDA7CiAJdWxvbmcgZHJhbXNpemUyID0gMDsKKwl1aW50IHN2ciwgcHZyOworCiAjaWZuZGVmIENGR19SQU1CT09UCiAJdWxvbmcgdGVzdDEsIHRlc3QyOwogCkBAIC0xOTAsMTEgKzE5MywzMSBAQAogCX0gZWxzZSB7CiAJCWRyYW1zaXplMiA9IDA7CiAJfQotCiAjZW5kaWYgLyogQ0ZHX1JBTUJPT1QgKi8KIAotLyoJcmV0dXJuIGRyYW1zaXplICsgZHJhbXNpemUyOyAqLworCS8qCisJICogT24gTVBDNTIwMEIgd2UgbmVlZCB0byBzZXQgdGhlIHNwZWNpYWwgY29uZmlndXJhdGlvbiBkZWxheSBpbiB0aGUKKwkgKiBERFIgY29udHJvbGxlci4gUGxlYXNlIHJlZmVyIHRvIEZyZWVzY2FsZSdzIEFOMzIyMSAiTVBDNTIwMEIgU0RSQU0KKwkgKiBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiIsIDMuMy4xIFNEZWxheS0tTUJBUiArIDB4MDE5MDoKKwkgKgorCSAqICJUaGUgU0RlbGF5IHNob3VsZCBiZSB3cml0dGVuIHRvIGEgdmFsdWUgb2YgMHgwMDAwMDAwNC4gSXQgaXMKKwkgKiByZXF1aXJlZCB0byBhY2NvdW50IGZvciBjaGFuZ2VzIGNhdXNlZCBieSBub3JtYWwgd2FmZXIgcHJvY2Vzc2luZworCSAqIHBhcmFtZXRlcnMuIgorCSAqLworCXN2ciA9IGdldF9zdnIoKTsKKwlwdnIgPSBnZXRfcHZyKCk7CisJaWYgKChTVlJfTUpSRVYoc3ZyKSA+PSAyKSAmJgorCSAgICAoUFZSX01BSihwdnIpID09IDEpICYmIChQVlJfTUlOKHB2cikgPT0gNCkpIHsKKworCQkqKHZ1X2xvbmcgKilNUEM1WFhYX1NEUkFNX1NERUxBWSA9IDB4MDQ7CisJCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CisJfQorCisjaWYgZGVmaW5lZChDT05GSUdfVFFNNTIwMF9CKQorCXJldHVybiBkcmFtc2l6ZSArIGRyYW1zaXplMjsKKyNlbHNlCiAJcmV0dXJuIGRyYW1zaXplOworI2VuZGlmIC8qIENPTkZJR19UUU01MjAwX0IgKi8KIH0KIAogI2VsaWYgZGVmaW5lZChDT05GSUdfTUdUNTEwMCkKQEAgLTI1MCwyMCArMjczLDM4IEBACiAKIGludCBjaGVja2JvYXJkICh2b2lkKQogewotI2lmIGRlZmluZWQgKENPTkZJR19BRVZGSUZPKQorI2lmIGRlZmluZWQoQ09ORklHX0FFVkZJRk8pCiAJcHV0cyAoIkJvYXJkOiBBRVZGSUZPXG4iKTsKIAlyZXR1cm4gMDsKICNlbmRpZgotI2lmIGRlZmluZWQgKENPTkZJR19UUU01MjAwKQotCXB1dHMgKCJCb2FyZDogVFFNNTIwMCAoVFEtQ29tcG9uZW50cyBHbWJIKVxuIik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19UUU01MjAwUykKKyMgZGVmaW5lIE1PRFVMRV9OQU1FCSJUUU01MjAwUyIKKyNlbHNlCisjIGRlZmluZSBNT0RVTEVfTkFNRQkiVFFNNTIwMCIKICNlbmRpZgotI2lmIGRlZmluZWQgKENPTkZJR19TVEs1MlhYKQotCXB1dHMgKCIgICAgICAgb24gYSBTVEs1MlhYIGJhc2Vib2FyZFxuIik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TVEs1MlhYKQorIyBkZWZpbmUgQ0FSUklFUl9OQU1FCSJTVEs1Mnh4IgorI2VsaWYgZGVmaW5lZChDT05GSUdfVEI1MjAwKQorIyBkZWZpbmUgQ0FSUklFUl9OQU1FCSJUQjUyMDAiCisjZWxpZiBkZWZpbmVkKENPTkZJR19DQU01MjAwKQorIyBkZWZpbmUgQ0FSUklFUl9OQU1FCSJDYW01MjAwIgorI2VsaWYgZGVmaW5lZChDT05GSUdfRk8zMDApCisjIGRlZmluZSBDQVJSSUVSX05BTUUJIkZPMzAwIgorI2Vsc2UKKyMgZXJyb3IgIlVOS05PV04iCiAjZW5kaWYKIAorCXB1dHMgKAkiQm9hcmQ6ICIgTU9EVUxFX05BTUUgIiAoVFEtQ29tcG9uZW50cyBHbWJIKVxuIgorCQkiICAgICAgIG9uIGEgIiBDQVJSSUVSX05BTUUgIiBjYXJyaWVyIGJvYXJkXG4iKTsKKwogCXJldHVybiAwOwogfQogCisjdW5kZWYgTU9EVUxFX05BTUUKKyN1bmRlZiBDQVJSSUVSX05BTUUKKwogdm9pZCBmbGFzaF9wcmVpbml0KHZvaWQpCiB7CiAJLyoKQEAgLTQwNSw3ICs0NDYsNDMgQEAKICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19QUzJNVUxUICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DU19BVVRPQ09ORikKKyNpZmRlZiBDT05GSUdfRk8zMDAKK2ludCBzaWxlbnRfYm9vdCAodm9pZCkKK3sKKwl2dV9sb25nIHRpbWVyM19zdGF0dXM7CisKKwkvKiBDb25maWd1cmUgR1BUMyBhcyBHUElPIGlucHV0ICovCisJKih2dV9sb25nICopTVBDNVhYWF9HUFQzX0VOQUJMRSA9IDB4MDAwMDAwMDQ7CisKKwkvKiBSZWFkIGluIFRJTUVSXzMgcGluIHN0YXR1cyAqLworCXRpbWVyM19zdGF0dXMgPSAqKHZ1X2xvbmcgKilNUEM1WFhYX0dQVDNfU1RBVFVTOworCisjaWZkZWYgRk8zMDBfU0lMRU5UX0NPTlNPTEVfV0hFTl9TMV9DTE9TRUQKKwkvKiBGb3JjZSBzaWxlbnQgY29uc29sZSBtb2RlIGlmIFMxIHN3aXRjaAorCSAqIGlzIGluIGNsb3NlZCBwb3NpdGlvbiAoVElNRVJfMyBwaW4gc3RhdHVzIGlzIExPVykuICovCisJaWYgKE1QQzVYWFhfR1BUX0dQSU9fUElOKHRpbWVyM19zdGF0dXMpID09IDApCisJCXJldHVybiAxOworI2Vsc2UKKwkvKiBGb3JjZSBzaWxlbnQgY29uc29sZSBtb2RlIGlmIFMxIHN3aXRjaAorCSAqIGlzIGluIG9wZW4gcG9zaXRpb24gKFRJTUVSXzMgcGluIHN0YXR1cyBpcyBISUdIKS4gKi8KKwlpZiAoTVBDNVhYWF9HUFRfR1BJT19QSU4odGltZXIzX3N0YXR1cykgPT0gMSkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitpbnQgYm9hcmRfZWFybHlfaW5pdF9mICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJaWYgKHNpbGVudF9ib290KCkpCisJCWdkLT5mbGFncyB8PSBHRF9GTEdfU0lMRU5UOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYJLyogQ09ORklHX0ZPMzAwICovCisKIGludCBsYXN0X3N0YWdlX2luaXQgKHZvaWQpCiB7CiAJLyoKQEAgLTQ5OCwxMyArNTc1LDIzIEBACiAJCV9fYXNtX18gdm9sYXRpbGUgKCJzeW5jIik7CiAJfQogCisjaWZkZWYgQ09ORklHX0ZPMzAwCisJaWYgKHNpbGVudF9ib290KCkpIHsKKwkJc2V0ZW52KCJib290ZGVsYXkiLCAiMCIpOworCQlkaXNhYmxlX2N0cmxjKDEpOworCX0KKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0NTX0FVVE9DT05GICovCiAKICNpZmRlZiBDT05GSUdfVklERU9fU001MDEKIAorI2lmZGVmIENPTkZJR19GTzMwMAorI2RlZmluZSBESVNQTEFZX1dJRFRIICAgODAwCisjZWxzZQogI2RlZmluZSBESVNQTEFZX1dJRFRIICAgNjQwCisjZW5kaWYKICNkZWZpbmUgRElTUExBWV9IRUlHSFQgIDQ4MAogCiAjaWZkZWYgQ09ORklHX1ZJREVPX1NNNTAxXzhCUFAKQEAgLTUzNCw2ICs2MjEsMjggQEAKIAl7MHg4MDIxOCwgMHgwMDAyMDFlOX0sCiAJezB4ODAyMDAsIDB4MDAwMTMzMDZ9LAogI2Vsc2UgIC8qIHBhbmVsICsgQ1JUICovCisjaWZkZWYgQ09ORklHX0ZPMzAwCisJezB4MDAwMDQsIDB4MH0sCisJezB4MDAwNDgsIDB4MDAwMjE4MDd9LAorCXsweDAwMDRDLCAweDMwMWEwYTAxfSwKKwl7MHgwMDA1NCwgMHgxfSwKKwl7MHgwMDA0MCwgMHgwMDAyMTgwN30sCisJezB4MDAwNDQsIDB4MDkxYTBhMDF9LAorCXsweDAwMDU0LCAweDB9LAorCXsweDgwMDAwLCAweDBmMDEzMTA2fSwKKwl7MHg4MDAwNCwgMHhjNDI4YmIxN30sCisJezB4ODAwMEMsIDB4MDAwMDAwMDB9LAorCXsweDgwMDEwLCAweDBDODAwQzgwfSwKKwl7MHg4MDAxNCwgMHgwMzIwMDAwMH0sCisJezB4ODAwMTgsIDB4MDFlMDAwMDB9LAorCXsweDgwMDFDLCAweDAwMDAwMDAwfSwKKwl7MHg4MDAyMCwgMHgwMWUwMDMyMH0sCisJezB4ODAwMjQsIDB4MDQyYTAzMWZ9LAorCXsweDgwMDI4LCAweDAwODYwMzRhfSwKKwl7MHg4MDAyQywgMHgwMjBjMDFkZn0sCisJezB4ODAwMzAsIDB4MDAwMjAxZWF9LAorCXsweDgwMjAwLCAweDAwMDEwMDAwfSwKKyNlbHNlCiAJezB4MDAwMDQsIDB4MH0sCiAJezB4MDAwNDgsIDB4MDAwMjE4MDd9LAogCXsweDAwMDRDLCAweDA5MWEwYTAxfSwKQEAgLTU1NCw2ICs2NjMsNyBAQAogCXsweDgwMDJDLCAweDAyMGMwMWRmfSwKIAl7MHg4MDAzMCwgMHgwMDAyMDFlOX0sCiAJezB4ODAyMDAsIDB4MDAwMTAwMDB9LAorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfRk8zMDAgKi8KICNlbmRpZgogCXswLCAwfQogfTsKQEAgLTU2Nyw5ICs2NzcsMTcgQEAKIHsKIAlpZiAobGluZV9udW1iZXIgPT0gMSkgewogCXN0cmNweSAoaW5mbywgIiBCb2FyZDogVFFNNTIwMCAoVFEtQ29tcG9uZW50cyBHbWJIKSIpOwotI2lmIGRlZmluZWQgKENPTkZJR19TVEs1MlhYKQorI2lmIGRlZmluZWQgKENPTkZJR19TVEs1MlhYKSB8fCBkZWZpbmVkIChDT05GSUdfVEI1MjAwKSB8fCBkZWZpbmVkKENPTkZJR19GTzMwMCkKIAl9IGVsc2UgaWYgKGxpbmVfbnVtYmVyID09IDIpIHsKLQkJc3RyY3B5IChpbmZvLCAiICAgICAgICBvbiBhIFNUSzUyWFggYmFzZWJvYXJkIik7CisjaWYgZGVmaW5lZCAoQ09ORklHX1NUSzUyWFgpCisJCXN0cmNweSAoaW5mbywgIiAgICAgICAgb24gYSBTVEs1Mnh4IGNhcnJpZXIgYm9hcmQiKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKENPTkZJR19UQjUyMDApCisJCXN0cmNweSAoaW5mbywgIiAgICAgICAgb24gYSBUQjUyMDAgY2FycmllciBib2FyZCIpOworI2VuZGlmCisjaWYgZGVmaW5lZCAoQ09ORklHX0ZPMzAwKQorCQlzdHJjcHkgKGluZm8sICIgICAgICAgIG9uIGEgRk8zMDAgY2FycmllciBib2FyZCIpOworI2VuZGlmCiAjZW5kaWYKIAl9CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9ib2FyZC90cW04MjYwL01ha2VmaWxlIGIvYm9hcmQvdHFtODI2MC9NYWtlZmlsZQppbmRleCBjMTBiOWZlLi5kM2FkY2NkIDEwMDY0NAotLS0gYS9ib2FyZC90cW04MjYwL01ha2VmaWxlCisrKyBiL2JvYXJkL3RxbTgyNjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjIsMTkgKzIyLDI2IEBACiAjCiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vdHFtOHh4LykKK2VuZGlmCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi90cW04eHgvbG9hZF9zZXJudW1fZXRoYWRkci5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi90cW04eHgvbG9hZF9zZXJudW1fZXRoYWRkci5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC90cW04MzR4L01ha2VmaWxlIGIvYm9hcmQvdHFtODM0eC9NYWtlZmlsZQppbmRleCAzZWNjN2QwLi42OTkxY2ZiIDEwMDY0NAotLS0gYS9ib2FyZC90cW04MzR4L01ha2VmaWxlCisrKyBiL2JvYXJkL3RxbTgzNHgvTWFrZWZpbGUKQEAgLTEsNCArMSw3IEBACiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIyAKICMgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDExICsyNSwxNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBwY2kubworQ09CSlMJPSAkKEJPQVJEKS5vIHBjaS5vCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC0zNyw5ICs0NCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHFtODM0eC90cW04MzR4LmMgYi9ib2FyZC90cW04MzR4L3RxbTgzNHguYwppbmRleCBkOTkyYWVjLi40MWIzNGNjIDEwMDY0NAotLS0gYS9ib2FyZC90cW04MzR4L3RxbTgzNHguYworKysgYi9ib2FyZC90cW04MzR4L3RxbTgzNHguYwpAQCAtNDI0LDEwICs0MjQsMTIgQEAKIAkJICogd2hpY2ggaGFzIHRvIGJlIHdyaXR0ZW4gd2l0aCBhIGNlcnRhaW4gdmFsdWUgZGVmaW5lZCBieQogCQkgKiBlcnJhdGEgc2hlZXQuCiAJCSAqLworCQl1MzIgKnJlc2VydmVkX3AgPSAodTMyICopKCh1OCAqKWltICsgMHgyZjAwKTsKKwogI2lmIGRlZmluZWQoRERSX0NBU0xBVF8yMCkKLQkJKigodTggKilpbSArIDB4MmYwMCkgPSAweDIwMWMwMDAwOworCQkqcmVzZXJ2ZWRfcCA9IDB4MjAxYzAwMDA7CiAjZWxzZQotCQkqKCh1OCAqKWltICsgMHgyZjAwKSA9IDB4MjAyYzAwMDA7CisJCSpyZXNlcnZlZF9wID0gMHgyMDJjMDAwMDsKICNlbmRpZgogCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3RxbTg1eHgvTWFrZWZpbGUgYi9ib2FyZC90cW04NXh4L01ha2VmaWxlCmluZGV4IDM5MzNkNDYuLmE2YWQ5OGEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTg1eHgvTWFrZWZpbGUKKysrIGIvYm9hcmQvdHFtODV4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAxCisjIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjMsMTMgKzIzLDE3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubyBzZHJhbS5vCitDT0JKUwk6PSAkKEJPQVJEKS5vIHNkcmFtLm8KIFNPQkpTCTo9IGluaXQubwogI1NPQkpTCTo9CiAKLSQoTElCKTogJChPQkpTKSAkKFNPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CkBAIC00MCw5ICs0NCw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHFtODV4eC90cW04NXh4LmMgYi9ib2FyZC90cW04NXh4L3RxbTg1eHguYwppbmRleCBiZWZlOGI3Li5iNGVmNWFmIDEwMDY0NAotLS0gYS9ib2FyZC90cW04NXh4L3RxbTg1eHguYworKysgYi9ib2FyZC90cW04NXh4L3RxbTg1eHguYwpAQCAtMjcsMTAgKzI3LDYgQEAKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2lmZGVmIENPTkZJR19QUzJNVUxUCi12b2lkIHBzMm11bHRfZWFybHlfaW5pdCh2b2lkKTsKLSNlbmRpZgotCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8cGNpLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNDcsNiArNDMsMTAgQEAKIGxvbmcgaW50IGZpeGVkX3NkcmFtICh2b2lkKTsKIHVsb25nIGZsYXNoX2dldF9zaXplICh1bG9uZyBiYXNlLCBpbnQgYmFua251bSk7CiAKKyNpZmRlZiBDT05GSUdfUFMyTVVMVAordm9pZCBwczJtdWx0X2Vhcmx5X2luaXQodm9pZCk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19DUE0yCiAvKgogICogSS9PIFBvcnQgY29uZmlndXJhdGlvbiB0YWJsZQpAQCAtNDIzLDQgKzQyMywzIEBACiAJcmV0dXJuICgwKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9SICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3RxbTh4eC9NYWtlZmlsZSBiL2JvYXJkL3RxbTh4eC9NYWtlZmlsZQppbmRleCAyZmY5YjRkLi4zMTJjMGM0IDEwMDY0NAotLS0gYS9ib2FyZC90cW04eHgvTWFrZWZpbGUKKysrIGIvYm9hcmQvdHFtOHh4L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gbG9hZF9zZXJudW1fZXRoYWRkci5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBsb2FkX3Nlcm51bV9ldGhhZGRyLm8KIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3RxbTh4eC9mbGFzaC5jIGIvYm9hcmQvdHFtOHh4L2ZsYXNoLmMKaW5kZXggYWI1N2VlNS4uZGIwYTdlNSAxMDA2NDQKLS0tIGEvYm9hcmQvdHFtOHh4L2ZsYXNoLmMKKysrIGIvYm9hcmQvdHFtOHh4L2ZsYXNoLmMKQEAgLTMzLDEyICszMywxMyBAQAogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAotI2lmIGRlZmluZWQoQ09ORklHX1RRTTh4eEwpICYmICFkZWZpbmVkKENPTkZJR19UUU04NjZNKQorI2lmIGRlZmluZWQoQ09ORklHX1RRTTh4eEwpICYmICFkZWZpbmVkKENPTkZJR19UUU04NjZNKSBcCisgICAgJiYgIWRlZmluZWQoQ09ORklHX1RRTTg4NUQpCiAjIGlmbmRlZiBDRkdfT1JfVElNSU5HX0ZMQVNIX0FUXzUwTUhaCiAjICBkZWZpbmUgQ0ZHX09SX1RJTUlOR19GTEFTSF9BVF81ME1IWgkoT1JfQUNTX0RJVjEgIHwgT1JfVFJMWCB8IE9SX0NTTlRfU0FNIHwgXAogCQkJCQkgT1JfU0NZXzJfQ0xLIHwgT1JfRUhUUiB8IE9SX0JJKQogIyBlbmRpZgotI2VuZGlmIC8qIENPTkZJR19UUU04eHhML00sICFUUU04NjZNICovCisjZW5kaWYgLyogQ09ORklHX1RRTTh4eEwvTSwgIVRRTTg2Nk0sICFUUU04ODVEICovCiAKICNpZm5kZWYJQ0ZHX0VOVl9BRERSCiAjZGVmaW5lIENGR19FTlZfQUREUgkoQ0ZHX0ZMQVNIX0JBU0UgKyBDRkdfRU5WX09GRlNFVCkKZGlmZiAtLWdpdCBhL2JvYXJkL3RxbTh4eC90cW04eHguYyBiL2JvYXJkL3RxbTh4eC90cW04eHguYwppbmRleCBiMjkyMjMxLi42YjIwNmY4IDEwMDY0NAotLS0gYS9ib2FyZC90cW04eHgvdHFtOHh4LmMKKysrIGIvYm9hcmQvdHFtOHh4L3RxbTh4eC5jCkBAIC0xMTksNiArMTE5LDEwIEBACiAJCWdkLT5ib2FyZF90eXBlID0gJ00nOwogCX0KIAorCWlmICgoKihzICsgNikgPT0gJ0QnKSkgewkvKiBhIFRRTTg4NUQgdHlwZSAqLworCQlnZC0+Ym9hcmRfdHlwZSA9ICdEJzsKKwl9CisKIAlmb3IgKDsgKnM7ICsrcykgewogCQlpZiAoKnMgPT0gJyAnKQogCQkJYnJlYWs7CkBAIC0xNzgsNyArMTgyLDggQEAKIAogI2lmbmRlZglDT05GSUdfQ0FOX0RSSVZFUgogCWlmICgoYm9hcmRfdHlwZSAhPSAnTCcpICYmCi0JICAgIChib2FyZF90eXBlICE9ICdNJykgKSB7CS8qICJMIiBhbmQgIk0iIHR5cGUgYm9hcmRzIGhhdmUgb25seSBvbmUgYmFuayBTRFJBTSAqLworCSAgICAoYm9hcmRfdHlwZSAhPSAnTScpICYmCisJICAgIChib2FyZF90eXBlICE9ICdEJykgKSB7CS8qICJMIiBhbmQgIk0iIHR5cGUgYm9hcmRzIGhhdmUgb25seSBvbmUgYmFuayBTRFJBTSAqLwogCQltZW1jdGwtPm1lbWNfb3IzID0gQ0ZHX09SM19QUkVMSU07CiAJCW1lbWN0bC0+bWVtY19icjMgPSBDRkdfQlIzX1BSRUxJTTsKIAl9CkBAIC0xOTcsNyArMjAyLDggQEAKIAogI2lmbmRlZglDT05GSUdfQ0FOX0RSSVZFUgogCWlmICgoYm9hcmRfdHlwZSAhPSAnTCcpICYmCi0JICAgIChib2FyZF90eXBlICE9ICdNJykgKSB7CS8qICJMIiBhbmQgIk0iIHR5cGUgYm9hcmRzIGhhdmUgb25seSBvbmUgYmFuayBTRFJBTSAqLworCSAgICAoYm9hcmRfdHlwZSAhPSAnTScpICYmCisJICAgIChib2FyZF90eXBlICE9ICdEJykgKSB7CS8qIG9ubHkgb25lIFNEUkFNIGJhbmsgb24gTCwgTSBhbmQgRCBtb2R1bGVzICovCiAJCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDA2MTA1OwkvKiBTRFJBTSBiYW5rIDEgKi8KIAkJdWRlbGF5ICgxKTsKIAkJbWVtY3RsLT5tZW1jX21jciA9IDB4ODAwMDYyMzA7CS8qIFNEUkFNIGJhbmsgMSAtIGV4ZWN1dGUgdHdpY2UgKi8KQEAgLTIxNCw4ICsyMjAsNyBAQAogCSAqCiAJICogdHJ5IDggY29sdW1uIG1vZGUKIAkgKi8KLQlzaXplOCA9IGRyYW1fc2l6ZSAoQ0ZHX01BTVJfOENPTCwgU0RSQU1fQkFTRTJfUFJFTElNLAotCQkJCQkgICBTRFJBTV9NQVhfU0laRSk7CisJc2l6ZTggPSBkcmFtX3NpemUgKENGR19NQU1SXzhDT0wsIFNEUkFNX0JBU0UyX1BSRUxJTSwgU0RSQU1fTUFYX1NJWkUpOwogCWRlYnVnICgiU0RSQU0gQmFuayAwIGluIDggY29sdW1uIG1vZGU6ICVsZCBNQlxuIiwgc2l6ZTggPj4gMjApOwogCiAJdWRlbGF5ICgxMDAwKTsKQEAgLTIyMyw4ICsyMjgsNyBAQAogCS8qCiAJICogdHJ5IDkgY29sdW1uIG1vZGUKIAkgKi8KLQlzaXplOSA9IGRyYW1fc2l6ZSAoQ0ZHX01BTVJfOUNPTCwgU0RSQU1fQkFTRTJfUFJFTElNLAotCQkJCQkgICBTRFJBTV9NQVhfU0laRSk7CisJc2l6ZTkgPSBkcmFtX3NpemUgKENGR19NQU1SXzlDT0wsIFNEUkFNX0JBU0UyX1BSRUxJTSwgU0RSQU1fTUFYX1NJWkUpOwogCWRlYnVnICgiU0RSQU0gQmFuayAwIGluIDkgY29sdW1uIG1vZGU6ICVsZCBNQlxuIiwgc2l6ZTkgPj4gMjApOwogCiAJdWRlbGF5KDEwMDApOwpAQCAtMjMzLDggKzIzNyw3IEBACiAJLyoKIAkgKiB0cnkgMTAgY29sdW1uIG1vZGUKIAkgKi8KLQlzaXplMTAgPSBkcmFtX3NpemUgKENGR19NQU1SXzEwQ09MLCAodWxvbmcgKikgU0RSQU1fQkFTRTJfUFJFTElNLAotCQkJCQkgICAgIFNEUkFNX01BWF9TSVpFKTsKKwlzaXplMTAgPSBkcmFtX3NpemUgKENGR19NQU1SXzEwQ09MLCBTRFJBTV9CQVNFMl9QUkVMSU0sIFNEUkFNX01BWF9TSVpFKTsKIAlkZWJ1ZyAoIlNEUkFNIEJhbmsgMCBpbiAxMCBjb2x1bW4gbW9kZTogJWxkIE1CXG4iLCBzaXplMTAgPj4gMjApOwogI2Vsc2UKIAlzaXplMTAgPSAwOwpAQCAtMjU1LDcgKzI1OCw4IEBACiAKICNpZm5kZWYJQ09ORklHX0NBTl9EUklWRVIKIAlpZiAoKGJvYXJkX3R5cGUgIT0gJ0wnKSAmJgotCSAgICAoYm9hcmRfdHlwZSAhPSAnTScpICkgewkvKiAiTCIgYW5kICJNIiB0eXBlIGJvYXJkcyBoYXZlIG9ubHkgb25lIGJhbmsgU0RSQU0gKi8KKwkgICAgKGJvYXJkX3R5cGUgIT0gJ00nKSAmJgorCSAgICAoYm9hcmRfdHlwZSAhPSAnRCcpICkgewkvKiAiTCIgYW5kICJNIiB0eXBlIGJvYXJkcyBoYXZlIG9ubHkgb25lIGJhbmsgU0RSQU0gKi8KIAkJLyoKIAkJICogQ2hlY2sgQmFuayAxIE1lbW9yeSBTaXplCiAJCSAqIHVzZSBjdXJyZW50IGNvbHVtbiBzZXR0aW5ncwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9NYWtlZmlsZSBiL2JvYXJkL3RyYWIvTWFrZWZpbGUKaW5kZXggMTU5NDA0Yi4uMmI5MThmNiAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi9NYWtlZmlsZQorKysgYi9ib2FyZC90cmFiL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsNDMgKzIzLDUxIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gdHJhYi5vIGZsYXNoLm8gdmZkLm8gY21kX3RyYWIubyBtZW1vcnkubyB0c2MyMDAwLm8gYXV0b191cGRhdGUubworQ09CSlMJOj0gdHJhYi5vIGZsYXNoLm8gdmZkLm8gY21kX3RyYWIubyBtZW1vcnkubyB0c2MyMDAwLm8gYXV0b191cGRhdGUubwogU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCiAKK0NPQkpTX0ZLVCA6PSB0cmFiX2ZrdC5vIHJzNDg1Lm8gdHNjMjAwMC5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgJChDT0JKU19GS1Q6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworT0JKU19GS1QgOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlNfRktUKSkKKwogZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQogCiBMT0FEX0FERFIgPSAweGMxMDAwMDAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1hbGw6CSQoTElCKSB0cmFiX2ZrdC5zcmVjIHRyYWJfZmt0LmJpbgorYWxsOgkkKExJQikgJChvYmopdHJhYl9ma3Quc3JlYyAkKG9iail0cmFiX2ZrdC5iaW4KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKLXRyYWJfZmt0LnNyZWM6CXRyYWJfZmt0Lm8gcnM0ODUubyB0c2MyMDAwLm8gJChMSUIpCi0JJChMRCkgLWcgLVR0ZXh0ICQoTE9BRF9BRERSKSAtbyAkKDw6Lm89KSAtZSAkKDw6Lm89KSAkXiAkKExJQikgXAotCQktTC4uLy4uL2V4YW1wbGVzIC1sc3R1YnMgXAotCQktTC4uLy4uL2xpYl9nZW5lcmljIC1sZ2VuZXJpYyBcCiskKG9iail0cmFiX2ZrdC5zcmVjOgkkKE9CSlNfRktUKSAkKExJQikKKwkkKExEKSAtZyAtVHRleHQgJChMT0FEX0FERFIpIC1vICQoPDoubz0pIC1lIHRyYWJfZmt0ICReICQoTElCKSBcCisJCS1MJChvYmopLi4vLi4vZXhhbXBsZXMgLWxzdHVicyBcCisJCS1MJChvYmopLi4vLi4vbGliX2dlbmVyaWMgLWxnZW5lcmljIFwKIAkJLUwkKGdjY2xpYmRpcikgLWxnY2MKIAkkKE9CSkNPUFkpIC1PIHNyZWMgJCg8Oi5vPSkgJEAKIAotdHJhYl9ma3QuYmluOgl0cmFiX2ZrdC5zcmVjCiskKG9iail0cmFiX2ZrdC5iaW46CSQob2JqKXRyYWJfZmt0LnNyZWMKIAkkKE9CSkNPUFkpIC1JIHNyZWMgLU8gYmluYXJ5ICQ8ICRACiAKIGNsZWFuOgotCXJtIC1mICQoU09CSlMpICQoT0JKUykKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpICQoT0JKU19GS1QpCiAKIGRpc3RjbGVhbjoJY2xlYW4KIAlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9hdXRvX3VwZGF0ZS5jIGIvYm9hcmQvdHJhYi9hdXRvX3VwZGF0ZS5jCmluZGV4IDA1NmU1NjIuLmQyYzhkNDQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RyYWIvYXV0b191cGRhdGUuYworKysgYi9ib2FyZC90cmFiL2F1dG9fdXBkYXRlLmMKQEAgLTU3LDkgKzU3LDkgQEAKICAqCQl2YWxpZCB0aGVuIHJ1biBpdC4KICAqCTIpIGlmIHByZWluc3QuaW1nIGlzIGZvdW5kIGxvYWQgaXQgaW50byBtZW1vcnkuIElmIGl0IGlzCiAgKgkJdmFsaWQgdGhlbiBydW4gaXQuIFVwZGF0ZSB0aGUgRUVQUk9NLgotICoJMykgaWYgZmlybXdhcmUuaW1nIGlzIGZvdW5kIGxvYWQgaXQgaW50byBtZW1vcnkuIElmIGl0IGlzIHZhbGlkLAorICoJMykgaWYgZmlybXdfMDEuaW1nIGlzIGZvdW5kIGxvYWQgaXQgaW50byBtZW1vcnkuIElmIGl0IGlzIHZhbGlkLAogICoJCWJ1cm4gaXQgaW50byBGTEFTSCBhbmQgdXBkYXRlIHRoZSBFRVBST00uCi0gKgk0KSBpZiBrZXJuZWwuaW1nIGlzIGZvdW5kIGxvYWQgaXQgaW50byBtZW1vcnkuIElmIGl0IGlzIHZhbGlkLAorICoJNCkgaWYga2VybmxfMDEuaW1nIGlzIGZvdW5kIGxvYWQgaXQgaW50byBtZW1vcnkuIElmIGl0IGlzIHZhbGlkLAogICoJCWJ1cm4gaXQgaW50byBGTEFTSCBhbmQgdXBkYXRlIHRoZSBFRVBST00uCiAgKgk1KSBpZiBhcHAuaW1nIGlzIGZvdW5kIGxvYWQgaXQgaW50byBtZW1vcnkuIElmIGl0IGlzIHZhbGlkLAogICoJCWJ1cm4gaXQgaW50byBGTEFTSCBhbmQgdXBkYXRlIHRoZSBFRVBST00uCkBAIC04MSw4ICs4MSw4IEBACiAvKiBwb3NzaWJsZSBuYW1lcyBvZiBmaWxlcyBvbiB0aGUgVVNCIHN0aWNrLiAqLwogI2RlZmluZSBBVV9QUkVQQVJFCSJwcmVwYXJlLmltZyIKICNkZWZpbmUgQVVfUFJFSU5TVAkicHJlaW5zdC5pbWciCi0jZGVmaW5lIEFVX0ZJUk1XQVJFCSJmaXJtd2FyZS5pbWciCi0jZGVmaW5lIEFVX0tFUk5FTAkia2VybmVsLmltZyIKKyNkZWZpbmUgQVVfRklSTVdBUkUJImZpcm13XzAxLmltZyIKKyNkZWZpbmUgQVVfS0VSTkVMCSJrZXJubF8wMS5pbWciCiAjZGVmaW5lIEFVX0FQUAkJImFwcC5pbWciCiAjZGVmaW5lIEFVX0RJU0sJCSJkaXNrLmltZyIKICNkZWZpbmUgQVVfUE9TVElOU1QJInBvc3RpbnN0LmltZyIKQEAgLTIyMiw3ICsyMjIsNyBAQAogCS8qIGNoZWNrIHRoZSBkYXRhIENSQyAqLwogCWNoZWNrc3VtID0gbnRvaGwoaGRyLT5paF9kY3JjKTsKIAotCWlmIChjcmMzMiAoMCwgKGNoYXIgKikoTE9BRF9BRERSICsgc2l6ZW9mKCpoZHIpKSwgbnRvaGwoaGRyLT5paF9zaXplKSkKKwlpZiAoY3JjMzIgKDAsICh1Y2hhciAqKShMT0FEX0FERFIgKyBzaXplb2YoKmhkcikpLCBudG9obChoZHItPmloX3NpemUpKQogCQkhPSBjaGVja3N1bSkKIAl7CiAJCXByaW50ZiAoIkltYWdlICVzIGJhZCBkYXRhIGNoZWNrc3VtXG4iLCBhdWZpbGVbaWR4XSk7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAljaGVja3N1bSA9IG50b2hsKGhkci0+aWhfaGNyYyk7CiAJaGRyLT5paF9oY3JjID0gMDsKIAotCWlmIChjcmMzMiAoMCwgKGNoYXIgKiloZHIsIHNpemVvZigqaGRyKSkgIT0gY2hlY2tzdW0pIHsKKwlpZiAoY3JjMzIgKDAsICh1Y2hhciAqKWhkciwgc2l6ZW9mKCpoZHIpKSAhPSBjaGVja3N1bSkgewogCQlwcmludGYgKCJJbWFnZSAlcyBiYWQgaGVhZGVyIGNoZWNrc3VtXG4iLCBhdWZpbGVbaWR4XSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zOTcsNyArMzk3LDcgQEAKIAl9CiAKIAkvKiBjaGVjayB0aGUgZGNyYyBvZiB0aGUgY29weSAqLwotCWlmIChjcmMzMiAoMCwgKGNoYXIgKikoc3RhcnQgKyBvZmYpLCBudG9obChoZHItPmloX3NpemUpKSAhPSBudG9obChoZHItPmloX2RjcmMpKSB7CisJaWYgKGNyYzMyICgwLCAodWNoYXIgKikoc3RhcnQgKyBvZmYpLCBudG9obChoZHItPmloX3NpemUpKSAhPSBudG9obChoZHItPmloX2RjcmMpKSB7CiAJCXByaW50ZiAoIkltYWdlICVzIEJhZCBEYXRhIENoZWNrc3VtIEFmdGVyIENPUFlcbiIsIGF1ZmlsZVtpZHhdKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTYxMyw3ICs2MTMsOCBAQAogI2RlZmluZSBWRkRfTE9HT19XSURUSCAxMTIKICNkZWZpbmUgVkZEX0xPR09fSEVJR0hUIDcyCiAJCQkJLyogbXVzdCBjYWxsIHRyYW5zZmVyX3BpYyBkaXJlY3RseSAqLwotCQkJCXRyYW5zZmVyX3BpYygzLCBlbnYsIFZGRF9MT0dPX0hFSUdIVCwgVkZEX0xPR09fV0lEVEgpOworCQkJCXRyYW5zZmVyX3BpYygzLCAodW5zaWduZWQgY2hhciAqKWVudiwKKwkJCQkJICAgICBWRkRfTE9HT19IRUlHSFQsIFZGRF9MT0dPX1dJRFRIKTsKIAkJCX0KIAkJCWJpdG1hcF9maXJzdCA9IDE7CiAJCX0KZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvY21kX3RyYWIuYyBiL2JvYXJkL3RyYWIvY21kX3RyYWIuYwppbmRleCBlZGVhOGYwLi5iODJjOGVkIDEwMDY0NAotLS0gYS9ib2FyZC90cmFiL2NtZF90cmFiLmMKKysrIGIvYm9hcmQvdHJhYi9jbWRfdHJhYi5jCkBAIC0xNDcsMTEgKzE0NywxMSBAQAogdTE2IHBhc3NfY3ljbGVzOwogdTE2IGZpcnN0X2Vycm9yX2N5Y2xlOwogdTggZmlyc3RfZXJyb3JfbnVtOwotdW5zaWduZWQgY2hhciBmaXJzdF9lcnJvcl9uYW1lWzE2XTsKK2NoYXIgZmlyc3RfZXJyb3JfbmFtZVsxNl07CiB1MTYgYWN0X2N5Y2xlOwogCiB0eXBlZGVmIHN0cnVjdCB0ZXN0X2Z1bmN0aW9uX3MgewotCXVuc2lnbmVkIGNoYXIgKm5hbWU7CisJY2hhciAqbmFtZTsKIAlpbnQgKCpwZikodm9pZCk7CiB9IHRlc3RfZnVuY3Rpb25fdDsKIApAQCAtMzc2LDcgKzM3Niw3IEBACiAJCXJldHVybiAoMSk7CiAJfQogCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgRUVfQUREUl9GSVJTVF9FUlJPUl9OQU1FLAotCQkJICAgICAgIDEsIGZpcnN0X2Vycm9yX25hbWUsCisJCQkgICAgICAgMSwgKHVuc2lnbmVkIGNoYXIqKWZpcnN0X2Vycm9yX25hbWUsCiAJCQkgICAgICAgc2l6ZW9mIChmaXJzdF9lcnJvcl9uYW1lKSkpIHsKIAkJcmV0dXJuICgxKTsKIAl9CkBAIC01MzcsNyArNTM3LDcgQEAKIAogCS8qIHdyaXRlIHRlc3Qgc3RyaW5nIDEsIHJlYWQgYmFjayBhbmQgdmVyaWZ5ICovCiAJaWYgKGkyY193cml0ZV9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgRUVfQUREUl9URVNULCAxLAotCQkJCUVFUFJPTV9URVNUX1NUUklOR18xLAorCQkJCSh1bnNpZ25lZCBjaGFyKilFRVBST01fVEVTVF9TVFJJTkdfMSwKIAkJCQlzaXplb2YgKEVFUFJPTV9URVNUX1NUUklOR18xKSkpIHsKIAkJcmV0dXJuICgxKTsKIAl9CkBAIC01NDcsNyArNTQ3LDcgQEAKIAkJcmV0dXJuICgxKTsKIAl9CiAKLQlpZiAoc3RyY21wICh0ZW1wLCBFRVBST01fVEVTVF9TVFJJTkdfMSkgIT0gMCkgeworCWlmIChzdHJjbXAgKChjaGFyICopdGVtcCwgRUVQUk9NX1RFU1RfU1RSSU5HXzEpICE9IDApIHsKIAkJcmVzdWx0ID0gMTsKIAkJcHJpbnRmICgiJXM6IGVycm9yOyByZWFkX3N0ciA9IFwiJXNcIlxuIiwgX19GVU5DVElPTl9fLCB0ZW1wKTsKIAl9CkBAIC01NTUsNyArNTU1LDcgQEAKIAkvKiB3cml0ZSB0ZXN0IHN0cmluZyAyLCByZWFkIGJhY2sgYW5kIHZlcmlmeSAqLwogCWlmIChyZXN1bHQgPT0gMCkgewogCQlpZiAoaTJjX3dyaXRlX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBFRV9BRERSX1RFU1QsIDEsCi0JCQkJCUVFUFJPTV9URVNUX1NUUklOR18yLAorCQkJCQkodW5zaWduZWQgY2hhciopRUVQUk9NX1RFU1RfU1RSSU5HXzIsCiAJCQkJCXNpemVvZiAoRUVQUk9NX1RFU1RfU1RSSU5HXzIpKSkgewogCQkJcmV0dXJuICgxKTsKIAkJfQpAQCAtNTY1LDcgKzU2NSw3IEBACiAJCQlyZXR1cm4gKDEpOwogCQl9CiAKLQkJaWYgKHN0cmNtcCAodGVtcCwgRUVQUk9NX1RFU1RfU1RSSU5HXzIpICE9IDApIHsKKwkJaWYgKHN0cmNtcCAoKGNoYXIgKil0ZW1wLCBFRVBST01fVEVTVF9TVFJJTkdfMikgIT0gMCkgewogCQkJcmVzdWx0ID0gMTsKIAkJCXByaW50ZiAoIiVzOiBlcnJvcjsgcmVhZCBzdHIgPSBcIiVzXCJcbiIsCiAJCQkJX19GVU5DVElPTl9fLCB0ZW1wKTsKQEAgLTc3Nyw3ICs3NzcsNyBAQAogCQlyZXR1cm4gKDEpOwogCX0KIAlpZiAoaTJjX3dyaXRlX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBFRV9BRERSX0ZJUlNUX0VSUk9SX05BTUUsCi0JCQkJMSwgZmlyc3RfZXJyb3JfbmFtZSwKKwkJCQkxLCAodW5zaWduZWQgY2hhciopIGZpcnN0X2Vycm9yX25hbWUsCiAJCQkJc2l6ZW9mKGZpcnN0X2Vycm9yX25hbWUpKSkgewogCQlyZXR1cm4gKDEpOwogCX0KZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvY29uZmlnLm1rIGIvYm9hcmQvdHJhYi9jb25maWcubWsKaW5kZXggZjI0MTFkMC4uODAwY2MyOCAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi9jb25maWcubWsKKysrIGIvYm9hcmQvdHJhYi9jb25maWcubWsKQEAgLTE5LDcgKzE5LDcgQEAKICMgZG93bmxvYWQgYXJlYXMgaXMgMEM4MCcwMDAwCiAjCiAKLXNpbmNsdWRlICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS9jb25maWcudG1wCitzaW5jbHVkZSAkKE9CSlRSRUUpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKIAogaWZuZGVmIFRFWFRfQkFTRQogVEVYVF9CQVNFID0gMHgwREY0MDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9mbGFzaC5jIGIvYm9hcmQvdHJhYi9mbGFzaC5jCmluZGV4IDhjZGQ4MjQuLjNlOGYxMDUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RyYWIvZmxhc2guYworKysgYi9ib2FyZC90cmFiL2ZsYXNoLmMKQEAgLTI4MSwxMCArMjgxLDEyIEBACiAKIAkJCWlmIChjaGlwMSA9PSBFUlIgfHwgY2hpcDIgPT0gRVJSKSB7CiAJCQkJcmMgPSBFUlJfUFJPR19FUlJPUjsKKwkJCQlwcmludGYgKCJGbGFzaCBlcmFzZSBlcnJvclxuIik7CiAJCQkJZ290byBvdXRhaGVyZTsKIAkJCX0KIAkJCWlmIChjaGlwMSA9PSBUTU8pIHsKIAkJCQlyYyA9IEVSUl9USU1PVVQ7CisJCQkJcHJpbnRmICgiRmxhc2ggZXJhc2UgdGltZW91dCBlcnJvclxuIik7CiAJCQkJZ290byBvdXRhaGVyZTsKIAkJCX0KIAkJfQpAQCAtMzQwLDcgKzM0Miw5IEBACiAjZW5kaWYKIAlpZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKIAotCSphZGRyID0gQ01EX1BST0dSQU07CisJTUVNX0ZMQVNIX0FERFIxID0gQ01EX1VOTE9DSzE7CisJTUVNX0ZMQVNIX0FERFIyID0gQ01EX1VOTE9DSzI7CisJTUVNX0ZMQVNIX0FERFIxID0gQ01EX1BST0dSQU07CiAJKmFkZHIgPSBkYXRhOwogCiAJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KQEAgLTM1Miw3ICszNTYsNyBAQAogCQlyZXN1bHQgPSAqYWRkcjsKIAogCQkvKiBjaGVjayB0aW1lb3V0ICovCi0JCWlmIChnZXRfdGltZXJfbWFza2VkICgpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgewogCQkJY2hpcDEgPSBFUlIgfCBUTU87CiAJCQlicmVhazsKIAkJfQpAQCAtMzg0LDggKzM4OCwxMyBAQAogCiAJKmFkZHIgPSBDTURfUkVBRF9BUlJBWTsKIAotCWlmIChjaGlwMSA9PSBFUlIgfHwgY2hpcDIgPT0gRVJSIHx8ICphZGRyICE9IGRhdGEpCisJaWYgKGNoaXAxID09IEVSUiB8fCBjaGlwMiA9PSBFUlIgfHwgKmFkZHIgIT0gZGF0YSkgewogCQlyYyA9IEVSUl9QUk9HX0VSUk9SOworCQlwcmludGYgKCJGbGFzaCBwcm9ncmFtIGVycm9yXG4iKTsKKwkJZGVidWcgKCJjaGlwMTogJSN4LCBjaGlwMjogJSN4LCBhZGRyOiAlI2x4ICphZGRyOiAlI2x4LCAiCisJCSAgICAgICAiZGF0YTogJSNseFxuIiwKKwkJICAgICAgIGNoaXAxLCBjaGlwMiwgYWRkciwgKmFkZHIsIGRhdGEpOworCX0KIAogCWlmIChpZmxhZykKIAkJZW5hYmxlX2ludGVycnVwdHMgKCk7CkBAIC00MDgsMTAgKzQxNyw2IEBACiAJaW50IGw7CiAJaW50IGksIHJjOwogCi0JTUVNX0ZMQVNIX0FERFIxID0gQ01EX1VOTE9DSzE7Ci0JTUVNX0ZMQVNIX0FERFIyID0gQ01EX1VOTE9DSzI7Ci0JTUVNX0ZMQVNIX0FERFIxID0gQ01EX1VOTE9DS19CWVBBU1M7Ci0KIAl3cCA9IChhZGRyICYgfjMpOwkvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8KIAogCS8qCkBAIC00NzksOSArNDg0LDYgQEAKIAogCURvbmU6CiAKLQlNRU1fRkxBU0hfQUREUiA9IENNRF9VTkxPQ0tfQllQQVNTX1JFUzE7Ci0JTUVNX0ZMQVNIX0FERFIgPSBDTURfVU5MT0NLX0JZUEFTU19SRVMyOwotCiAJcmV0dXJuIChyYyk7CiB9CiAKQEAgLTUxNSw3ICs1MTcsNyBAQAogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CiAJCWluZm8tPnNpemUgPSAwOwotCQlhZGRyWzBdID0gMHgwMEZGMDBGRjsJCS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisJCWFkZHJbMF0gPSBDTURfUkVBRF9BUlJBWTsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KIAkJZGVidWcgKCIjIyBmbGFzaF9pbml0OiB1bmtub3duIG1hbnVmYWN0dXJlclxuIik7CiAJCXJldHVybiAoMCk7CQkJLyogbm8gb3IgdW5rbm93biBmbGFzaAkqLwogCX0KQEAgLTUzMCw3ICs1MzIsNyBAQAogCQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKIAkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDA7CiAKLQkJYWRkclswXSA9IDB4MDBGRjAwRkY7CQkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCQlhZGRyWzBdID0gQ01EX1JFQURfQVJSQVk7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCiAJCWJyZWFrOwkJCQkvKiA9PiAgOCBNQgkJKi8KIAogCWNhc2UgQU1EX0lEX0xWNjQwVToKQEAgLTUzOCw3ICs1NDAsNyBAQAogCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxMjg7CiAJCWluZm8tPnNpemUgPSAweDAxMDAwMDAwOwogCi0JCWFkZHJbMF0gPSAweDAwRjAwMEYwOwkJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwkJYWRkclswXSA9IENNRF9SRUFEX0FSUkFZOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwogCQlicmVhazsJCQkJLyogPT4gMTYgTUIJCSovCiAKIAljYXNlIE1YX0lEX0xWMzIwQjoKQEAgLTU0NiwxMyArNTQ4LDEzIEBACiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOwogCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwMDsKIAotCQlhZGRyWzBdID0gMHgwMEZGMDBGRjsJCS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisJCWFkZHJbMF0gPSBDTURfUkVBRF9BUlJBWTsJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KIAkJYnJlYWs7CQkJCS8qID0+ICA4IE1CCQkqLwogCiAJZGVmYXVsdDoKIAkJZGVidWcgKCIjIyBmbGFzaF9pbml0OiB1bmtub3duIGZsYXNoIGNoaXBcbiIpOwogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JCWFkZHJbMF0gPSAweDAwRkYwMEZGOwkJLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwkJYWRkclswXSA9IENNRF9SRUFEX0FSUkFZOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwogCQlyZXR1cm4gKDApOwkJCS8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KIAogCX0KZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvbWVtb3J5LmMgYi9ib2FyZC90cmFiL21lbW9yeS5jCmluZGV4IDQwOTc4OTIuLjU4YmQ5OTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RyYWIvbWVtb3J5LmMKKysrIGIvYm9hcmQvdHJhYi9tZW1vcnkuYwpAQCAtNDE5LDE0ICs0MTksMTQgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gbWVtb3J5X3Bvc3RfZGF0YWxpbmUgKChsb25nIGxvbmcgKilzdGFydCk7CisJCXJldCA9IG1lbW9yeV9wb3N0X2RhdGFsaW5lICgodW5zaWduZWQgbG9uZyBsb25nICopc3RhcnQpOwogCVdBVENIRE9HX1JFU0VUICgpOwogCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gbWVtb3J5X3Bvc3RfYWRkcmxpbmUgKChsb25nICopc3RhcnQsIChsb25nICopc3RhcnQsIHNpemUpOworCQlyZXQgPSBtZW1vcnlfcG9zdF9hZGRybGluZSAoKHVsb25nICopc3RhcnQsICh1bG9uZyAqKXN0YXJ0LCBzaXplKTsKIAlXQVRDSERPR19SRVNFVCAoKTsKIAlpZiAocmV0ID09IDApCi0JCXJldCA9IG1lbW9yeV9wb3N0X2FkZHJsaW5lICgobG9uZyAqKShzdGFydCArIHNpemUgLSA4KSwKLQkJCQkJICAgIChsb25nICopc3RhcnQsIHNpemUpOworCQlyZXQgPSBtZW1vcnlfcG9zdF9hZGRybGluZSAoKHVsb25nICopKHN0YXJ0ICsgc2l6ZSAtIDgpLAorCQkJCQkgICAgKHVsb25nICopc3RhcnQsIHNpemUpOwogCVdBVENIRE9HX1JFU0VUICgpOwogCWlmIChyZXQgPT0gMCkKIAkJcmV0ID0gbWVtb3J5X3Bvc3RfdGVzdDEgKHN0YXJ0LCBzaXplLCAweDAwMDAwMDAwKTsKZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvdHJhYi5jIGIvYm9hcmQvdHJhYi90cmFiLmMKaW5kZXggMzQ2NDA2ZS4uZDhhNzI2YiAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi90cmFiLmMKKysrIGIvYm9hcmQvdHJhYi90cmFiLmMKQEAgLTE1MiwxMyArMTUyLDEzIEBACiAKICNkZWZpbmUgS0JEX0RBVEEJKCgoKih2b2xhdGlsZSB1bG9uZyAqKTB4MDQwMjAwMDApID4+IDE2KSAmIDB4RikKIAotc3RhdGljIHVjaGFyICprZXlfbWF0Y2ggKHVsb25nKTsKK3N0YXRpYyBjaGFyICprZXlfbWF0Y2ggKHVsb25nKTsKIAogaW50IG1pc2NfaW5pdF9yICh2b2lkKQogewogCXVsb25nIGtiZF9kYXRhID0gS0JEX0RBVEE7Ci0JdWNoYXIga2V5YmRfZW52W0tFWUJEX0tFWV9OVU0gKyAxXTsKLQl1Y2hhciAqc3RyOworCWNoYXIgKnN0cjsKKwljaGFyIGtleWJkX2VudltLRVlCRF9LRVlfTlVNICsgMV07CiAJaW50IGk7CiAKICNpZmRlZiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRQpAQCAtMTc1LDkgKzE3NSwxMSBAQAogI2VuZGlmIC8qIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFICovCiAKICNpZmRlZiBDT05GSUdfQVVUT19VUERBVEUKLQlleHRlcm4gaW50IGRvX2F1dG9fdXBkYXRlKHZvaWQpOwotCS8qIHRoaXMgaGFzIHByaW9yaXR5IG92ZXIgYWxsIGVsc2UgKi8KLQlkb19hdXRvX3VwZGF0ZSgpOworCXsKKwkJZXh0ZXJuIGludCBkb19hdXRvX3VwZGF0ZSh2b2lkKTsKKwkJLyogdGhpcyBoYXMgcHJpb3JpdHkgb3ZlciBhbGwgZWxzZSAqLworCQlkb19hdXRvX3VwZGF0ZSgpOworCX0KICNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IEtFWUJEX0tFWV9OVU07ICsraSkgewpAQCAtMjA4LDcgKzIxMCw3IEBACiBzdGF0aWMgdWNoYXIga2JkX21hZ2ljX3ByZWZpeFtdID0gImtleV9tYWdpYyI7CiBzdGF0aWMgdWNoYXIga2JkX2NvbW1hbmRfcHJlZml4W10gPSAia2V5X2NtZCI7CiAKLXN0YXRpYyBpbnQgY29tcGFyZV9tYWdpYyAodWxvbmcga2JkX2RhdGEsIHVjaGFyICpzdHIpCitzdGF0aWMgaW50IGNvbXBhcmVfbWFnaWMgKHVsb25nIGtiZF9kYXRhLCBjaGFyICpzdHIpCiB7CiAJdWNoYXIga2V5X21hc2s7CiAKQEAgLTI1NCwxMiArMjU2LDEyIEBACiAgKiBOb3RlOiB0aGUgc3RyaW5nIHBvaW50cyB0byBzdGF0aWMgZW52aXJvbm1lbnQgZGF0YSBhbmQgbXVzdCBiZQogICogc2F2ZWQgYmVmb3JlIHlvdSBjYWxsIGFueSBmdW5jdGlvbiB0aGF0IG1vZGlmaWVzIHRoZSBlbnZpcm9ubWVudC4KICAqLwotc3RhdGljIHVjaGFyICprZXlfbWF0Y2ggKHVsb25nIGtiZF9kYXRhKQorc3RhdGljIGNoYXIgKmtleV9tYXRjaCAodWxvbmcga2JkX2RhdGEpCiB7Ci0JdWNoYXIgbWFnaWNbc2l6ZW9mIChrYmRfbWFnaWNfcHJlZml4KSArIDFdOwotCXVjaGFyIGNtZF9uYW1lW3NpemVvZiAoa2JkX2NvbW1hbmRfcHJlZml4KSArIDFdOwotCXVjaGFyICpzdWZmaXg7Ci0JdWNoYXIgKmtiZF9tYWdpY19rZXlzOworCWNoYXIgbWFnaWNbc2l6ZW9mIChrYmRfbWFnaWNfcHJlZml4KSArIDFdOworCWNoYXIgY21kX25hbWVbc2l6ZW9mIChrYmRfY29tbWFuZF9wcmVmaXgpICsgMV07CisJY2hhciAqc3VmZml4OworCWNoYXIgKmtiZF9tYWdpY19rZXlzOwogCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIHN0cmluZyBkZWZpbmVzIHRoZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIHBlIGFwcGVuZGVkCkBAIC0zMDQsNyArMzA2LDcgQEAKIGludCBkb19rYmQgKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAl1bG9uZyBrYmRfZGF0YSA9IEtCRF9EQVRBOwotCXVjaGFyIGtleWJkX2VudltLRVlCRF9LRVlfTlVNICsgMV07CisJY2hhciBrZXliZF9lbnZbS0VZQkRfS0VZX05VTSArIDFdOwogCWludCBpOwogCiAJcHV0cyAoIktleXM6Iik7CkBAIC00MDQsNyArNDA2LDcgQEAKIAogc3RhdGljIHZvaWQgdHNjMjAwMF9zZXRfYnJpZ2h0bmVzcyh2b2lkKQogewotCXVjaGFyIHRtcFsxMF07CisJY2hhciB0bXBbMTBdOwogCWludCBpLCBicjsKIAogCXNwaV9pbml0KCk7CmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL3RyYWJfZmt0LmMgYi9ib2FyZC90cmFiL3RyYWJfZmt0LmMKaW5kZXggYWJiM2IyOS4uNzFiZTZlMCAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi90cmFiX2ZrdC5jCisrKyBiL2JvYXJkL3RyYWIvdHJhYl9ma3QuYwpAQCAtOTY3LDIxICs5NjcsMjEgQEAKIAogCWlmIChjYWxpYl9wb2ludCA9PSBDQUxJQl9UTCkgewogCQlpZiAoaTJjX3dyaXRlX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBUT1VDSF9YMCwgMSwKLQkJCSAgICAgICAoY2hhciAqKSZ4LCAyKSkgeworCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopJngsIDIpKSB7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpZiAoaTJjX3dyaXRlX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBUT1VDSF9ZMCwgMSwKLQkJCSAgICAgICAoY2hhciAqKSZ5LCAyKSkgeworCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopJnksIDIpKSB7CiAJCQlyZXR1cm4gMTsKIAkJfQogCiAJCS8qIHZlcmlmeSB3cml0dGVuIHZhbHVlcyAqLwogCQlpZiAoaTJjX3JlYWRfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIFRPVUNIX1gwLCAxLAotCQkJICAgICAgKGNoYXIgKikmeF92ZXJpZnksIDIpKSB7CisJCQkgICAgICAodW5zaWduZWQgY2hhciAqKSZ4X3ZlcmlmeSwgMikpIHsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWTAsIDEsCi0JCQkgICAgICAgKGNoYXIgKikmeV92ZXJpZnksIDIpKSB7CisJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmeV92ZXJpZnksIDIpKSB7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpZiAoKHkgIT0geV92ZXJpZnkpIHx8ICh4ICE9IHhfdmVyaWZ5KSkgewpAQCAtOTkzLDIxICs5OTMsMjEgQEAKIAl9CiAJZWxzZSBpZiAoY2FsaWJfcG9pbnQgPT0gQ0FMSUJfRFIpIHsKIAkJICBpZiAoaTJjX3dyaXRlX211bHRpcGxlIChJMkNfRUVQUk9NX0RFVl9BRERSLCBUT1VDSF9YMSwgMSwKLQkJCSAgICAgICAoY2hhciAqKSZ4LCAyKSkgeworCQkJICAgICAgICh1bnNpZ25lZCBjaGFyICopJngsIDIpKSB7CiAJCQlyZXR1cm4gMTsKIAkJICB9CiAJCWlmIChpMmNfd3JpdGVfbXVsdGlwbGUgKEkyQ19FRVBST01fREVWX0FERFIsIFRPVUNIX1kxLCAxLAotCQkJICAgICAgIChjaGFyICopJnksIDIpKSB7CisJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmeSwgMikpIHsKIAkJCXJldHVybiAxOwogCQl9CiAKIAkJLyogdmVyaWZ5IHdyaXR0ZW4gdmFsdWVzICovCiAJCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWDEsIDEsCi0JCQkJICAgICAgIChjaGFyICopJnhfdmVyaWZ5LCAyKSkgeworCQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSZ4X3ZlcmlmeSwgMikpIHsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmIChpMmNfcmVhZF9tdWx0aXBsZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgVE9VQ0hfWTEsIDEsCi0JCQkgICAgICAgKGNoYXIgKikmeV92ZXJpZnksIDIpKSB7CisJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmeV92ZXJpZnksIDIpKSB7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpZiAoKHkgIT0geV92ZXJpZnkpIHx8ICh4ICE9IHhfdmVyaWZ5KSkgewpAQCAtMTExMCw3ICsxMTEwLDcgQEAKIAogCWlmIChzdHJjbXAgKGFyZ3ZbMl0sICJyZWFkIikgPT0gMCkgewogCQlpZiAoaTJjX3JlYWQgKEkyQ19FRVBST01fREVWX0FERFIsIFNFUklBTF9OVU1CRVIsIDEsCi0JCQkgICAgICAoY2hhciAqKSZzZXJpYWxfbnVtYmVyLCA0KSkgeworCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKikmc2VyaWFsX251bWJlciwgNCkpIHsKIAkJCXByaW50ZiAoImNvdWxkIG5vdCByZWFkIGZyb20gZWVwcm9tXG4iKTsKIAkJCXJldHVybiAoMSk7CiAJCX0KQEAgLTExMjEsNyArMTEyMSw3IEBACiAJZWxzZSBpZiAoc3RyY21wIChhcmd2WzJdLCAid3JpdGUiKSA9PSAwKSB7CiAJCXNlcmlhbF9udW1iZXIgPSBzaW1wbGVfc3RydG91bChhcmd2WzNdLCBOVUxMLCAxMCk7CiAJCWlmIChpMmNfd3JpdGUgKEkyQ19FRVBST01fREVWX0FERFIsIFNFUklBTF9OVU1CRVIsIDEsCi0JCQkgICAgICAoY2hhciAqKSZzZXJpYWxfbnVtYmVyLCA0KSkgeworCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKikmc2VyaWFsX251bWJlciwgNCkpIHsKIAkJCXByaW50ZiAoImNvdWxkIG5vdCB3cml0ZSB0byBlZXByb21cbiIpOwogCQkJcmV0dXJuICgxKTsKIAkJfQpAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIHsKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JMkMpCiAJaW50IGNyYzsKLQljaGFyIGJ1ZltFRVBST01fTUFYX0NSQ19CVUZdOworCXVuc2lnbmVkIGNoYXIgYnVmW0VFUFJPTV9NQVhfQ1JDX0JVRl07CiAKIAlpZiAoaTJjX3JlYWQgKEkyQ19FRVBST01fREVWX0FERFIsIDAsIDEsIGJ1ZiwgNjApKSB7CiAJCXByaW50ZiAoImNvdWxkIG5vdCByZWFkIGZyb20gZWVwcm9tXG4iKTsKQEAgLTExNTMsNyArMTE1Myw3IEBACiAJcHJpbnRfaWRlbnRpZmllciAoKTsKIAlwcmludGYgKCJjcmMxNj0lIzA0eFxuIiwgY3JjKTsKIAotCWlmIChpMmNfd3JpdGUgKEkyQ19FRVBST01fREVWX0FERFIsIENSQzE2LCAxLCAoY2hhciAqKSZjcmMsCisJaWYgKGkyY193cml0ZSAoSTJDX0VFUFJPTV9ERVZfQUREUiwgQ1JDMTYsIDEsICh1bnNpZ25lZCBjaGFyICopJmNyYywKIAkJICAgICAgIHNpemVvZiAoY3JjKSkpIHsKIAkJcHJpbnRmICgiY291bGQgbm90IHJlYWQgZnJvbSBlZXByb21cbiIpOwogCQlyZXR1cm4gKDEpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi92ZmQuYyBiL2JvYXJkL3RyYWIvdmZkLmMKaW5kZXggMmYxZTdkNy4uYjY3OThmZCAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi92ZmQuYworKysgYi9ib2FyZC90cmFiL3ZmZC5jCkBAIC0yNTEsMTkgKzI1MSwxNyBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRyICA9IGdkLT5mYl9iYXNlOwogCQkJICAgIHVuc2lnbmVkIGludCBiaXRfbnIgPSAwOwogCi0JCQkgICAgaWYgKHZmZF90YWJsZVt4XVt5XVtjb2xvcl1bZGlzcGxheV1bZW50cnldKSB7CisJCQkgICAgcGl4ZWwgID0gdmZkX3RhYmxlW3hdW3ldW2NvbG9yXVtkaXNwbGF5XVtlbnRyeV0gKyBmcmFtZV9idWZfb2ZmczsKKwkJCSAgICAvKgorCQkJICAgICAqIHdyYXAgYXJyb3VuZCBpZiBvZmZzZXQKKwkJCSAgICAgKiAoc2VlIG1hbnVhbCBTM0MyNDAwKQorCQkJICAgICAqLworCQkJICAgIGlmIChwaXhlbD49RlJBTUVfQlVGX1NJWkUqOCkKKwkJCQkgICAgcGl4ZWwgPSBwaXhlbC0oRlJBTUVfQlVGX1NJWkUqOCk7CisJCQkgICAgYWRyICAgID0gZ2QtPmZiX2Jhc2UrKHBpeGVsLzMyKSo0KygzLShwaXhlbCUzMikvOCk7CisJCQkgICAgYml0X25yID0gcGl4ZWwlODsKKwkJCSAgICBiaXRfbnIgPSAoYml0X25yPjMpP2JpdF9uci00OmJpdF9ucis0OwogCi0JCQkJcGl4ZWwgID0gdmZkX3RhYmxlW3hdW3ldW2NvbG9yXVtkaXNwbGF5XVtlbnRyeV0gKyBmcmFtZV9idWZfb2ZmczsKLQkJCQkgLyoKLQkJCQkgICogd3JhcCBhcnJvdW5kIGlmIG9mZnNldAotCQkJCSAgKiAoc2VlIG1hbnVhbCBTM0MyNDAwKQotCQkJCSAgKi8KLQkJCQlpZiAocGl4ZWw+PUZSQU1FX0JVRl9TSVpFKjgpCi0JCQkJCXBpeGVsID0gcGl4ZWwtKEZSQU1FX0JVRl9TSVpFKjgpOwotCQkJCWFkciAgICA9IGdkLT5mYl9iYXNlKyhwaXhlbC8zMikqNCsoMy0ocGl4ZWwlMzIpLzgpOwotCQkJCWJpdF9uciA9IHBpeGVsJTg7Ci0JCQkJYml0X25yID0gKGJpdF9ucj4zKT9iaXRfbnItNDpiaXRfbnIrNDsKLQkJCSAgICB9CiAJCQkgICAgYWRyX3ZmZF90YWJsZVt4XVt5XVtjb2xvcl1bZGlzcGxheV1bZW50cnldID0gYWRyOwogCQkJICAgIGJpdF92ZmRfdGFibGVbeF1beV1bY29sb3JdW2Rpc3BsYXldW2VudHJ5XSA9IGJpdF9ucjsKIAkJCX0KZGlmZiAtLWdpdCBhL2JvYXJkL3VjMTAwL01ha2VmaWxlIGIvYm9hcmQvdWMxMDAvTWFrZWZpbGUKaW5kZXggZWI4MTYyNS4uYTdhOTNhYiAxMDA2NDQKLS0tIGEvYm9hcmQvdWMxMDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvdWMxMDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxOSArMjMsMjMgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotI09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KLU9CSlMJPSAkKEJPQVJEKS5vCisjQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gcGNtY2lhLm8KK0NPQkpTCT0gJChCT0FSRCkubyBwY21jaWEubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvdWMxMDAvcGNtY2lhLmMgYi9ib2FyZC91YzEwMC9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTRiNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvdWMxMDAvcGNtY2lhLmMKQEAgLTAsMCArMSwxOTggQEAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM4eHguaD4KKyNpbmNsdWRlIDxwY21jaWEuaD4KKworI3VuZGVmCUNPTkZJR19QQ01DSUEKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19QQ01DSUEKKworI2RlZmluZSBQQ01DSUFfQk9BUkRfTVNHICJVQzEwMCIKKworLyoKKyAqIFJlbWFyazogZG9uJ3QgdHVybiBvZmYgT0UgIl9fTVlfUENNQ0lBX0dDUlhfQ1hPRSIgb24gVUMxMDAgYm9hcmQuCisgKiAgICAgICAgIFRoaXMgbGVhZHMgdG8gYm9hcmQtaGFuZ3VwISAoc3IsIDggRGV6LiAyMDA0KQorICovCitzdGF0aWMgdm9pZCBjZmdfcG9ydHMgKHZvaWQpCit7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisKKwkvKgorCSogQ29uZmlndXJlIFBvcnQgQSBmb3IgTUFYMTYwMiBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2gKKwkqLworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0ICY9IH4weDgwMDA7CS8qIHNldCBwb3J0IHggb3V0cHV0IHRvIGxvdyAqLworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyIHw9IDB4ODAwMDsJLyogZW5hYmxlIHBvcnQgeCBhcyBvdXRwdXQgKi8KKworCWRlYnVnICgiU2V0IFBvcnQgQTogUEFSOiAlMDh4IERJUjogJTA4eCBEQVQ6ICUwOHhcbiIsCisJICAgICAgIGltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyLCBpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciwKKwkgICAgICAgaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQpOworfQorCitpbnQgcGNtY2lhX2hhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKKwl2b2xhdGlsZSBjcG04eHhfdAkqY3A7CisJdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOworCXZvbGF0aWxlIHN5c2NvbmY4eHhfdAkqc3lzcDsKKwl1aW50IHJlZywgbWFzazsKKworCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7CisKKwl1ZGVsYXkoMTAwMDApOworCisJaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXN5c3AgID0gKHN5c2NvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fc2l1X2NvbmYpKTsKKwlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKKworCS8qIENvbmZpZ3VyZSBQb3J0cyBmb3IgVFBTMjIxMUEgUEMtQ2FyZCBQb3dlci1JbnRlcmZhY2UgU3dpdGNoICovCisJY2ZnX3BvcnRzICgpOworCisJLyoKKwkqIENvbmZpZ3VyZSBTSVVNQ1IgdG8gZW5hYmxlIFBDTUNJQSBwb3J0IEIKKwkqIChWRkxTWzA6MV0gYXJlIG5vdCB1c2VkIGZvciBkZWJ1Z2dpbmcsIHdlIGNvbm5lY3QgRlJaIyBpbnN0ZWFkKQorCSovCisJc3lzcC0+c2Nfc2l1bWNyICY9IH5TSVVNQ1JfREJHQzExOwkvKiBzZXQgREJHQyB0byAwMCAqLworCisJLyogY2xlYXIgaW50ZXJydXB0IHN0YXRlLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJcGNtcC0+cGNtY19wc2NyID0gIFBDTUNJQV9NQVNLKF9zbG90Xyk7CisJcGNtcC0+cGNtY19wZXIgJj0gflBDTUNJQV9NQVNLKF9zbG90Xyk7CisKKwkvKgorCSogRGlzYWJsZSBpbnRlcnJ1cHRzLCBETUEsIGFuZCBQQ01DSUEgYnVmZmVycworCSogKGlzb2xhdGUgdGhlIGludGVyZmFjZSkgYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKKwkqLworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgID0gMDsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCXVkZWxheSg1MDApOworCisJLyoKKwkqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGNhcmQgaW4gdGhlIHNsb3QsIHRoZW4gY29uZmlndXJlIHRoZSBpbnRlcmZhY2UuCisJKi8KKwl1ZGVsYXkoMTAwMDApOworCWRlYnVnICgiWyVkXSAlczogUElQUiglcCk9MHgleFxuIiwKKwkgICAgICAgX19MSU5FX18sX19GVU5DVElPTl9fLAorCSAgICAgICAmKHBjbXAtPnBjbWNfcGlwcikscGNtcC0+cGNtY19waXByKTsKKwlpZiAocGNtcC0+cGNtY19waXByICYgKDB4MTgwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKSB7CisJCXByaW50ZiAoIiAgIE5vIENhcmQgZm91bmRcbiIpOworCQlyZXR1cm4gKDEpOworCX0KKworCS8qCisJKiBQb3dlciBPbi4KKwkqLworCW1hc2sgPSBQQ01DSUFfVlMxKHNsb3QpIHwgUENNQ0lBX1ZTMihzbG90KTsKKwlyZWcgID0gcGNtcC0+cGNtY19waXByOworCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwKKwkgICAgICAgcmVnLAorCSAgICAgICAocmVnJlBDTUNJQV9WUzEoc2xvdCkpPyJuIjoiZmYiLAorCSAgICAgICAocmVnJlBDTUNJQV9WUzIoc2xvdCkpPyJuIjoiZmYiKTsKKwlpZiAoKHJlZyAmIG1hc2spID09IG1hc2spIHsKKwkJcHV0cyAoIiA1LjBWIGNhcmQgZm91bmQ6ICIpOworCX0gZWxzZSB7CisJCXB1dHMgKCIgMy4zViBjYXJkIGZvdW5kOiAiKTsKKwl9CisKKwkvKiAgc3dpdGNoIFZDQyBvbiAqLworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0IHw9IDB4ODAwMDsgLyogcG93ZXIgZW5hYmxlIDMuM1YgKi8KKworCXVkZWxheSgxMDAwMCk7CisKKwlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7CisJcmVnICA9ICBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKKwlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCisJUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7CisKKwl1ZGVsYXkoMjUwMDAwKTsJLyogc29tZSBjYXJkcyBuZWVkID4xNTAgbXMgdG8gY29tZSB1cCA6LSggKi8KKworCWRlYnVnICgiIyBoYXJkd2FyZV9lbmFibGUgZG9uZVxuIik7CisKKwlyZXR1cm4gKDApOworfQorCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCitpbnQgcGNtY2lhX2hhcmR3YXJlX2Rpc2FibGUoaW50IHNsb3QpCit7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7CisJdm9sYXRpbGUgY3BtOHh4X3QJKmNwOworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKKwl1X2xvbmcgcmVnOworCisJZGVidWcgKCJoYXJkd2FyZV9kaXNhYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7CisKKwlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKKworCS8qIHN3aXRjaCBWQ0Mgb2ZmICovCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgJj0gfjB4ODAwMDsgLyogcG93ZXIgZGlzYWJsZSAzLjNWICovCisKKwkvKiBDb25maWd1cmUgUENNQ0lBIEdlbmVyYWwgQ29udHJvbCBSZWdpc3RlciAqLworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgID0gMDsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCisJdWRlbGF5KDEwMDAwKTsKKworCXJldHVybiAoMCk7Cit9CisjZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KKworCitpbnQgcGNtY2lhX3ZvbHRhZ2Vfc2V0KGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQoreworCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKKwl1X2xvbmcgcmVnOworCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIgorCQkJUENNQ0lBX0JPQVJEX01TRworCQkJIiBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKKwknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKKworCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworCS8qCisJKiBEaXNhYmxlIFBDTUNJQSBidWZmZXJzIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpCisJKiBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAorCSovCisJZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOworCXJlZyAgPSBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOworCXVkZWxheSg1MDApOworCisJLyoKKwkqIENvbmZpZ3VyZSBQb3J0IEMgcGlucyBmb3IKKwkqIDUgVm9sdHMgRW5hYmxlIGFuZCAzIFZvbHRzIGVuYWJsZSwKKwkqIFR1cm4gYWxsIHBvd2VyIHBpbnMgdG8gSGktWgorCSovCisJZGVidWcgKCJQQ01DSUEgcG93ZXIgT0ZGXG4iKTsKKwljZmdfcG9ydHMgKCk7CS8qIEVuYWJsZXMgc3dpdGNoLCBidXQgYWxsIGluIEhpLVogKi8KKworCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKKwlyZWcgID0gIFBDTUNJQV9QR0NSWChfc2xvdF8pOworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKKwl1ZGVsYXkoNTAwKTsKKworCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWMsIERPTkVcbiIsCisJICAgICAgIHNsb3QrJ0EnKTsKKwlyZXR1cm4gKDApOworfQorCisjZW5kaWYJLyogQ09ORklHX1BDTUNJQSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdXR4ODI0NS9NYWtlZmlsZSBiL2JvYXJkL3V0eDgyNDUvTWFrZWZpbGUKaW5kZXggZTY5OGFmYy4uMDY2NGQ5ZiAxMDA2NDQKLS0tIGEvYm9hcmQvdXR4ODI0NS9NYWtlZmlsZQorKysgYi9ib2FyZC91dHg4MjQ1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgKEMpIENvcHlyaWdodCAyMDAyCkBAIC0yOCwyMCArMjgsMjIgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubworQ09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAotU09CSlMJPQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3YzNy9NYWtlZmlsZSBiL2JvYXJkL3YzNy9NYWtlZmlsZQppbmRleCA3YTE3MDY3Li5iNDIwMjY5IDEwMDY0NAotLS0gYS9ib2FyZC92MzcvTWFrZWZpbGUKKysrIGIvYm9hcmQvdjM3L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDE4ICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvdmVyc2F0aWxlL01ha2VmaWxlIGIvYm9hcmQvdmVyc2F0aWxlL01ha2VmaWxlCmluZGV4IGZiZGM2MjcuLjI3YmNhMTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL3ZlcnNhdGlsZS9NYWtlZmlsZQorKysgYi9ib2FyZC92ZXJzYXRpbGUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMyArMjMsMTcgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk6PSB2ZXJzYXRpbGUubyBmbGFzaC5vCitDT0JKUwk6PSB2ZXJzYXRpbGUubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvdmVyc2F0aWxlL3NwbGl0X2J5X3ZhcmlhbnQuc2ggYi9ib2FyZC92ZXJzYXRpbGUvc3BsaXRfYnlfdmFyaWFudC5zaAppbmRleCA1NzZmMjM4Li4yNTQ2MWMyIDEwMDc1NQotLS0gYS9ib2FyZC92ZXJzYXRpbGUvc3BsaXRfYnlfdmFyaWFudC5zaAorKysgYi9ib2FyZC92ZXJzYXRpbGUvc3BsaXRfYnlfdmFyaWFudC5zaApAQCAtNSwyOCArNSwzMCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU2V0IHVwIHRoZSBWZXJzYXRpbGUgdHlwZSBkZWZpbmUKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21rZGlyIC1wICR7b2JqfWluY2x1ZGUKIHZhcmlhbnQ9UEI5MjZFSi1TCiBpZiBbICIkMSIgPT0gIiIgXQogdGhlbgogCWVjaG8gIiQwOjogTm8gcGFyYW1ldGVycyAtIHVzaW5nIHZlcnNhdGlsZXBiX2NvbmZpZyIKLQllY2hvICIjZGVmaW5lIENPTkZJR19BUkNIX1ZFUlNBVElMRV9QQiIgPiAuL2luY2x1ZGUvY29uZmlnLmgKKwllY2hvICIjZGVmaW5lIENPTkZJR19BUkNIX1ZFUlNBVElMRV9QQiIgPiAke29ian1pbmNsdWRlL2NvbmZpZy5oCiAJdmFyaWFudD1QQjkyNkVKLVMKIGVsc2UKIAljYXNlICIkMSIgaW4KIAl2ZXJzYXRpbGVwYl9jb25maWcJfAlcCiAJdmVyc2F0aWxlX2NvbmZpZykKLQllY2hvICIjZGVmaW5lIENPTkZJR19BUkNIX1ZFUlNBVElMRV9QQiIgPiAuL2luY2x1ZGUvY29uZmlnLmgKKwllY2hvICIjZGVmaW5lIENPTkZJR19BUkNIX1ZFUlNBVElMRV9QQiIgPiAke29ian1pbmNsdWRlL2NvbmZpZy5oCiAJOzsKIAogCXZlcnNhdGlsZWFiX2NvbmZpZykKLQllY2hvICIjZGVmaW5lIENPTkZJR19BUkNIX1ZFUlNBVElMRV9BQiIgPiAuL2luY2x1ZGUvY29uZmlnLmgKKwllY2hvICIjZGVmaW5lIENPTkZJR19BUkNIX1ZFUlNBVElMRV9BQiIgPiAke29ian1pbmNsdWRlL2NvbmZpZy5oCiAJdmFyaWFudD1BQjkyNkVKLVMKIAk7OwogCiAKIAkqKQogCWVjaG8gIiQwOjogVW5yZWNvZ25pc2VkIGNvbmZpZyAtIHVzaW5nIHZlcnNhdGlsZXBiX2NvbmZpZyIKLQllY2hvICIjZGVmaW5lIENPTkZJR19BUkNIX1ZFUlNBVElMRV9QQiIgPiAuL2luY2x1ZGUvY29uZmlnLmgKKwllY2hvICIjZGVmaW5lIENPTkZJR19BUkNIX1ZFUlNBVElMRV9QQiIgPiAke29ian1pbmNsdWRlL2NvbmZpZy5oCiAJdmFyaWFudD1QQjkyNkVKLVMKIAk7OwogCkBAIC0zNiw1ICszOCw1IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDb21wbGV0ZSB0aGUgY29uZmlndXJhdGlvbgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS4vbWtjb25maWcgLWEgdmVyc2F0aWxlIGFybSBhcm05MjZlanMgdmVyc2F0aWxlIE5VTEwgdmVyc2F0aWxlCiskTUtDT05GSUcgLWEgdmVyc2F0aWxlIGFybSBhcm05MjZlanMgdmVyc2F0aWxlIE5VTEwgdmVyc2F0aWxlCiBlY2hvICJWYXJpYW50OjogJHZhcmlhbnQiCmRpZmYgLS1naXQgYS9ib2FyZC92b2ljZWJsdWUvTWFrZWZpbGUgYi9ib2FyZC92b2ljZWJsdWUvTWFrZWZpbGUKaW5kZXggNjMwMmZhOC4uZmE2MTRmOCAxMDA2NDQKLS0tIGEvYm9hcmQvdm9pY2VibHVlL01ha2VmaWxlCisrKyBiL2JvYXJkL3ZvaWNlYmx1ZS9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZQogIwogIyAoQykgQ29weXJpZ2h0IDIwMDUKQEAgLTI0LDQzICsyNCw1MSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHZvaWNlYmx1ZS5vCitDT0JKUwk6PSB2b2ljZWJsdWUubwogU09CSlMJOj0gc2V0dXAubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpIGVlcHJvbS5jIGVlcHJvbV9zdGFydC5TCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKwogZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQogCiBMT0FEX0FERFIgPSAweDEwNDAwMDAwCiBMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS9lZXByb20ubGRzCitsbmsgPSAkKGlmICQob2JqKSwkKG9iaiksLikKIAotYWxsOgkkKExJQikgZWVwcm9tLnNyZWMgZWVwcm9tLmJpbgorYWxsOgkkKG9iaikuZGVwZW5kICQoTElCKSAkKG9iaillZXByb20uc3JlYyAkKG9iaillZXByb20uYmluCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKLWVlcHJvbS5zcmVjOgllZXByb20ubyBlZXByb21fc3RhcnQubwotCSQoTEQpIC1UICQoTERTQ1JJUFQpIC1nIC1UdGV4dCAkKExPQURfQUREUikgXAotCQktbyAkKDw6Lm89KSAtZSAkKDw6Lm89KSAkXiBcCi0JCS1MLi4vLi4vZXhhbXBsZXMgLWxzdHVicyBcCi0JCS1MLi4vLi4vbGliX2dlbmVyaWMgLWxnZW5lcmljIFwKKyQob2JqKWVlcHJvbS5zcmVjOgkkKG9iaillZXByb20ubyAkKG9iaillZXByb21fc3RhcnQubworCWNkICQobG5rKSAmJiAkKExEKSAtVCAkKExEU0NSSVBUKSAtZyAtVHRleHQgJChMT0FEX0FERFIpIFwKKwkJLW8gJCg8Oi5vPSkgLWUgZWVwcm9tIGVlcHJvbS5vIGVlcHJvbV9zdGFydC5vIFwKKwkJLUwkKG9iaikuLi8uLi9leGFtcGxlcyAtbHN0dWJzIFwKKwkJLUwkKG9iaikuLi8uLi9saWJfZ2VuZXJpYyAtbGdlbmVyaWMgXAogCQktTCQoZ2NjbGliZGlyKSAtbGdjYwogCSQoT0JKQ09QWSkgLU8gc3JlYyAkKDw6Lm89KSAkQAogCi1lZXByb20uYmluOgllZXByb20uc3JlYworJChvYmopZWVwcm9tLmJpbjoJJChvYmopZWVwcm9tLnNyZWMKIAkkKE9CSkNPUFkpIC1JIHNyZWMgLU8gYmluYXJ5ICQ8ICRAIDI+L2Rldi9udWxsCiAKIGNsZWFuOgotCXJtIC1mICQoU09CSlMpICQoT0JKUykgZWVwcm9tIGVlcHJvbS5zcmVjIGVlcHJvbS5iaW4KKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpICQob2JqKWVlcHJvbSBcCisJCSQob2JqKWVlcHJvbS5zcmVjICQob2JqKWVlcHJvbS5iaW4gXAorCQkkKG9iaillZXByb20ubyAkKG9iaillZXByb21fc3RhcnQubworCiAKIGRpc3RjbGVhbjoJY2xlYW4KIAlybSAtZiAkKExJQikgY29yZSBjb25maWcudG1wICouYmFrIC5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC92b2ljZWJsdWUvY29uZmlnLm1rIGIvYm9hcmQvdm9pY2VibHVlL2NvbmZpZy5tawppbmRleCBiNzdjOTFjLi5kNTVkYWE0IDEwMDY0NAotLS0gYS9ib2FyZC92b2ljZWJsdWUvY29uZmlnLm1rCisrKyBiL2JvYXJkL3ZvaWNlYmx1ZS9jb25maWcubWsKQEAgLTMsNyArMyw3IEBACiAjIGVudHJ5IDEwMDAnODAwMCAobWVtIGJhc2UgKyByZXNlcnZlZCkKICMKIAotc2luY2x1ZGUgJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL2NvbmZpZy50bXAKK3NpbmNsdWRlICQoT0JKVFJFRSkvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLnRtcAogCiBpZmVxICgkKFZPSUNFQkxVRV9TTUFMTF9GTEFTSCkseSkKICMgV2UgbG9hZCBvdXJzZWxmIHRvIGludGVybmFsIFNSQU0gYXQgMjAwMScyMDAwCmRpZmYgLS1naXQgYS9ib2FyZC93N28vTWFrZWZpbGUgYi9ib2FyZC93N28vTWFrZWZpbGUKaW5kZXggZDAwOGY4OS4uMmVjNDQ5ZCAxMDA2NDQKLS0tIGEvYm9hcmQvdzdvL01ha2VmaWxlCisrKyBiL2JvYXJkL3c3by9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCiAjIChDKSBDb3B5cmlnaHQgMjAwMQogIyBFcmlrIFRoZWlzZW4sIFdhdmUgNyBPcHRpY3MsIGV0aGVpc2VuQG1pbmRzcHJpbmcuY29tLgogIwpAQCAtMjMsMTIgKzI2LDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gZnBnYS5vIGZzYm9vdC5vIHBvc3QyLm8gdnBkLm8gY21kX3ZwZC5vIFwKK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGZwZ2EubyBmc2Jvb3QubyBwb3N0Mi5vIHZwZC5vIGNtZF92cGQubyBcCiAJICB3YXRjaGRvZy5vCiBTT0JKUwk9IGluaXQubyBwb3N0MS5vCiAKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJF4KIApAQCAtNDAsOSArNDcsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC93ZXBlcDI1MC9NYWtlZmlsZSBiL2JvYXJkL3dlcGVwMjUwL01ha2VmaWxlCmluZGV4IDExYWQ4ZmIuLmI1YjVhOTYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3dlcGVwMjUwL01ha2VmaWxlCisrKyBiL2JvYXJkL3dlcGVwMjUwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEyICsyMywxNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHdlcGVwMjUwLm8gZmxhc2gubworQ09CSlMJOj0gd2VwZXAyNTAubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC93ZXN0ZWwvYW14ODYwL01ha2VmaWxlIGIvYm9hcmQvd2VzdGVsL2FteDg2MC9NYWtlZmlsZQppbmRleCA3YTIwMTRkLi4xYjU3ZDJiIDEwMDY0NAotLS0gYS9ib2FyZC93ZXN0ZWwvYW14ODYwL01ha2VmaWxlCisrKyBiL2JvYXJkL3dlc3RlbC9hbXg4NjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTggKzIzLDIyIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC94YWVuaWF4L01ha2VmaWxlIGIvYm9hcmQveGFlbmlheC9NYWtlZmlsZQppbmRleCA3YzVmMGNkLi42NTVkYzlhIDEwMDY0NAotLS0gYS9ib2FyZC94YWVuaWF4L01ha2VmaWxlCisrKyBiL2JvYXJkL3hhZW5pYXgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTIgKzIzLDE2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0geGFlbmlheC5vIGZsYXNoLm8KK0NPQkpTCTo9IHhhZW5pYXgubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC94aWxpbngvbWwzMDAvTWFrZWZpbGUgYi9ib2FyZC94aWxpbngvbWwzMDAvTWFrZWZpbGUKaW5kZXggODgwYzQ5NC4uNGVjZjM3YSAxMDA2NDQKLS0tIGEvYm9hcmQveGlsaW54L21sMzAwL01ha2VmaWxlCisrKyBiL2JvYXJkL3hpbGlueC9tbDMwMC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0xOSwxNCArMTksMjIgQEAKICMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL3hpbGlueF9lbmV0KQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi94aWxpbnhfaWljKQorZW5kaWYKIAotQ0ZMQUdTICAgKz0gLUkuLi9tbDMwMCAtSS4uL2NvbW1vbiAtSS4uL3hpbGlueF9lbmV0IC1JLi4veGlsaW54X2lpYworSU5DUwkJOj0gLUkuLi9tbDMwMCAtSS4uL2NvbW1vbiAtSS4uL3hpbGlueF9lbmV0IC1JLi4veGlsaW54X2lpYworQ0ZMQUdTCQkrPSAkKElOQ1MpCitIT1NUX0NGTEFHUwkrPSAkKElOQ1MpCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8gXAorQ09CSlMJPSAkKEJPQVJEKS5vIFwKIAkgIHNlcmlhbC5vIFwKIAkgIC4uL3hpbGlueF9lbmV0L2VtYWNfYWRhcHRlci5vICAuLi94aWxpbnhfZW5ldC94ZW1hYy5vIFwKIAkgIC4uL3hpbGlueF9lbmV0L3hlbWFjX29wdGlvbnMubyAuLi94aWxpbnhfZW5ldC94ZW1hY19wb2xsZWQubyBcCkBAIC0zOSw2ICs0NywxMCBAQAogCiBTT0JKUwk9IGluaXQubwogCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKwogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCiAJJChBUikgY3J2ICRAICReCiAKQEAgLTUwLDkgKzYyLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQveG0yNTAvTWFrZWZpbGUgYi9ib2FyZC94bTI1MC9NYWtlZmlsZQppbmRleCAxYjBhM2YwLi4yMmYyMDI0IDEwMDY0NAotLS0gYS9ib2FyZC94bTI1MC9NYWtlZmlsZQorKysgYi9ib2FyZC94bTI1MC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEzICsyMywxNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHhtMjUwLm8gZmxhc2gubworQ09CSlMJOj0geG0yNTAubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCkBAIC0zOSw5ICs0Myw5IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQveHBlZGl0ZTFrL01ha2VmaWxlIGIvYm9hcmQveHBlZGl0ZTFrL01ha2VmaWxlCmluZGV4IGM1YzA5MTUuLjVmM2UzNGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3hwZWRpdGUxay9NYWtlZmlsZQorKysgYi9ib2FyZC94cGVkaXRlMWsvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywxMiArMjMsMTUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotT0JKUwk9ICQoQk9BUkQpLm8KLU9CSlMgKz1mbGFzaC5vCitDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogU09CSlMJPSBpbml0Lm8KIAorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKQEAgLTQwLDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQveHNlbmdpbmUvTWFrZWZpbGUgYi9ib2FyZC94c2VuZ2luZS9NYWtlZmlsZQppbmRleCBlZDE0NjRhLi43OGNhOWQ2IDEwMDY0NAotLS0gYS9ib2FyZC94c2VuZ2luZS9NYWtlZmlsZQorKysgYi9ib2FyZC94c2VuZ2luZS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDEyICsyMywxNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChCT0FSRCkuYQorTElCCT0gJChvYmopbGliJChCT0FSRCkuYQogCi1PQkpTCTo9IHhzZW5naW5lLm8gZmxhc2gubworQ09CSlMJOj0geHNlbmdpbmUubyBmbGFzaC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM5LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC96cGMxOTAwL01ha2VmaWxlIGIvYm9hcmQvenBjMTkwMC9NYWtlZmlsZQppbmRleCA4YjEwOTkzLi5lODgwZjg3IDEwMDY0NAotLS0gYS9ib2FyZC96cGMxOTAwL01ha2VmaWxlCisrKyBiL2JvYXJkL3pwYzE5MDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMTEgKzIzLDE1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gJChCT0FSRCkubworQ09CSlMJOj0gJChCT0FSRCkubwogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgpAQCAtMzgsOSArNDIsOSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi0taW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL3p5bG9uaXRlL01ha2VmaWxlIGIvYm9hcmQvenlsb25pdGUvTWFrZWZpbGUKaW5kZXggZjNhZDY3NC4uNGI3MGY3MCAxMDA2NDQKLS0tIGEvYm9hcmQvenlsb25pdGUvTWFrZWZpbGUKKysrIGIvYm9hcmQvenlsb25pdGUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjAsMTQgKzIwLDE5IEBACiAjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAjIE1BIDAyMTExLTEzMDcgVVNBCiAjCisKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEJPQVJEKS5hCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0genlsb25pdGUubyBuYW5kLm8KK0NPQkpTCTo9IHp5bG9uaXRlLm8gbmFuZC5vCiBTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KIAotJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKQEAgLTM4LDkgKzQzLDkgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotLWluY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC96eWxvbml0ZS9jb25maWcubWsgYi9ib2FyZC96eWxvbml0ZS9jb25maWcubWsKaW5kZXggYjVkNTk1NS4uMDliMGY3MSAxMDA2NDQKLS0tIGEvYm9hcmQvenlsb25pdGUvY29uZmlnLm1rCisrKyBiL2JvYXJkL3p5bG9uaXRlL2NvbmZpZy5tawpAQCAtMiw1ICsyLDMgQEAKICNURVhUX0JBU0UgPSAweGExNzAwMDAwCiAjVEVYVF9CQVNFID0gMHhhMzA4MDAwMAogVEVYVF9CQVNFID0gMHhhMzAwODAwMAotCi1CT0FSRExJQlMgPSBkcml2ZXJzL25hbmQvbGlibmFuZC5hCmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUgYi9jb21tb24vTWFrZWZpbGUKaW5kZXggZWIwYjVkYS4uNWZmOGY5MyAxMDA2NDQKLS0tIGEvY29tbW9uL01ha2VmaWxlCisrKyBiL2NvbW1vbi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMyw3ICsyMyw3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWJjb21tb24uYQorTElCCT0gJChvYmopbGliY29tbW9uLmEKIAogQU9CSlMJPQogCkBAIC01MSwzMCArNTEsMzEgQEAKIAkgIG1lbXNpemUubyBtaWlwaHliYi5vIG1paXBoeXV0aWwubyBcCiAJICBzX3JlY29yZC5vIHNlcmlhbC5vIHNvZnRfaTJjLm8gc29mdF9zcGkubyBzcGFydGFuMi5vIHNwYXJ0YW4zLm8gXAogCSAgdXNiLm8gdXNiX2tiZC5vIHVzYl9zdG9yYWdlLm8gXAotCSAgdmlydGV4Mi5vIHhpbGlueC5vIGNyYzE2Lm8geHl6TW9kZW0ubworCSAgdmlydGV4Mi5vIHhpbGlueC5vIGNyYzE2Lm8geHl6TW9kZW0ubyBjbWRfbWFjLm8KIAotT0JKUwk9ICQoQU9CSlMpICQoQ09CSlMpCitTUkNTCTo9ICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKEFPQkpTKSAkKENPQkpTKSkKIAogQ1BQRkxBR1MgKz0gLUkuLgogCiBhbGw6CSQoTElCKSAkKEFPQkpTKQogCi0kKExJQik6IC5kZXBlbmQgJChPQkpTKQorJChMSUIpOiAkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCi1lbnZpcm9ubWVudC5vOiBlbnZpcm9ubWVudC5jIC4uL3Rvb2xzL2VudmNyYworJChvYmopZW52aXJvbm1lbnQubzogJChzcmMpZW52aXJvbm1lbnQuYyAkKG9iaikuLi90b29scy9lbnZjcmMKIAkkKENDKSAkKEFGTEFHUykgLVdhLC0tbm8td2FybiBcCi0JCS1ERU5WX0NSQz0kKHNoZWxsIC4uL3Rvb2xzL2VudmNyYykgXAotCQktYyAtbyAkQCBlbnZpcm9ubWVudC5jCisJCS1ERU5WX0NSQz0kKHNoZWxsICQob2JqKS4uL3Rvb2xzL2VudmNyYykgXAorCQktYyAtbyAkQCAkKHNyYyllbnZpcm9ubWVudC5jCiAKLS4uL3Rvb2xzL2VudmNyYzoKKyQob2JqKS4uL3Rvb2xzL2VudmNyYzoKIAkkKE1BS0UpIC1DIC4uL3Rvb2xzCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9iZGluZm8uYyBiL2NvbW1vbi9jbWRfYmRpbmZvLmMKaW5kZXggMDRmYTRmYS4uNzBkZTc5NSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9iZGluZm8uYworKysgYi9jb21tb24vY21kX2JkaW5mby5jCkBAIC02MSwxMSArNjEsMTQgQEAKIAlwcmludF9udW0gKCJib290ZmxhZ3MiLAkgICAgYmQtPmJpX2Jvb3RmbGFncwkpOwogI2lmIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBkZWZpbmVkKENPTkZJR180MDVDUikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHXzQwNUVQKSB8fCBkZWZpbmVkKENPTkZJR19YSUxJTlhfTUwzMDApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpIHx8CVwKKyAgICBkZWZpbmVkKENPTkZJR180NDBTUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKQogCXByaW50X3N0ciAoInByb2NmcmVxIiwJICAgIHN0cm1oeihidWYsIGJkLT5iaV9wcm9jZnJlcSkpOwogCXByaW50X3N0ciAoInBsYl9idXNmcmVxIiwgICBzdHJtaHooYnVmLCBiZC0+YmlfcGxiX2J1c2ZyZXEpKTsKICNpZiBkZWZpbmVkKENPTkZJR180MDVHUCkgfHwgZGVmaW5lZChDT05GSUdfNDA1RVApIHx8IGRlZmluZWQoQ09ORklHX1hJTElOWF9NTDMwMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQogCXByaW50X3N0ciAoInBjaV9idXNmcmVxIiwgICBzdHJtaHooYnVmLCBiZC0+YmlfcGNpX2J1c2ZyZXEpKTsKICNlbmRpZgogI2Vsc2UJLyogISBDT05GSUdfNDA1R1AsIENPTkZJR180MDVDUiwgQ09ORklHXzQwNUVQLCBDT05GSUdfWElMSU5YX01MMzAwLCBDT05GSUdfNDQwRVAgQ09ORklHXzQ0MEdSICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2Jvb3QuYyBiL2NvbW1vbi9jbWRfYm9vdC5jCmluZGV4IGU2OGYxNmYuLjE4MmUyYWIgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfYm9vdC5jCisrKyBiL2NvbW1vbi9jbWRfYm9vdC5jCkBAIC04Myw3ICs4Myw3IEBACiBleHRlcm4gaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CiAKIFVfQk9PVF9DTUQoCi0JcmVzZXQsIDEsIDAsCWRvX3Jlc2V0LAorCXJlc2V0LCBDRkdfTUFYQVJHUywgMSwJZG9fcmVzZXQsCiAJInJlc2V0ICAgLSBQZXJmb3JtIFJFU0VUIG9mIHRoZSBDUFVcbiIsCiAJTlVMTAogKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm9vdG0uYyBiL2NvbW1vbi9jbWRfYm9vdG0uYwppbmRleCBmMWMwZWI0Li42NTJkODQzIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Jvb3RtLmMKKysrIGIvY29tbW9uL2NtZF9ib290bS5jCkBAIC01MjgsNyArNTI4LDcgQEAKIAl2b2lkCSgqa2VybmVsKShiZF90ICosIHVsb25nLCB1bG9uZywgdWxvbmcsIHVsb25nKTsKIAlpbWFnZV9oZWFkZXJfdCAqaGRyID0gJmhlYWRlcjsKICNpZmRlZiBDT05GSUdfT0ZfRkxBVF9UUkVFCi0JY2hhcgkqb2ZfZmxhdF90cmVlOworCWNoYXIJKm9mX2ZsYXRfdHJlZSA9IE5VTEw7CiAjZW5kaWYKIAogCWlmICgocyA9IGdldGVudiAoImluaXRyZF9oaWdoIikpICE9IE5VTEwpIHsKQEAgLTczNywxNCArNzM3LDc2IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX09GX0ZMQVRfVFJFRQotCWlmIChhcmdjID49IDMpCi0JeworCWlmKGFyZ2MgPiAzKSB7CiAJCW9mX2ZsYXRfdHJlZSA9IChjaGFyICopIHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbM10sIE5VTEwsIDE2KTsKLQkJcHJpbnRmICgiQm9vdGluZyB1c2luZyBmbGF0IGRldmljZSB0cmVlIGF0IDB4JXhcbiIsCisJCWhkciA9IChpbWFnZV9oZWFkZXJfdCAqKW9mX2ZsYXRfdHJlZTsKKworCQlpZiAgKCoodWxvbmcgKilvZl9mbGF0X3RyZWUgPT0gT0ZfRFRfSEVBREVSKSB7CisjaWZuZGVmIENGR19OT19GTEFTSAorCQkJaWYgKGFkZHIyaW5mbygodWxvbmcpb2ZfZmxhdF90cmVlKSAhPSBOVUxMKSB7CisJCQkJcHJpbnRmICgiQ2Fubm90IG1vZGlmeSBmbGF0IGRldmljZSB0cmVlIHN0b3JlZCBpbiBmbGFzaFxuIiBcCisJCQkJCSJDb3B5IHRvIG1lbW9yeSBiZWZvcmUgdXNpbmcgdGhlIGJvb3RtIGNvbW1hbmRcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UgaWYgKG50b2hsKGhkci0+aWhfbWFnaWMpID09IElIX01BR0lDKSB7CisJCQlwcmludGYoIiMjIEZsYXQgRGV2aWNlIFRyZWUgSW1hZ2UgYXQgJTA4bFhcbiIsIGhkcik7CisJCQlwcmludF9pbWFnZV9oZHIoaGRyKTsKKworCQkJaWYgKChudG9obChoZHItPmloX2xvYWQpIDwgICgodW5zaWduZWQgbG9uZyloZHIgKyBudG9obChoZHItPmloX3NpemUpICsgc2l6ZW9mKGhkcikpKSAmJgorCQkJICAgKChudG9obChoZHItPmloX2xvYWQpICsgbnRvaGwoaGRyLT5paF9zaXplKSkgPiAodW5zaWduZWQgbG9uZyloZHIpKSB7CisJCQkJcHJpbnRmICgiRVJST1I6IExvYWQgYWRkcmVzcyBvdmVyd3JpdGVzIEZsYXQgRGV2aWNlIFRyZWUgdUltYWdlXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCXByaW50ZigiICAgVmVyaWZ5aW5nIENoZWNrc3VtIC4uLiAiKTsKKwkJCW1lbW1vdmUgKCZoZWFkZXIsIChjaGFyICopaGRyLCBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKTsKKwkJCWNoZWNrc3VtID0gbnRvaGwoaGVhZGVyLmloX2hjcmMpOworCQkJaGVhZGVyLmloX2hjcmMgPSAwOworCisJCQlpZihjaGVja3N1bSAhPSBjcmMzMigwLCAodWNoYXIgKikmaGVhZGVyLCBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKSkgeworCQkJCXByaW50ZigiRVJST1I6IEZsYXQgRGV2aWNlIFRyZWUgaGVhZGVyIGNoZWNrc3VtIGlzIGludmFsaWRcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJY2hlY2tzdW0gPSBudG9obChoZHItPmloX2RjcmMpOworCQkJYWRkciA9ICh1bG9uZykoKHVjaGFyICopKGhkcikgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKTsKKwkJCWxlbiA9IG50b2hsKGhkci0+aWhfc2l6ZSk7CisKKwkJCWlmKGNoZWNrc3VtICE9IGNyYzMyKDAsICh1Y2hhciAqKWFkZHIsIGxlbikpIHsKKwkJCQlwcmludGYoIkVSUk9SOiBGbGF0IERldmljZSBUcmVlIGNoZWNrc3VtIGlzIGludmFsaWRcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCXByaW50ZigiT0tcbiIpOworCisJCQlpZiAobnRvaGwoaGRyLT5paF90eXBlKSAhPSBJSF9UWVBFX0ZMQVREVCkgeworCQkJCXByaW50ZiAoIkVSUk9SOiB1SW1hZ2Ugbm90IEZsYXQgRGV2aWNlIFRyZWUgdHlwZVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKG50b2hsKGhkci0+aWhfY29tcCkgIT0gSUhfQ09NUF9OT05FKSB7CisJCQkJcHJpbnRmKCJFUlJPUjogdUltYWdlIGlzIG5vdCB1bmNvbXByZXNzZWRcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmICgqKCh1bG9uZyAqKShvZl9mbGF0X3RyZWUgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKSkgIT0gT0ZfRFRfSEVBREVSKSB7CisJCQkJcHJpbnRmICgiRVJST1I6IHVJbWFnZSBkYXRhIGlzIG5vdCBhIGZsYXQgZGV2aWNlIHRyZWVcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJbWVtbW92ZSgodm9pZCAqKW50b2hsKGhkci0+aWhfbG9hZCksCisJCSAgICAgICAJCSh2b2lkICopKG9mX2ZsYXRfdHJlZSArIHNpemVvZihpbWFnZV9oZWFkZXJfdCkpLAorCQkJCW50b2hsKGhkci0+aWhfc2l6ZSkpOworCQkJb2ZfZmxhdF90cmVlID0gKGNoYXIgKiludG9obChoZHItPmloX2xvYWQpOworCQl9IGVsc2UgeworCQkJcHJpbnRmICgiRGlkIG5vdCBmaW5kIGEgZmxhdCBmbGF0IGRldmljZSB0cmVlIGF0IGFkZHJlc3MgJTA4bFhcbiIsIG9mX2ZsYXRfdHJlZSk7CisJCQlyZXR1cm47CisJCX0KKwkJcHJpbnRmICgiICAgQm9vdGluZyB1c2luZyBmbGF0IGRldmljZSB0cmVlIGF0IDB4JXhcbiIsCiAJCQkJb2ZfZmxhdF90cmVlKTsKKwl9IGVsc2UgaWYoZ2V0ZW52KCJkaXNhYmxlX29mIikgPT0gTlVMTCkgeworCQlwcmludGYgKCJFUlJPUjogYm9vdG0gbmVlZHMgZmxhdCBkZXZpY2UgdHJlZSBhcyB0aGlyZCBhcmd1bWVudFxuIik7CisJCXJldHVybjsKIAl9CiAjZW5kaWYKLQogCWlmICghZGF0YSkgewogCQlkZWJ1ZyAoIk5vIGluaXRyZFxuIik7CiAJfQpAQCAtMTI3Miw2ICsxMzM0LDcgQEAKIAljYXNlIElIX1RZUEVfTVVMVEk6CXR5cGUgPSAiTXVsdGktRmlsZSBJbWFnZSI7CWJyZWFrOwogCWNhc2UgSUhfVFlQRV9GSVJNV0FSRToJdHlwZSA9ICJGaXJtd2FyZSI7CQlicmVhazsKIAljYXNlIElIX1RZUEVfU0NSSVBUOgl0eXBlID0gIlNjcmlwdCI7CQlicmVhazsKKwljYXNlIElIX1RZUEVfRkxBVERUOgl0eXBlID0gIkZsYXQgRGV2aWNlIFRyZWUiOwlicmVhazsKIAlkZWZhdWx0OgkJdHlwZSA9ICJVbmtub3duIEltYWdlIjsJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9qZmZzMi5jIGIvY29tbW9uL2NtZF9qZmZzMi5jCmluZGV4IDIwMWMzYzEuLmI1ZmQ0MTcgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfamZmczIuYworKysgYi9jb21tb24vY21kX2pmZnMyLmMKQEAgLTEyNjgsNyArMTI2OCw3IEBACiAJCXBhcnRfbnVtID0gMDsKIAkJbGlzdF9mb3JfZWFjaChwZW50cnksICZkZXYtPnBhcnRzKSB7CiAJCQlwYXJ0ID0gbGlzdF9lbnRyeShwZW50cnksIHN0cnVjdCBwYXJ0X2luZm8sIGxpbmspOwotCQkJcHJpbnRmKCIgJWQ6ICUtMjJzXHQweCUwOHhcdDB4JTA4eFx0JWRcbiIsCisJCQlwcmludGYoIiUyZDogJS0yMHMweCUwOHhcdDB4JTA4eFx0JWRcbiIsCiAJCQkJCXBhcnRfbnVtLCBwYXJ0LT5uYW1lLCBwYXJ0LT5zaXplLAogCQkJCQlwYXJ0LT5vZmZzZXQsIHBhcnQtPm1hc2tfZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9jb21tb24vY21kX21hYy5jIGIvY29tbW9uL2NtZF9tYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWRkNDMyCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2NtZF9tYWMuYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKKyAqIFlvcmsgU3VuICh5b3Jrc3VuQGZyZWVzY2FsZS5jb20pCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKworI2lmZGVmIENGR19JRF9FRVBST00KKworZXh0ZXJuIGludCBkb19tYWMoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworCitVX0JPT1RfQ01EKAorCW1hYywgMywgMSwgIGRvX21hYywKKwkibWFjICAgICAtIGRpc3BsYXkgYW5kIHByb2dyYW0gdGhlIHN5c3RlbSBJRCBhbmQgTUFDIGFkZHJlc3NlcyBpbiBFRVBST01cbiIsCisJIltyZWFkfHNhdmV8aWR8bnVtfGVycmF0YXxkYXRlfHBvcnRzfDB8MXwyfDN8NHw1fDZ8N11cbiIKKwkicmVhZFxuIgorCSIgICAgLSBzaG93IGNvbnRlbnQgb2YgbWFjXG4iCisJIm1hYyBzYXZlXG4iCisJIiAgICAtIHNhdmUgdG8gdGhlIEVFUFJPTVxuIgorCSJtYWMgaWRcbiIKKwkiICAgIC0gcHJvZ3JhbSBzeXN0ZW0gaWRcbiIKKwkibWFjIG51bVxuIgorCSIgICAgLSBwcm9ncmFtIHN5c3RlbSBzZXJpYWwgbnVtYmVyXG4iCisJIm1hYyBlcnJhdGFcbiIKKwkiICAgIC0gcHJvZ3JhbSBlcnJhdGEgZGF0YVxuIgorCSJtYWMgZGF0ZVxuIgorCSIgICAgLSBwcm9ncmFtIGRhdGEgZGF0ZVxuIgorCSJtYWMgcG9ydHNcbiIKKwkiICAgIC0gcHJvZ3JhbSB0aGUgbnVtYmVyIG9mIHBvcnRzXG4iCisJIm1hYyAwXG4iCisJIiAgICAtIHByb2dyYW0gdGhlIE1BQyBhZGRyZXNzIGZvciBwb3J0IDBcbiIKKwkibWFjIDFcbiIKKwkiICAgIC0gcHJvZ3JhbSB0aGUgTUFDIGFkZHJlc3MgZm9yIHBvcnQgMVxuIgorCSJtYWMgMlxuIgorCSIgICAgLSBwcm9ncmFtIHRoZSBNQUMgYWRkcmVzcyBmb3IgcG9ydCAyXG4iCisJIm1hYyAzXG4iCisJIiAgICAtIHByb2dyYW0gdGhlIE1BQyBhZGRyZXNzIGZvciBwb3J0IDNcbiIKKwkibWFjIDRcbiIKKwkiICAgIC0gcHJvZ3JhbSB0aGUgTUFDIGFkZHJlc3MgZm9yIHBvcnQgNFxuIgorCSJtYWMgNVxuIgorCSIgICAgLSBwcm9ncmFtIHRoZSBNQUMgYWRkcmVzcyBmb3IgcG9ydCA1XG4iCisJIm1hYyA2XG4iCisJIiAgICAtIHByb2dyYW0gdGhlIE1BQyBhZGRyZXNzIGZvciBwb3J0IDZcbiIKKwkibWFjIDdcbiIKKwkiICAgIC0gcHJvZ3JhbSB0aGUgTUFDIGFkZHJlc3MgZm9yIHBvcnQgN1xuIgorKTsKKyNlbmRpZiAvKiBDRkdfSURfRUVQUk9NICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX21lbS5jIGIvY29tbW9uL2NtZF9tZW0uYwppbmRleCAwZjRmOWI3Li5kMGZhZTZiIDEwMDY0NAotLS0gYS9jb21tb24vY21kX21lbS5jCisrKyBiL2NvbW1vbi9jbWRfbWVtLmMKQEAgLTcwNyw3ICs3MDcsNyBAQAogI2lmIGRlZmluZWQoQ0ZHX01FTVRFU1RfU0NSQVRDSCkKIAl2dV9sb25nICpkdW1teSA9ICh2dV9sb25nKilDRkdfTUVNVEVTVF9TQ1JBVENIOwogI2Vsc2UKLQl2dV9sb25nICpkdW1teSA9IE5VTEw7CisJdnVfbG9uZyAqZHVtbXkgPSAwOwkvKiB5ZXMsIHRoaXMgaXMgYWRkcmVzcyAweDAsIG5vdCBOVUxMICovCiAjZW5kaWYKIAlpbnQJajsKIAlpbnQgaXRlcmF0aW9ucyA9IDE7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX21paS5jIGIvY29tbW9uL2NtZF9taWkuYwppbmRleCA0OGE0ZTc3Li5lNjU5NTM2IDEwMDY0NAotLS0gYS9jb21tb24vY21kX21paS5jCisrKyBiL2NvbW1vbi9jbWRfbWlpLmMKQEAgLTU3LDYgKzU3LDExIEBACiAJaW50CQlyY29kZSA9IDA7CiAJY2hhcgkJKmRldm5hbWU7CiAKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRmICgiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKKwkJcmV0dXJuIDE7CisJfQorCiAjaWYgZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR19NQ0Y1MngyKQogCW1paV9pbml0ICgpOwogI2VuZGlmCkBAIC0xMTIsOCArMTE3LDYgQEAKIAkJCQkJbWlpcGh5X3NwZWVkIChkZXZuYW1lLCBqKSwKIAkJCQkJKG1paXBoeV9kdXBsZXggKGRldm5hbWUsIGopID09IEZVTEwpCiAJCQkJCQk/ICJGRFgiIDogIkhEWCIpOwotCQkJfSBlbHNlIHsKLQkJCQlwdXRzICgiRXJyb3IgcmVhZGluZyBpbmZvIGZyb20gdGhlIFBIWVxuIik7CiAJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKG9wID09ICdyJykgewpAQCAtNDk4LDggKzUwMSw2IEBACiAJCQkJCW1paXBoeV9zcGVlZCAoZGV2bmFtZSwgaiksCiAJCQkJCShtaWlwaHlfZHVwbGV4IChkZXZuYW1lLCBqKSA9PSBGVUxMKQogCQkJCQkJPyAiRkRYIiA6ICJIRFgiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHV0cyAoIkVycm9yIHJlYWRpbmcgaW5mbyBmcm9tIHRoZSBQSFlcbiIpOwogCQkJfQogCQl9CiAJfSBlbHNlIGlmIChvcFswXSA9PSAncicpIHsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfcGNtY2lhLmMgYi9jb21tb24vY21kX3BjbWNpYS5jCmluZGV4IDhlM2U4NGIuLjJlYjViMjYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfcGNtY2lhLmMKKysrIGIvY29tbW9uL2NtZF9wY21jaWEuYwpAQCAtNTcsNzUgKzU3LDE0IEBACiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPHBjbWNpYS5oPgotI2lmIGRlZmluZWQoQ09ORklHXzh4eCkKLSNpbmNsdWRlIDxtcGM4eHguaD4KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0xXTU9OKQotI2luY2x1ZGUgPGkyYy5oPgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BYQV9QQ01DSUEKLSNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkgfHwgXAotICAgICgoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKSkKLQotaW50IHBjbWNpYV9vbiAodm9pZCk7Ci0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCi1zdGF0aWMgaW50ICBwY21jaWFfb2ZmICh2b2lkKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0k4MjM2NQotCi1leHRlcm4gaW50IGk4MjM2NV9pbml0ICh2b2lkKTsKLWV4dGVybiB2b2lkIGk4MjM2NV9leGl0ICh2b2lkKTsKLQotI2Vsc2UgLyogISBDT05GSUdfSTgyMzY1ICovCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCi1zdGF0aWMgaW50ICBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KTsKLSNlbmRpZgotc3RhdGljIGludCAgaGFyZHdhcmVfZW5hYmxlIChpbnQgc2xvdCk7Ci1zdGF0aWMgaW50ICB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCk7Ci0KLSNpZiAoISBkZWZpbmVkKENPTkZJR19JODIzNjUpKSAmJiAoISBkZWZpbmVkKENPTkZJR19QWEFfUENNQ0lBKSkKLXN0YXRpYyB1X2ludCBtOHh4X2dldF9ncmF5Y29kZSh1X2ludCBzaXplKTsKLSNlbmRpZgkvKiAhQ09ORklHX0k4MjM2NSwgIUNPTkZJR19QWEFfUENNQ0lBICovCi0jaWYgMAotc3RhdGljIHVfaW50IG04eHhfZ2V0X3NwZWVkKHVfaW50IG5zLCB1X2ludCBpc19pbyk7Ci0jZW5kaWYKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmbmRlZiBDT05GSUdfUFhBX1BDTUNJQQorI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKIAotLyogbG9vayB1cCB0YWJsZSBmb3IgcGdjcnggcmVnaXN0ZXJzICovCi0KLXN0YXRpYyB1X2ludCAqcGNtY2lhX3BnY3J4WzJdID0gewotCSYoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYS5wY21jX3BnY3JhLAotCSYoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYS5wY21jX3BnY3JiLAotfTsKLSNkZWZpbmUgUENNQ0lBX1BHQ1JYKHNsb3QpCSgqcGNtY2lhX3BnY3J4W3Nsb3RdKQotCi0jZW5kaWYJLyogQ09ORklHX1BYQV9QQ01DSUEgKi8KLQotI2VuZGlmIC8qIENPTkZJR19JODIzNjUgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKSAgfHwgZGVmaW5lZChDT05GSUdfUFhBX1BDTUNJQSkKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmNpZCAoaW50IGZ1bmMpOwotc3RhdGljIHZvaWQgcHJpbnRfZml4ZWQgICh2b2xhdGlsZSB1Y2hhciAqcCk7Ci1zdGF0aWMgaW50ICBpZGVudGlmeSAgICAgKHZvbGF0aWxlIHVjaGFyICpwKTsKLXN0YXRpYyBpbnQgIGNoZWNrX2lkZV9kZXZpY2UgKGludCBzbG90KTsKLSNlbmRpZgkvKiBDT05GSUdfSURFXzh4eF9QQ0NBUkQsIENPTkZJR19QWEFfUENNQ0lBICovCi0KLWNvbnN0IGNoYXIgKmluZGVudCA9ICJcdCAgICI7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCitleHRlcm4gaW50IHBjbWNpYV9vbiAodm9pZCk7CitleHRlcm4gaW50IHBjbWNpYV9vZmYgKHZvaWQpOwogCiBpbnQgZG9fcGluaXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewpAQCAtMTM2LDcgKzc1LDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCWlmIChzdHJjbXAoYXJndlsxXSwib24iKSA9PSAwKSB7Ci0JICAgICAJcmNvZGUgPSBwY21jaWFfb24gKCk7CisJCXJjb2RlID0gcGNtY2lhX29uICgpOwogCX0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sIm9mZiIpID09IDApIHsKIAkJcmNvZGUgPSBwY21jaWFfb2ZmICgpOwogCX0gZWxzZSB7CkBAIC0xNDYsMzIyICs4NSwxODggQEAKIAogCXJldHVybiByY29kZTsKIH0KLSNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLworCitVX0JPT1RfQ01EKAorCXBpbml0LAkyLAkxLAlkb19waW5pdCwKKwkicGluaXQgICAtIFBDTUNJQSBzdWItc3lzdGVtXG4iLAorCSJvbiAgLSBwb3dlciBvbiBQQ01DSUEgc29ja2V0XG4iCisJCQkicGluaXQgb2ZmIC0gcG93ZXIgb2ZmIFBDTUNJQSBzb2NrZXRcbiIKKwkgICk7CisKKyNlbmRpZgkvKiBDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWZkZWYgQ09ORklHX0k4MjM2NQotaW50IHBjbWNpYV9vbiAodm9pZCkKLXsKLQl1X2ludCByYzsKKyN1bmRlZglDSEVDS19JREVfREVWSUNFCiAKLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgIiBQQ01DSUFfU0xPVF9NU0cgIlxuIik7Ci0KLQlyYyA9IGk4MjM2NV9pbml0KCk7Ci0KLQlpZiAocmMgPT0gMCkgewotCQlyYyA9IGNoZWNrX2lkZV9kZXZpY2UoMCk7Ci0JfQotCi0JcmV0dXJuIChyYyk7Ci19Ci0jZWxzZQotCi0jaWZuZGVmIENPTkZJR19QWEFfUENNQ0lBCi0KLSNpZmRlZiBDT05GSUdfSE1JMTAKLSMgZGVmaW5lICBITUkxMF9GUkFNX1RJTUlORwkoUENNQ0lBX1NIVCgyKSB8IFBDTUNJQV9TU1QoMikgfCBQQ01DSUFfU0woNCkpCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19MV01PTikgfHwgZGVmaW5lZChDT05GSUdfTlNDVSkKLSMgZGVmaW5lICBDRkdfUENNQ0lBX1RJTUlORwkoUENNQ0lBX1NIVCg5KSB8IFBDTUNJQV9TU1QoMykgfCBQQ01DSUFfU0woMTIpKQotI2Vsc2UKLSMgZGVmaW5lICBDRkdfUENNQ0lBX1RJTUlORwkoUENNQ0lBX1NIVCgyKSB8IFBDTUNJQV9TU1QoNCkgfCBQQ01DSUFfU0woOSkpCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSURFKSAmJiBkZWZpbmVkKENPTkZJR19JREVfOHh4X1BDQ0FSRCkKKyNkZWZpbmUJQ0hFQ0tfSURFX0RFVklDRQogI2VuZGlmCiAKLWludCBwY21jaWFfb24gKHZvaWQpCi17Ci0JaW50IGk7Ci0JdV9sb25nIHJlZywgYmFzZTsKLQlwY21jaWFfd2luX3QgKndpbjsKLQl1X2ludCBzbG90Yml0OwotCXVfaW50IHJjLCBzbG90OwotCi0JZGVidWcgKCJFbmFibGUgUENNQ0lBICIgUENNQ0lBX1NMT1RfTVNHICJcbiIpOwotCi0JLyogaW50aWFsaXplIHRoZSBmaXhlZCBtZW1vcnkgd2luZG93cyAqLwotCXdpbiA9IChwY21jaWFfd2luX3QgKikoJigoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhLnBjbWNfcGJyMCk7Ci0JYmFzZSA9IENGR19QQ01DSUFfTUVNX0FERFI7Ci0KLQlpZigocmVnID0gbTh4eF9nZXRfZ3JheWNvZGUoQ0ZHX1BDTUNJQV9NRU1fU0laRSkpID09IC0xKSB7Ci0JCXByaW50ZiAoIkNhbm5vdCBzZXQgd2luZG93IHNpemUgdG8gMHglMDh4XG4iLAotCQkJQ0ZHX1BDTUNJQV9NRU1fU0laRSk7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0Jc2xvdGJpdCA9IFBDTUNJQV9TTE9UX3g7Ci0JZm9yIChpPTA7IGk8UENNQ0lBX01FTV9XSU5fTk87ICsraSkgewotCQl3aW4tPmJyID0gYmFzZTsKLQotI2lmIChQQ01DSUFfU09DS0VUU19OTyA9PSAyKQotCQlpZiAoaSA9PSA0KSAvKiBBbm90aGVyIHNsb3Qgc3RhcnRpbmcgZnJvbSB3aW4gNCAqLwotCQkJc2xvdGJpdCA9IChzbG90Yml0ID8gUENNQ0lBX1BTTE9UX0EgOiBQQ01DSUFfUFNMT1RfQik7Ci0jZW5kaWYKLQkJc3dpdGNoIChpKSB7Ci0jaWZkZWYgQ09ORklHX0lERV84eHhfUENDQVJECi0JCWNhc2UgNDoKLSNpZmRlZiBDT05GSUdfSE1JMTAKLQkJICAgIHsJLyogbWFwIEZSQU0gYXJlYSAqLwotCQkJd2luLT5vciA9ICgJUENNQ0lBX0JTSVpFXzI1NksKLQkJCQl8CVBDTUNJQV9QUFNfOAotCQkJCXwJUENNQ0lBX1BSU19BVFRSCi0JCQkJfAlzbG90Yml0Ci0JCQkJfAlQQ01DSUFfUFYKLQkJCQl8CUhNSTEwX0ZSQU1fVElNSU5HICk7Ci0JCQlicmVhazsKLQkJICAgIH0KLSNlbmRpZgotCQljYXNlIDA6CXsJLyogbWFwIGF0dHJpYnV0ZSBtZW1vcnkgKi8KLQkJCXdpbi0+b3IgPSAoCVBDTUNJQV9CU0laRV82NE0KLQkJCQl8CVBDTUNJQV9QUFNfOAotCQkJCXwJUENNQ0lBX1BSU19BVFRSCi0JCQkJfAlzbG90Yml0Ci0JCQkJfAlQQ01DSUFfUFYKLQkJCQl8CUNGR19QQ01DSUFfVElNSU5HICk7Ci0JCQlicmVhazsKLQkJICAgIH0KLQkJY2FzZSA1OgotCQljYXNlIDE6IHsJLyogbWFwIEkvTyB3aW5kb3cgZm9yIGRhdGEgcmVnICovCi0JCQl3aW4tPm9yID0gKAlQQ01DSUFfQlNJWkVfMUsKLQkJCQl8CVBDTUNJQV9QUFNfMTYKLQkJCQl8CVBDTUNJQV9QUlNfSU8KLQkJCQl8CXNsb3RiaXQKLQkJCQl8CVBDTUNJQV9QVgotCQkJCXwJQ0ZHX1BDTUNJQV9USU1JTkcgKTsKLQkJCWJyZWFrOwotCQkgICAgfQotCQljYXNlIDY6Ci0JCWNhc2UgMjogewkvKiBtYXAgSS9PIHdpbmRvdyBmb3IgY21kL2N0cmwgcmVnIGJsb2NrICovCi0JCQl3aW4tPm9yID0gKAlQQ01DSUFfQlNJWkVfMUsKLQkJCQl8CVBDTUNJQV9QUFNfOAotCQkJCXwJUENNQ0lBX1BSU19JTwotCQkJCXwJc2xvdGJpdAotCQkJCXwJUENNQ0lBX1BWCi0JCQkJfAlDRkdfUENNQ0lBX1RJTUlORyApOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0jZW5kaWYJLyogQ09ORklHX0lERV84eHhfUENDQVJEICovCi0jaWZkZWYgQ09ORklHX0hNSTEwCi0JCWNhc2UgMzogewkvKiBtYXAgSS9PIHdpbmRvdyBmb3IgNHhVQVJUIGRhdGEvY3RybCAqLwotCQkJd2luLT5iciArPSAweDQwMDAwOwotCQkJd2luLT5vciA9ICgJUENNQ0lBX0JTSVpFXzI1NksKLQkJCQl8CVBDTUNJQV9QUFNfOAotCQkJCXwJUENNQ0lBX1BSU19JTwotCQkJCXwJc2xvdGJpdAotCQkJCXwJUENNQ0lBX1BWCi0JCQkJfAlDRkdfUENNQ0lBX1RJTUlORyApOwotCQkJYnJlYWs7Ci0JCSAgICB9Ci0jZW5kaWYgLyogQ09ORklHX0hNSTEwICovCi0JCWRlZmF1bHQ6CS8qIHNldCB0byBub3QgdmFsaWQgKi8KLQkJCXdpbi0+b3IgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlkZWJ1ZyAoIk1lbVdpbiAlZDogUEJSIDB4JTA4bFggIFBPUiAlMDhsWFxuIiwKLQkJCWksIHdpbi0+YnIsIHdpbi0+b3IpOwotCQliYXNlICs9IENGR19QQ01DSUFfTUVNX1NJWkU7Ci0JCSsrd2luOwotCX0KLQotCWZvciAoaT0wLCByYz0wLCBzbG90PV9zbG90XzsgaTxQQ01DSUFfU09DS0VUU19OTzsgaSsrLCBzbG90ID0gIXNsb3QpIHsKLQkJLyogdHVybiBvZmYgdm9sdGFnZSAqLwotCQlpZiAoKHJjID0gdm9sdGFnZV9zZXQoc2xvdCwgMCwgMCkpKQotCQkJY29udGludWU7Ci0KLQkJLyogRW5hYmxlIGV4dGVybmFsIGhhcmR3YXJlICovCi0JCWlmICgocmMgPSBoYXJkd2FyZV9lbmFibGUoc2xvdCkpKQotCQkJY29udGludWU7Ci0KLSNpZmRlZiBDT05GSUdfSURFXzh4eF9QQ0NBUkQKLQkJaWYgKChyYyA9IGNoZWNrX2lkZV9kZXZpY2UoaSkpKQotCQkJY29udGludWU7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIChyYyk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfUFhBX1BDTUNJQSAqLwotCi0jZW5kaWYgLyogQ09ORklHX0k4MjM2NSAqLwotCi0jaWZkZWYgQ09ORklHX1BYQV9QQ01DSUEKLQotc3RhdGljIGludCBoYXJkd2FyZV9lbmFibGUgKGludCBzbG90KQotewotCXJldHVybiAwOwkvKiBObyBoYXJkd2FyZSB0byBlbmFibGUgKi8KLX0KLQotc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQotewotCXJldHVybiAwOwkvKiBObyBoYXJkd2FyZSB0byBkaXNhYmxlICovCi19Ci0KLXN0YXRpYyBpbnQgdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgbXNXYWl0KHVuc2lnbmVkIG1zVmFsKQotewotCXVkZWxheShtc1ZhbCoxMDAwKTsKLX0KLQotaW50IHBjbWNpYV9vbiAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnX2FycltdID0gewotCQkweDQ4MDAwMDI4LCBDRkdfTUNNRU0wX1ZBTCwKLQkJMHg0ODAwMDAyYywgQ0ZHX01DTUVNMV9WQUwsCi0JCTB4NDgwMDAwMzAsIENGR19NQ0FUVDBfVkFMLAotCQkweDQ4MDAwMDM0LCBDRkdfTUNBVFQxX1ZBTCwKLQkJMHg0ODAwMDAzOCwgQ0ZHX01DSU8wX1ZBTCwKLQkJMHg0ODAwMDAzYywgQ0ZHX01DSU8xX1ZBTCwKLQotCQkwLCAwCi0JfTsKLQlpbnQgaSwgcmM7Ci0KLSNpZmRlZiBDT05GSUdfRVhBRFJPTjEKLQlpbnQgY2FyZERldGVjdDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnZfcEJDUlJlZyA9Ci0JCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgMHgwODAwMDAwMDsKKyNpZglkZWZpbmVkKENPTkZJR19QWEFfUENNQ0lBKQorI2RlZmluZQlDSEVDS19JREVfREVWSUNFCiAjZW5kaWYKIAotCWRlYnVnICgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisjaWZkZWYJQ0hFQ0tfSURFX0RFVklDRQogCi0JaSA9IDA7Ci0Jd2hpbGUgKHJlZ19hcnJbaV0pCi0JCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSByZWdfYXJyW2krK10pIHw9IHJlZ19hcnJbaSsrXTsKLQl1ZGVsYXkgKDEwMDApOwotCi0JZGVidWcgKCIlczogcHJvZ3JhbW1lZCBtZW0gY29udHJvbGxlciBcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLSNpZmRlZiBDT05GSUdfRVhBRFJPTjEKLQotLypkZWZpbmUgdXNlZnVsIEJDUiBtYXNrcyAqLwotI2RlZmluZSBCQ1JfQ0ZfSU5JVF9WQUwgIAkJICAgIDB4MDAwMDcyMzAKLSNkZWZpbmUgQkNSX0NGX1BXUk9OX0JVU09GRl9SRVNFVE9GRl9WQUwgICAgMHgwMDAwNzIzMQotI2RlZmluZSBCQ1JfQ0ZfUFdST05fQlVTT0ZGX1JFU0VUT05fVkFMICAgICAweDAwMDA3MjMzCi0jZGVmaW5lIEJDUl9DRl9QV1JPTl9CVVNPTl9SRVNFVE9OX1ZBTCAgICAgIDB4MDAwMDcyMTMKLSNkZWZpbmUgQkNSX0NGX1BXUk9OX0JVU09OX1JFU0VUT0ZGX1ZBTCAgICAgMHgwMDAwNzIxMQotCi0JLyogd2Ugc2VlIGZyb20gdGhlIEdQSU8gYml0IGlmIHRoZSBjYXJkIGlzIHByZXNlbnQgKi8KLQljYXJkRGV0ZWN0ID0gIShHUExSMCAmIEdQSU9fYml0ICgxNCkpOwotCi0JaWYgKGNhcmREZXRlY3QpIHsKLQkJcHJpbnRmICgiTm8gUENNQ0lBIGNhcmQgZm91bmQhXG4iKTsKLQl9Ci0KLQkvKiByZXNldCB0aGUgY2FyZCB2aWEgdGhlIEJDUiBsaW5lICovCi0JKnZfcEJDUlJlZyA9ICh1bnNpZ25lZCkgQkNSX0NGX0lOSVRfVkFMOwotCW1zV2FpdCAoNTAwKTsKLQotCSp2X3BCQ1JSZWcgPSAodW5zaWduZWQpIEJDUl9DRl9QV1JPTl9CVVNPRkZfUkVTRVRPRkZfVkFMOwotCW1zV2FpdCAoNTAwKTsKLQotCSp2X3BCQ1JSZWcgPSAodW5zaWduZWQpIEJDUl9DRl9QV1JPTl9CVVNPRkZfUkVTRVRPTl9WQUw7Ci0JbXNXYWl0ICg1MDApOwotCi0JKnZfcEJDUlJlZyA9ICh1bnNpZ25lZCkgQkNSX0NGX1BXUk9OX0JVU09OX1JFU0VUT05fVkFMOwotCW1zV2FpdCAoNTAwKTsKLQotCSp2X3BCQ1JSZWcgPSAodW5zaWduZWQpIEJDUl9DRl9QV1JPTl9CVVNPTl9SRVNFVE9GRl9WQUw7Ci0JbXNXYWl0ICgxNTAwKTsKLQotCS8qIGVuYWJsZSBhZGRyZXNzIGJ1cyAqLwotCUdQQ1IxID0gMHgwMTsKLQkvKiBhbmQgdGhlIGZpcnN0IENGIHNsb3QgKi8KLQlNRUNSID0gMHgwMDAwMDAwMjsKLQotI2VuZGlmIC8qIEVYQURST04gMSAqLwotCi0JcmMgPSBjaGVja19pZGVfZGV2aWNlICgwKTsJLyogdXNlIGp1c3Qgc2xvdCAwICovCi0KLQlyZXR1cm4gcmM7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfUFhBX1BDTUNJQSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotCi0jaWZkZWYgQ09ORklHX0k4MjM2NQotc3RhdGljIGludCBwY21jaWFfb2ZmICh2b2lkKQotewotCXByaW50ZiAoIkRpc2FibGUgUENNQ0lBICIgUENNQ0lBX1NMT1RfTVNHICJcbiIpOwotCi0JaTgyMzY1X2V4aXQoKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLQotI2lmbmRlZiBDT05GSUdfUFhBX1BDTUNJQQotCi1zdGF0aWMgaW50IHBjbWNpYV9vZmYgKHZvaWQpCi17Ci0JaW50IGk7Ci0JcGNtY2lhX3dpbl90ICp3aW47Ci0KLQlwcmludGYgKCJEaXNhYmxlIFBDTUNJQSAiIFBDTUNJQV9TTE9UX01TRyAiXG4iKTsKLQotCS8qIGNsZWFyIGludGVycnVwdCBzdGF0ZSwgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCSgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhLnBjbWNfcHNjciA9ICBQQ01DSUFfTUFTSyhfc2xvdF8pOwotCSgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhLnBjbWNfcGVyICY9IH5QQ01DSUFfTUFTSyhfc2xvdF8pOwotCi0JLyogdHVybiBvZmYgaW50ZXJydXB0IGFuZCBkaXNhYmxlIEN4T0UgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsKLQotCS8qIHR1cm4gb2ZmIG1lbW9yeSB3aW5kb3dzICovCi0Jd2luID0gKHBjbWNpYV93aW5fdCAqKSgmKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEucGNtY19wYnIwKTsKLQotCWZvciAoaT0wOyBpPFBDTUNJQV9NRU1fV0lOX05POyArK2kpIHsKLQkJLyogZGlzYWJsZSBtZW1vcnkgd2luZG93ICovCi0JCXdpbi0+b3IgPSAwOwotCQkrK3dpbjsKLQl9Ci0KLQkvKiB0dXJuIG9mZiB2b2x0YWdlICovCi0Jdm9sdGFnZV9zZXQoX3Nsb3RfLCAwLCAwKTsKLQotCS8qIGRpc2FibGUgZXh0ZXJuYWwgaGFyZHdhcmUgKi8KLQlwcmludGYgKCJTaHV0ZG93biBhbmQgUG93ZXJvZmYgIiBQQ01DSUFfU0xPVF9NU0cgIlxuIik7Ci0JaGFyZHdhcmVfZGlzYWJsZShfc2xvdF8pOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BYQV9QQ01DSUEgKi8KLQotI2VuZGlmIC8qIENPTkZJR19JODIzNjUgKi8KLQotI2lmZGVmIENPTkZJR19QWEFfUENNQ0lBCi1zdGF0aWMgaW50IHBjbWNpYV9vZmYgKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotI2VuZGlmCS8qIENGR19DTURfUENNQ0lBICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19JREVfOHh4X1BDQ0FSRCkgfHwgZGVmaW5lZChDT05GSUdfUFhBX1BDTUNJQSkKK2ludAkJaWRlX2RldmljZXNfZm91bmQ7CitzdGF0aWMgdWNoYXIJKmtub3duX2NhcmRzW10gPSB7CisJKHVjaGFyICopIkFSR09TWSBQblBJREUgRDUiLAorCU5VTEwKK307CiAKICNkZWZpbmUJTUFYX1RVUEVMX1NaCTUxMgogI2RlZmluZSBNQVhfRkVBVFVSRVMJNAogCi1pbnQgaWRlX2RldmljZXNfZm91bmQ7Ci1zdGF0aWMgaW50IGNoZWNrX2lkZV9kZXZpY2UgKGludCBzbG90KQorI2RlZmluZSBNQVhfSURFTlRfQ0hBUlMJCTY0CisjZGVmaW5lCU1BWF9JREVOVF9GSUVMRFMJNAorCisjZGVmaW5lCWluZGVudAkiXHQgICAiCisKK3N0YXRpYyB2b2lkIHByaW50X2Z1bmNpZCAoaW50IGZ1bmMpCit7CisJcHV0cyAoaW5kZW50KTsKKwlzd2l0Y2ggKGZ1bmMpIHsKKwkJY2FzZSBDSVNUUExfRlVOQ0lEX01VTFRJOgorCQkJcHV0cyAoIiBNdWx0aS1GdW5jdGlvbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0lTVFBMX0ZVTkNJRF9NRU1PUlk6CisJCQlwdXRzICgiIE1lbW9yeSIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0lTVFBMX0ZVTkNJRF9TRVJJQUw6CisJCQlwdXRzICgiIFNlcmlhbCBQb3J0Iik7CisJCQlicmVhazsKKwkJY2FzZSBDSVNUUExfRlVOQ0lEX1BBUkFMTEVMOgorCQkJcHV0cyAoIiBQYXJhbGxlbCBQb3J0Iik7CisJCQlicmVhazsKKwkJY2FzZSBDSVNUUExfRlVOQ0lEX0ZJWEVEOgorCQkJcHV0cyAoIiBGaXhlZCBEaXNrIik7CisJCQlicmVhazsKKwkJY2FzZSBDSVNUUExfRlVOQ0lEX1ZJREVPOgorCQkJcHV0cyAoIiBWaWRlbyBBZGFwdGVyIik7CisJCQlicmVhazsKKwkJY2FzZSBDSVNUUExfRlVOQ0lEX05FVFdPUks6CisJCQlwdXRzICgiIE5ldHdvcmsgQWRhcHRlciIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0lTVFBMX0ZVTkNJRF9BSU1TOgorCQkJcHV0cyAoIiBBSU1TIENhcmQiKTsKKwkJCWJyZWFrOworCQljYXNlIENJU1RQTF9GVU5DSURfU0NTSToKKwkJCXB1dHMgKCIgU0NTSSBBZGFwdGVyIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXB1dHMgKCIgVW5rbm93biIpOworCQkJYnJlYWs7CisJfQorCXB1dHMgKCIgQ2FyZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2ZpeGVkICh2b2xhdGlsZSB1Y2hhciAqcCkKK3sKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlwdXRzKGluZGVudCk7CisKKwlzd2l0Y2ggKCpwKSB7CisJCWNhc2UgQ0lTVFBMX0ZVTkNFX0lERV9JRkFDRToKKwkJeyAgIHVjaGFyIGlmYWNlID0gKihwKzIpOworCisJCXB1dHMgKChpZmFjZSA9PSBDSVNUUExfSURFX0lOVEVSRkFDRSkgPyAiIElERSIgOiAiIHVua25vd24iKTsKKwkJcHV0cyAoIiBpbnRlcmZhY2UgIik7CisJCWJyZWFrOworCQl9CisJCWNhc2UgQ0lTVFBMX0ZVTkNFX0lERV9NQVNURVI6CisJCWNhc2UgQ0lTVFBMX0ZVTkNFX0lERV9TTEFWRToKKwkJeyAgIHVjaGFyIGYxID0gKihwKzIpOworCQl1Y2hhciBmMiA9ICoocCs0KTsKKworCQlwdXRzICgoZjEgJiBDSVNUUExfSURFX1NJTElDT04pID8gIiBbc2lsaWNvbl0iIDogIiBbcm90YXRpbmddIik7CisKKwkJaWYgKGYxICYgQ0lTVFBMX0lERV9VTklRVUUpCisJCQlwdXRzICgiIFt1bmlxdWVdIik7CisKKwkJcHV0cyAoKGYxICYgQ0lTVFBMX0lERV9EVUFMKSA/ICIgW2R1YWxdIiA6ICIgW3NpbmdsZV0iKTsKKworCQlpZiAoZjIgJiBDSVNUUExfSURFX0hBU19TTEVFUCkKKwkJCXB1dHMgKCIgW3NsZWVwXSIpOworCisJCWlmIChmMiAmIENJU1RQTF9JREVfSEFTX1NUQU5EQlkpCisJCQlwdXRzICgiIFtzdGFuZGJ5XSIpOworCisJCWlmIChmMiAmIENJU1RQTF9JREVfSEFTX0lETEUpCisJCQlwdXRzICgiIFtpZGxlXSIpOworCisJCWlmIChmMiAmIENJU1RQTF9JREVfTE9XX1BPV0VSKQorCQkJcHV0cyAoIiBbbG93IHBvd2VyXSIpOworCisJCWlmIChmMiAmIENJU1RQTF9JREVfUkVHX0lOSElCSVQpCisJCQlwdXRzICgiIFtyZWcgaW5oaWJpdF0iKTsKKworCQlpZiAoZjIgJiBDSVNUUExfSURFX0hBU19JTkRFWCkKKwkJCXB1dHMgKCIgW2luZGV4XSIpOworCisJCWlmIChmMiAmIENJU1RQTF9JREVfSU9JUzE2KQorCQkJcHV0cyAoIiBbSU9pczE2XSIpOworCisJCWJyZWFrOworCQl9CisJfQorCXB1dGMgKCdcbicpOworfQorCitzdGF0aWMgaW50IGlkZW50aWZ5ICAodm9sYXRpbGUgdWNoYXIgKnApCit7CisJdWNoYXIgaWRfc3RyW01BWF9JREVOVF9DSEFSU107CisJdWNoYXIgZGF0YTsKKwl1Y2hhciAqdDsKKwl1Y2hhciAqKmNhcmQ7CisJaW50IGksIGRvbmU7CisKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gKDApOwkvKiBEb24ndCBrbm93ICovCisKKwl0ID0gaWRfc3RyOworCWRvbmUgPTA7CisKKwlmb3IgKGk9MDsgaTw9NCAmJiAhZG9uZTsgKytpLCBwKz0yKSB7CisJCXdoaWxlICgoZGF0YSA9ICpwKSAhPSAnXDAnKSB7CisJCQlpZiAoZGF0YSA9PSAweEZGKSB7CisJCQkJZG9uZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQkqdCsrID0gZGF0YTsKKwkJCWlmICh0ID09ICZpZF9zdHJbTUFYX0lERU5UX0NIQVJTLTFdKSB7CisJCQkJZG9uZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlwICs9IDI7CisJCX0KKwkJaWYgKCFkb25lKQorCQkJKnQrKyA9ICcgJzsKKwl9CisJKnQgPSAnXDAnOworCXdoaWxlICgtLXQgPiBpZF9zdHIpIHsKKwkJaWYgKCp0ID09ICcgJykKKwkJCSp0ID0gJ1wwJzsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCXB1dHMgKChjaGFyICopaWRfc3RyKTsKKwlwdXRjICgnXG4nKTsKKworCWZvciAoY2FyZD1rbm93bl9jYXJkczsgKmNhcmQ7ICsrY2FyZCkgeworCQlkZWJ1ZyAoIiMjIENvbXBhcmUgYWdhaW5zdCBcIiVzXCJcbiIsICpjYXJkKTsKKwkJaWYgKHN0cmNtcCgoY2hhciAqKSpjYXJkLCAoY2hhciAqKWlkX3N0cikgPT0gMCkgewkvKiBmb3VuZCEgKi8KKwkJCWRlYnVnICgiIyMgQ0FSRCBGT1VORCAjI1xuIik7CisJCQlyZXR1cm4gKDEpOworCQl9CisJfQorCisJcmV0dXJuICgwKTsJLyogZG9uJ3Qga25vdyAqLworfQorCitpbnQgY2hlY2tfaWRlX2RldmljZSAoaW50IHNsb3QpCiB7CiAJdm9sYXRpbGUgdWNoYXIgKmlkZW50ID0gTlVMTDsKIAl2b2xhdGlsZSB1Y2hhciAqZmVhdHVyZV9wW01BWF9GRUFUVVJFU107CkBAIC01NTYsMjkzMyArMzYxLDUgQEAKICNlbmRpZgogCXJldHVybiAoMCk7CiB9Ci0jZW5kaWYJLyogQ09ORklHX0lERV84eHhfUENDQVJEICovCiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIGJvYXJkIHNwZWNpZmljIHN0dWZmOgkJCQkJCSovCi0vKiB2b2x0YWdlX3NldCgpLCBoYXJkd2FyZV9lbmFibGUoKSBhbmQgaGFyZHdhcmVfZGlzYWJsZSgpCQkqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIFJQWCBCb2FyZHMgZnJvbSBFbWJlZGRlZCBQbGFuZXQJCQkJCSovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUlBYQ0xBU1NJQykgfHwgZGVmaW5lZChDT05GSUdfUlBYTElURSkKLQotLyogVGhlIFJQWCBib2FyZHMgc2VlbXMgdG8gaGF2ZSBpdCdzIGJ1cyBtb25pdG9yIHRpbWVvdXQgc2V0IHRvIDYqOCBjbG9ja3MuCi0gKiBTWVBDUiBpcyB3cml0ZSBvbmNlIG9ubHksIHRoZXJlZm9yZSBtdXN0IHRoZSBzbG93ZXN0IG1lbW9yeSBiZSBmYXN0ZXIKLSAqIHRoYW4gdGhlIGJ1cyBtb25pdG9yIG9yIHdlIHdpbGwgZ2V0IGEgbWFjaGluZSBjaGVjayBkdWUgdG8gdGhlIGJ1cyB0aW1lb3V0LgotICovCi0KLSNkZWZpbmUgUENNQ0lBX0JPQVJEX01TRyAiUlBYIENMQVNTSUMgb3IgUlBYIExJVEUiCi0KLSN1bmRlZiBQQ01DSUFfQk1UX0xJTUlUCi0jZGVmaW5lIFBDTUNJQV9CTVRfTElNSVQgKDYqOCkKLQotc3RhdGljIGludCB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKLXsKLQl1X2xvbmcgcmVnID0gMDsKLQotCXN3aXRjaCh2Y2MpIHsKLQljYXNlIDA6IGJyZWFrOwotCWNhc2UgMzM6IHJlZyB8PSBCQ1NSMV9QQ1ZDVEw0OyBicmVhazsKLQljYXNlIDUwOiByZWcgfD0gQkNTUjFfUENWQ1RMNTsgYnJlYWs7Ci0JZGVmYXVsdDogcmV0dXJuIDE7Ci0JfQotCi0Jc3dpdGNoKHZwcCkgewotCWNhc2UgMDogYnJlYWs7Ci0JY2FzZSAzMzoKLQljYXNlIDUwOgotCQlpZih2Y2MgPT0gdnBwKQotCQkJcmVnIHw9IEJDU1IxX1BDVkNUTDY7Ci0JCWVsc2UKLQkJCXJldHVybiAxOwotCQlicmVhazsKLQljYXNlIDEyMDoKLQkJcmVnIHw9IEJDU1IxX1BDVkNUTDc7Ci0JZGVmYXVsdDogcmV0dXJuIDE7Ci0JfQotCi0JaWYodmNjID09IDEyMCkKLQkgICByZXR1cm4gMTsKLQotCS8qIGZpcnN0LCB0dXJuIG9mZiBhbGwgcG93ZXIgKi8KLQotCSooKHVpbnQgKilSUFhfQ1NSX0FERFIpICY9IH4oQkNTUjFfUENWQ1RMNCB8IEJDU1IxX1BDVkNUTDUKLQkJCQkgICAgIHwgQkNTUjFfUENWQ1RMNiB8IEJDU1IxX1BDVkNUTDcpOwotCi0JLyogZW5hYmxlIG5ldyBwb3dlcnNldHRpbmdzICovCi0KLQkqKCh1aW50ICopUlBYX0NTUl9BRERSKSB8PSByZWc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBzb2NrZXRfZ2V0KF9zbG90XykgUENNQ0lBX1NPQ0tFVF9LRVlfNVYKLXN0YXRpYyBpbnQgaGFyZHdhcmVfZW5hYmxlIChpbnQgc2xvdCkKLXsKLQlyZXR1cm4gMDsJLyogTm8gaGFyZHdhcmUgdG8gZW5hYmxlICovCi19Ci0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQotewotCXJldHVybiAwOwkvKiBObyBoYXJkd2FyZSB0byBkaXNhYmxlICovCi19Ci0jZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KLSNlbmRpZgkvKiBDT05GSUdfUlBYQ0xBU1NJQyAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogKEYpQURTIEJvYXJkcyBmcm9tIE1vdG9yb2xhCQkJCQkJKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BRFMpIHx8IGRlZmluZWQoQ09ORklHX0ZBRFMpCi0KLSNpZmRlZiBDT05GSUdfQURTCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIkFEUyIKLSNkZWZpbmUgUENNQ0lBX0dMSVRDSFlfQ0QgIC8qIE15IEFEUyBib2FyZCBuZWVkcyB0aGlzICovCi0jZWxzZQotI2RlZmluZSBQQ01DSUFfQk9BUkRfTVNHICJGQURTIgotI2VuZGlmCi0KLXN0YXRpYyBpbnQgdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCi17Ci0JdV9sb25nIHJlZyA9IDA7Ci0KLQlzd2l0Y2godnBwKSB7Ci0JY2FzZSAwOiByZWcgPSAwOyBicmVhazsKLQljYXNlIDUwOiByZWcgPSAxOyBicmVhazsKLQljYXNlIDEyMDogcmVnID0gMjsgYnJlYWs7Ci0JZGVmYXVsdDogcmV0dXJuIDE7Ci0JfQotCi0Jc3dpdGNoKHZjYykgewotCWNhc2UgMDogcmVnID0gMDsgYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0FEUwotCWNhc2UgNTA6IHJlZyA9IEJDU1IxX1BDQ1ZDQ09OOyBicmVhazsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19GQURTCi0JY2FzZSAzMzogcmVnID0gQkNTUjFfUENDVkNDMCB8IEJDU1IxX1BDQ1ZDQzE7IGJyZWFrOwotCWNhc2UgNTA6IHJlZyA9IEJDU1IxX1BDQ1ZDQzE7IGJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDogcmV0dXJuIDE7Ci0JfQotCi0JLyogZmlyc3QsIHR1cm4gb2ZmIGFsbCBwb3dlciAqLwotCi0jaWZkZWYgQ09ORklHX0FEUwotCSooKHVpbnQgKilCQ1NSMSkgfD0gQkNTUjFfUENDVkNDT047Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRkFEUwotCSooKHVpbnQgKilCQ1NSMSkgJj0gfihCQ1NSMV9QQ0NWQ0MwIHwgQkNTUjFfUENDVkNDMSk7Ci0jZW5kaWYKLQkqKCh1aW50ICopQkNTUjEpICY9IH5CQ1NSMV9QQ0NWUFBfTUFTSzsKLQotCS8qIGVuYWJsZSBuZXcgcG93ZXJzZXR0aW5ncyAqLwotCi0jaWZkZWYgQ09ORklHX0FEUwotCSooKHVpbnQgKilCQ1NSMSkgJj0gfnJlZzsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19GQURTCi0JKigodWludCAqKUJDU1IxKSB8PSByZWc7Ci0jZW5kaWYKLQotIAkqKCh1aW50ICopQkNTUjEpIHw9IHJlZyA8PCAyMDsKLQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIHNvY2tldF9nZXQoX3Nsb3RfKSBQQ01DSUFfU09DS0VUX0tFWV81VgotCi1zdGF0aWMgaW50IGhhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKLXsKLQkqKCh1aW50ICopQkNTUjEpICY9IH5CQ1NSMV9QQ0NFTjsKLQlyZXR1cm4gMDsKLX0KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKLXN0YXRpYyBpbnQgaGFyZHdhcmVfZGlzYWJsZShpbnQgc2xvdCkKLXsKLQkqKCh1aW50ICopQkNTUjEpICY9IH5CQ1NSMV9QQ0NFTjsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLwotCi0jZW5kaWYJLyogKEYpQURTICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBUUU04eHhMIEJvYXJkcyBieSBUUSBDb21wb25lbnRzCQkJCQkqLwotLyogU0M4eHggICBCb2FyZHMgYnkgU2lub1ZlZSBNaWNyb3N5c3RlbXMJCQkJKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiAoZGVmaW5lZChDT05GSUdfVFFNOHh4TCkgfHwgZGVmaW5lZChDT05GSUdfU1ZNX1NDOHh4KSkgXAotCSYmICFkZWZpbmVkKENPTkZJR19WSVJUTEFCMikKLQotI2lmIGRlZmluZWQoQ09ORklHX1RRTTh4eEwpCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIlRRTTh4eEwiCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TVk1fU0M4eHgpCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIlNDOHh4IgotI2VuZGlmCi0KLXN0YXRpYyBpbnQgaGFyZHdhcmVfZW5hYmxlKGludCBzbG90KQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0Jdm9sYXRpbGUgc3lzY29uZjh4eF90CSpzeXNwOwotCXVpbnQgcmVnLCBtYXNrOwotCi0JZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKLQotCXVkZWxheSgxMDAwMCk7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jc3lzcCAgPSAoc3lzY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9zaXVfY29uZikpOwotCXBjbXAgID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0JY3AgICAgPSAoY3BtOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX2NwbSkpOwotCi0JLyoKLQkgKiBDb25maWd1cmUgU0lVTUNSIHRvIGVuYWJsZSBQQ01DSUEgcG9ydCBCCi0JICogKFZGTFNbMDoxXSBhcmUgbm90IHVzZWQgZm9yIGRlYnVnZ2luZywgd2UgY29ubmVjdCBGUlojIGluc3RlYWQpCi0JICovCi0Jc3lzcC0+c2Nfc2l1bWNyICY9IH5TSVVNQ1JfREJHQzExOwkvKiBzZXQgREJHQyB0byAwMCAqLwotCi0JLyogY2xlYXIgaW50ZXJydXB0IHN0YXRlLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JcGNtcC0+cGNtY19wc2NyID0gIFBDTUNJQV9NQVNLKHNsb3QpOwotCXBjbXAtPnBjbWNfcGVyICY9IH5QQ01DSUFfTUFTSyhzbG90KTsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzLCBETUEsIGFuZCBQQ01DSUEgYnVmZmVycwotCSAqIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCi0JICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0jaWZuZGVmIE5TQ1VfT0VfSU5WCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0jZW5kaWYKLQlQQ01DSUFfUEdDUlgoc2xvdCkgPSByZWc7Ci0JdWRlbGF5KDUwMCk7Ci0KLSNpZm5kZWYgQ09ORklHX0hNSTEwCi0jaWZuZGVmIENPTkZJR19OU0NVCi0JLyoKLQkgKiBDb25maWd1cmUgUG9ydCBDIHBpbnMgZm9yCi0JICogNSBWb2x0cyBFbmFibGUgYW5kIDMgVm9sdHMgZW5hYmxlCi0JICovCi0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNwYXIgJj0gfigweDAwMDIgfCAweDAwMDQpOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3Bjc28gICY9IH4oMHgwMDAyIHwgMHgwMDA0KTsKLQkvKiByZW1vdmUgYWxsIHBvd2VyICovCi0KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCAmPSB+KDB4MDAwMiB8IDB4MDAwNCk7Ci0jZW5kaWYKLSNlbHNlCS8qIENPTkZJR19ITUkxMCAqLwotCS8qCi0JICogQ29uZmlndXJlIFBvcnQgQiAgcGlucyBmb3IKLQkgKiA1IFZvbHRzIEVuYWJsZSBhbmQgMyBWb2x0cyBlbmFibGUKLQkgKi8KLQlpbW1hcC0+aW1fY3BtLmNwX3BicGFyICY9IH4oMHgwMDAwMDMwMCk7Ci0KLQkvKiByZW1vdmUgYWxsIHBvd2VyICovCi0JaW1tYXAtPmltX2NwbS5jcF9wYmRhdCB8PSAweDAwMDAwMzAwOwotI2VuZGlmCS8qIENPTkZJR19ITUkxMCAqLwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBjYXJkIGluIHRoZSBzbG90LCB0aGVuIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlLgotCSAqLwotCXVkZWxheSgxMDAwMCk7Ci0JZGVidWcgKCJbJWRdICVzOiBQSVBSKCVwKT0weCV4XG4iLAotCQlfX0xJTkVfXyxfX0ZVTkNUSU9OX18sCi0JCSYocGNtcC0+cGNtY19waXByKSxwY21wLT5wY21jX3BpcHIpOwotI2lmbmRlZiBDT05GSUdfSE1JMTAKLQlpZiAocGNtcC0+cGNtY19waXByICYgKDB4MTgwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKSB7Ci0jZWxzZQotCWlmIChwY21wLT5wY21jX3BpcHIgJiAoMHgxMDAwMDAwMCA+PiAoc2xvdCA8PCA0KSkpIHsKLSNlbmRpZgkvKiBDT05GSUdfSE1JMTAgKi8KLQkJcHJpbnRmICgiICAgTm8gQ2FyZCBmb3VuZFxuIik7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0JLyoKLQkgKiBQb3dlciBPbi4KLQkgKi8KLQltYXNrID0gUENNQ0lBX1ZTMShzbG90KSB8IFBDTUNJQV9WUzIoc2xvdCk7Ci0JcmVnICA9IHBjbXAtPnBjbWNfcGlwcjsKLQlkZWJ1ZyAoIlBJUFI6IDB4JXggPT0+IFZTMT1vJXMsIFZTMj1vJXNcbiIsCi0JCXJlZywKLQkJKHJlZyZQQ01DSUFfVlMxKHNsb3QpKT8ibiI6ImZmIiwKLQkJKHJlZyZQQ01DSUFfVlMyKHNsb3QpKT8ibiI6ImZmIik7Ci0jaWZuZGVmIENPTkZJR19OU0NVCi0JaWYgKChyZWcgJiBtYXNrKSA9PSBtYXNrKSB7Ci0jaWZuZGVmIENPTkZJR19ITUkxMAotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCB8PSAweDAwMDQ7Ci0jZWxzZQotCQlpbW1hcC0+aW1fY3BtLmNwX3BiZGF0ICY9IH4oMHgwMDAwMTAwKTsKLSNlbmRpZgkvKiBDT05GSUdfSE1JMTAgKi8KLQkJcHV0cyAoIiA1LjBWIGNhcmQgZm91bmQ6ICIpOwotCX0gZWxzZSB7Ci0jaWZuZGVmIENPTkZJR19ITUkxMAotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCB8PSAweDAwMDI7Ci0jZWxzZQotCQlpbW1hcC0+aW1fY3BtLmNwX3BiZGF0ICY9IH4oMHgwMDAwMjAwKTsKLSNlbmRpZgkvKiBDT05GSUdfSE1JMTAgKi8KLQkJcHV0cyAoIiAzLjNWIGNhcmQgZm91bmQ6ICIpOwotCX0KLSNpZm5kZWYgQ09ORklHX0hNSTEwCi0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIgfD0gKDB4MDAwMiB8IDB4MDAwNCk7Ci0jZWxzZQotCWltbWFwLT5pbV9jcG0uY3BfcGJkaXIgfD0gMHgwMDAwMDMwMDsKLSNlbmRpZgkvKiBDT05GSUdfSE1JMTAgKi8KLSNlbHNlCi0JaWYgKChyZWcgJiBtYXNrKSA9PSBtYXNrKSB7Ci0JCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiAiKTsKLQl9IGVsc2UgewotCQlwdXRzICgiIDMuM1YgY2FyZCBmb3VuZDogIik7Ci0JfQotI2VuZGlmCi0jaWYgMAotCS8qICBWQ0Mgc3dpdGNoIGVycm9yIGZsYWcsIFBDTUNJQSBzbG90IElOUEFDS18gcGluICovCi0JY3AtPmNwX3BiZGlyICY9IH4oMHgwMDIwIHwgMHgwMDEwKTsKLQljcC0+Y3BfcGJwYXIgJj0gfigweDAwMjAgfCAweDAwMTApOwotCXVkZWxheSg1MDAwMDApOwotI2VuZGlmCi0JdWRlbGF5KDEwMDApOwotCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKLQlyZWcgID0gIFBDTUNJQV9QR0NSWChzbG90KTsKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLSNpZm5kZWYgTlNDVV9PRV9JTlYKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0jZWxzZQotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotI2VuZGlmCi0JUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOwotCi0JdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCi0KLQlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOwotCi0JcmV0dXJuICgwKTsKLX0KLQotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKLQl1X2xvbmcgcmVnOwotCi0JZGVidWcgKCJoYXJkd2FyZV9kaXNhYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JcGNtcCA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCi0jaWZuZGVmIENPTkZJR19ITUkxMAotI2lmbmRlZiBDT05GSUdfTlNDVQotCS8qIHJlbW92ZSBhbGwgcG93ZXIgKi8KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCAmPSB+KDB4MDAwMiB8IDB4MDAwNCk7Ci0jZW5kaWYKLSNlbHNlCS8qIENPTkZJR19ITUkxMCAqLwotCWltbWFwLT5pbV9jcG0uY3BfcGJkYXQgfD0gMHgwMDAwMDMwMDsKLSNlbmRpZgkvKiBDT05GSUdfSE1JMTAgKi8KLQotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gMDsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotI2lmbmRlZiBOU0NVX09FX0lOVgotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotI2VuZGlmCi0JUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOwotCi0JdWRlbGF5KDEwMDAwKTsKLQotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KLQotI2lmZGVmIENPTkZJR19OU0NVCi1zdGF0aWMgaW50IHZvbHRhZ2Vfc2V0KGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQotewotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXVfbG9uZyByZWc7Ci0KLQlkZWJ1ZyAoInZvbHRhZ2Vfc2V0OiAiCi0JCVBDTUNJQV9CT0FSRF9NU0cKLQkJIiBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKLQkJJ0EnK3Nsb3QsIHZjYy8xMCwgdmNjJTEwLCB2cHAvMTAsIHZjYyUxMCk7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JcGNtcCA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCS8qCi0JICogRGlzYWJsZSBQQ01DSUEgYnVmZmVycyAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKQotCSAqIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCi0JICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSBQQ01DSUFfUEdDUlgoc2xvdCk7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLSNpZm5kZWYgTlNDVV9PRV9JTlYKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLSNlbHNlCi0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotI2VuZGlmCi0JUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOwotCXVkZWxheSg1MDApOwotCi0jaWZuZGVmIENPTkZJR19ITUkxMAotCS8qCi0JICogQ29uZmlndXJlIFBvcnQgQyBwaW5zIGZvcgotCSAqIDUgVm9sdHMgRW5hYmxlIGFuZCAzIFZvbHRzIGVuYWJsZSwKLQkgKiBUdXJuIG9mZiBhbGwgcG93ZXIKLQkgKi8KLQlkZWJ1ZyAoIlBDTUNJQSBwb3dlciBPRkZcbiIpOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjcGFyICY9IH4oMHgwMDAyIHwgMHgwMDA0KTsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3NvICAmPSB+KDB4MDAwMiB8IDB4MDAwNCk7Ci0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgJj0gfigweDAwMDIgfCAweDAwMDQpOwotCi0JcmVnID0gMDsKLQlzd2l0Y2godmNjKSB7Ci0JY2FzZSAgMDogCQlicmVhazsKLQljYXNlIDMzOiByZWcgfD0gMHgwMDAyOwlicmVhazsKLQljYXNlIDUwOiByZWcgfD0gMHgwMDA0OwlicmVhazsKLQlkZWZhdWx0OiAJCWdvdG8gZG9uZTsKLQl9Ci0jZWxzZQkvKiBDT05GSUdfSE1JMTAgKi8KLQkvKgotCSAqIENvbmZpZ3VyZSBQb3J0IEIgcGlucyBmb3IKLQkgKiA1IFZvbHRzIEVuYWJsZSBhbmQgMyBWb2x0cyBlbmFibGUsCi0JICogVHVybiBvZmYgYWxsIHBvd2VyCi0JICovCi0JZGVidWcgKCJQQ01DSUEgcG93ZXIgT0ZGXG4iKTsKLQlpbW1hcC0+aW1fY3BtLmNwX3BicGFyICY9IH4oMHgwMDAwMDMwMCk7Ci0JLyogcmVtb3ZlIGFsbCBwb3dlciAqLwotCi0JaW1tYXAtPmltX2NwbS5jcF9wYmRhdCB8PSAweDAwMDAwMzAwOwotCi0JcmVnID0gMDsKLQlzd2l0Y2godmNjKSB7Ci0JCWNhc2UgIDA6CQkJYnJlYWs7Ci0JCWNhc2UgMzM6IHJlZyB8PSAweDAwMDAwMjAwOwlicmVhazsKLQkJY2FzZSA1MDogcmVnIHw9IDB4MDAwMDAxMDA7CWJyZWFrOwotCQlkZWZhdWx0OgkJCWdvdG8gZG9uZTsKLX0KLSNlbmRpZgkvKiBDT05GSUdfSE1JMTAgKi8KLQotCS8qIENoZWNraW5nIHN1cHBvcnRlZCB2b2x0YWdlcyAqLwotCi0JZGVidWcgKCJQSVBSOiAweCV4IC0tPiAlc1xuIiwKLQkJcGNtcC0+cGNtY19waXByLAotCQkocGNtcC0+cGNtY19waXByICYgMHgwMDAwODAwMCkgPyAib25seSA1IFYiIDogImNhbiBkbyAzLjNWIik7Ci0KLSNpZm5kZWYgQ09ORklHX0hNSTEwCi0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgfD0gcmVnOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGlyIHw9ICgweDAwMDIgfCAweDAwMDQpOwotI2Vsc2UKLQlpbW1hcC0+aW1fY3BtLmNwX3BiZGF0ICY9ICFyZWc7Ci0JaW1tYXAtPmltX2NwbS5jcF9wYmRpciB8PSAweDAwMDAwMzAwOwotI2VuZGlmCS8qIENPTkZJR19ITUkxMCAqLwotCWlmIChyZWcpIHsKLSNpZm5kZWYgQ09ORklHX0hNSTEwCi0JCWRlYnVnICgiUENNQ0lBIHBvd2VyZWQgYXQgJXNWXG4iLAotCQkJKHJlZyYweDAwMDQpID8gIjUuMCIgOiAiMy4zIik7Ci0jZWxzZQotCQlkZWJ1ZyAoIlBDTUNJQSBwb3dlcmVkIGF0ICVzVlxuIiwKLQkJCShyZWcmMHgwMDAwMDIwMCkgPyAiNS4wIiA6ICIzLjMiKTsKLSNlbmRpZgkvKiBDT05GSUdfSE1JMTAgKi8KLQl9IGVsc2UgewotCQlkZWJ1ZyAoIlBDTUNJQSBwb3dlcmVkIGRvd25cbiIpOwotCX0KLQotZG9uZToKLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnICA9ICBQQ01DSUFfUEdDUlgoc2xvdCk7Ci0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0jaWZuZGVmIE5TQ1VfT0VfSU5WCi0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotI2Vsc2UKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLSNlbmRpZgotCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWMsIERPTkVcbiIsCi0JCXNsb3QrJ0EnKTsKLQlyZXR1cm4gKDApOwotfQotI2VuZGlmCi0KLSNlbmRpZgkvKiBUUU04eHhMICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBWaXJ0bGFiMiBCb2FyZCBieSBUUSBDb21wb25lbnRzCQkJCQkqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1ZJUlRMQUIyKQotI2RlZmluZSBQQ01DSUFfQk9BUkRfTVNHICJWaXJ0bGFiMiIKLQotc3RhdGljIGludCBoYXJkd2FyZV9lbmFibGUoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wID0KLQkJKHBjbWNvbmY4eHhfdCAqKSYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpOwotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKnBvd2VyY3RsID0KLQkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ01DSUFfQ1RSTDsKLQl2b2xhdGlsZSBzeXNjb25mOHh4X3QJKnN5c3AgPQotCQkoc3lzY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9zaXVfY29uZikpOwotCXVuc2lnbmVkIGludAkJcmVnLCBtYXNrOwotCi0JZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKLQotCXVkZWxheSgxMDAwMCk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBTSVVNQ1IgdG8gZW5hYmxlIFBDTUNJQSBwb3J0IEIKLQkgKi8KLQlzeXNwLT5zY19zaXVtY3IgJj0gflNJVU1DUl9EQkdDMTE7CS8qIHNldCBEQkdDIHRvIDAwICovCi0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soc2xvdCk7Ci0JcGNtcC0+cGNtY19wZXIgJj0gflBDTUNJQV9NQVNLKHNsb3QpOwotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMsIERNQSwgYW5kIFBDTUNJQSBidWZmZXJzCi0JICogKGlzb2xhdGUgdGhlIGludGVyZmFjZSkgYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKLQkgKi8KLQlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7Ci0JcmVnID0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQotCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCS8qIHJlbW92ZSBhbGwgcG93ZXIgKi8KLQkqcG93ZXJjdGwgPSAwOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBjYXJkIGluIHRoZSBzbG90LCB0aGVuIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlLgotCSAqLwotCXVkZWxheSgxMDAwMCk7Ci0JZGVidWcgKCJbJWRdICVzOiBQSVBSKCVwKT0weCV4XG4iLCBfX0xJTkVfXyxfX0ZVTkNUSU9OX18sCi0JCSYocGNtcC0+cGNtY19waXByKSxwY21wLT5wY21jX3BpcHIpOwotCi0JaWYgKHBjbXAtPnBjbWNfcGlwciAmICgweDE4MDAwMDAwID4+IChzbG90IDw8IDQpKSkgewotCQlwcmludGYgKCIgICBObyBDYXJkIGZvdW5kXG4iKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQkvKgotCSAqIFBvd2VyIE9uLgotCSAqLwotCW1hc2sgPSBQQ01DSUFfVlMxKHNsb3QpIHwgUENNQ0lBX1ZTMihzbG90KTsKLQlyZWcgID0gcGNtcC0+cGNtY19waXByOwotCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwgcmVnLAotCQkocmVnJlBDTUNJQV9WUzEoc2xvdCkpPyJuIjoiZmYiLAotCQkocmVnJlBDTUNJQV9WUzIoc2xvdCkpPyJuIjoiZmYiKTsKLQotCWlmICgocmVnICYgbWFzaykgPT0gbWFzaykgewotCQkqcG93ZXJjdGwgPSAyOwkvKiBFbmFibGUgNVYgVmNjb3V0ICovCi0JCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiAiKTsKLQl9IGVsc2UgewotCQkqcG93ZXJjdGwgPSAxOwkvKiBFbmFibGUgMy4zIFYgVmNjb3V0ICovCi0JCXB1dHMgKCIgMy4zViBjYXJkIGZvdW5kOiAiKTsKLQl9Ci0KLQl1ZGVsYXkoMTAwMCk7Ci0JZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOwotCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKHNsb3QpOwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQotCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKLQotCXVkZWxheSgyNTAwMDApOwkvKiBzb21lIGNhcmRzIG5lZWQgPjE1MCBtcyB0byBjb21lIHVwIDotKCAqLwotCi0JZGVidWcgKCIjIGhhcmR3YXJlX2VuYWJsZSBkb25lXG4iKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCi1zdGF0aWMgaW50IGhhcmR3YXJlX2Rpc2FibGUoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqcG93ZXJjdGwgPQotCQkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBDTUNJQV9DVFJMOwotCXVuc2lnbmVkIGxvbmcJCSByZWc7Ci0KLQlkZWJ1ZyAoImhhcmR3YXJlX2Rpc2FibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKLQotCS8qIHJlbW92ZSBhbGwgcG93ZXIgKi8KLQkqcG93ZXJjdGwgPSAwOwotCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyA9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJCS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0KLQlQQ01DSUFfUEdDUlgoc2xvdCkgPSByZWc7Ci0KLQl1ZGVsYXkoMTAwMDApOwotCi0JcmV0dXJuICgwKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IHZvbHRhZ2Vfc2V0KGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQotewotI2lmZGVmIERFQlVHCi0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wID0KLQkJKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0jZW5kaWYKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpwb3dlcmN0bCA9Ci0JCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUENNQ0lBX0NUUkw7Ci0JdW5zaWduZWQgbG9uZwkJcmVnOwotCi0JZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHCi0JCSIgU2xvdCAlYywgVmNjPSVkLiVkLCBWcHA9JWQuJWRcbiIsCi0JCSdBJytzbG90LCB2Y2MvMTAsIHZjYyUxMCwgdnBwLzEwLCB2Y2MlMTApOwotCi0JLyoKLQkgKiBEaXNhYmxlIFBDTUNJQSBidWZmZXJzIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpCi0JICogYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKLQkgKi8KLQlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7Ci0JcmVnICA9IFBDTUNJQV9QR0NSWChzbG90KTsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCi0JUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOwotCXVkZWxheSg1MDApOwotCi0JLyoKLQkgKiBDb25maWd1cmUgcGlucyBmb3IgNSBWb2x0cyBFbmFibGUgYW5kIDMgVm9sdHMgZW5hYmxlLAotCSAqIFR1cm4gb2ZmIGFsbCBwb3dlci4KLQkgKi8KLQlkZWJ1ZyAoIlBDTUNJQSBwb3dlciBPRkZcbiIpOwotCXJlZyA9IDA7Ci0Jc3dpdGNoKHZjYykgewotCWNhc2UgIDA6IAkJYnJlYWs7Ci0JY2FzZSAzMzogcmVnID0gMHgwMDAxOwlicmVhazsKLQljYXNlIDUwOiByZWcgPSAweDAwMDI7CWJyZWFrOwotCWRlZmF1bHQ6IAkJZ290byBkb25lOwotCX0KLQotCS8qIENoZWNraW5nIHN1cHBvcnRlZCB2b2x0YWdlcyAqLwotCi0JZGVidWcgKCJQSVBSOiAweCV4IC0tPiAlc1xuIiwgcGNtcC0+cGNtY19waXByLAotCQkocGNtcC0+cGNtY19waXByICYgMHgwMDAwODAwMCkgPyAib25seSA1IFYiIDogImNhbiBkbyAzLjNWIik7Ci0KLQkqcG93ZXJjdGwgPSByZWc7Ci0KLQlpZiAocmVnKSB7Ci0JCWRlYnVnICgiUENNQ0lBIHBvd2VyZWQgYXQgJXNWXG4iLCAocmVnJjB4MDAwNCkgPyAiNS4wIiA6ICIzLjMiKTsKLQl9IGVsc2UgewotCQlkZWJ1ZyAoIlBDTUNJQSBwb3dlcmVkIGRvd25cbiIpOwotCX0KLQotZG9uZToKLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnICA9ICBQQ01DSUFfUEdDUlgoc2xvdCk7Ci0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCi0JUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOwotCXVkZWxheSg1MDApOwotCi0JZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlYywgRE9ORVxuIiwgc2xvdCsnQScpOwotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYJLyogQ09ORklHX1ZJUlRMQUIyICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBMV01PTiBCb2FyZAkJCQkJCQkJKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19MV01PTikKLQotI2RlZmluZSBQQ01DSUFfQk9BUkRfTVNHICJMV01PTiIKLQotLyogI2RlZmluZSdzIGZvciBNQVgxNjA0IFBvd2VyIFN3aXRjaCAqLwotI2RlZmluZSBNQVgxNjA0X09QX1NVUwkJMHg4MAotI2RlZmluZSBNQVgxNjA0X1ZDQ0JPTgkJMHg0MAotI2RlZmluZSBNQVgxNjA0X1ZDQ18zNQkJMHgyMAotI2RlZmluZSBNQVgxNjA0X1ZDQ0JISVoJCTB4MTAKLSNkZWZpbmUgTUFYMTYwNF9WUFBCT04JCTB4MDgKLSNkZWZpbmUgTUFYMTYwNF9WUFBCUEJQR00JMHgwNAotI2RlZmluZSBNQVgxNjA0X1ZQUEJISVoJCTB4MDIKLS8qIHJlc2VydmVkCQkJMHgwMQkqLwotCi1zdGF0aWMgaW50IGhhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKLQl2b2xhdGlsZSBjcG04eHhfdAkqY3A7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXZvbGF0aWxlIHN5c2NvbmY4eHhfdAkqc3lzcDsKLQl1aW50IHJlZywgbWFzazsKLQl1Y2hhciB2YWw7Ci0KLQotCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7Ci0KLQkvKiBTd2l0Y2ggb24gUENNQ0lBIHBvcnQgaW4gUElDIHJlZ2lzdGVyIDB4NjAgKi8KLQlyZWcgPSBwaWNfcmVhZCAgKDB4NjApOwotCWRlYnVnICgiWyVkXSBQSUMgcmVhZDogcmVnXzYwID0gMHglMDJ4XG4iLCBfX0xJTkVfXywgcmVnKTsKLQlyZWcgJj0gfjB4MTA7Ci0JLyogcmVnIHw9IDB4MDg7IFZwcCBub3QgbmVlZGVkICovCi0JcGljX3dyaXRlICgweDYwLCByZWcpOwotI2lmZGVmIERFQlVHCi0JcmVnID0gcGljX3JlYWQgICgweDYwKTsKLQlwcmludGYgKCJbJWRdIFBJQyByZWFkOiByZWdfNjAgPSAweCUwMnhcbiIsIF9fTElORV9fLCByZWcpOwotI2VuZGlmCi0JdWRlbGF5KDEwMDAwKTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQlzeXNwICA9IChzeXNjb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3NpdV9jb25mKSk7Ci0JcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBTSVVNQ1IgdG8gZW5hYmxlIFBDTUNJQSBwb3J0IEIKLQkgKiAoVkZMU1swOjFdIGFyZSBub3QgdXNlZCBmb3IgZGVidWdnaW5nLCB3ZSBjb25uZWN0IEZSWiMgaW5zdGVhZCkKLQkgKi8KLQlzeXNwLT5zY19zaXVtY3IgJj0gflNJVU1DUl9EQkdDMTE7CS8qIHNldCBEQkdDIHRvIDAwICovCi0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soX3Nsb3RfKTsKLQlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0soX3Nsb3RfKTsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzLCBETUEsIGFuZCBQQ01DSUEgYnVmZmVycwotCSAqIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCi0JICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0JdWRlbGF5KDUwMCk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGNhcmQgaW4gdGhlIHNsb3QsIHRoZW4gY29uZmlndXJlIHRoZSBpbnRlcmZhY2UuCi0JICovCi0JdWRlbGF5KDEwMDAwKTsKLQlkZWJ1ZyAoIlslZF0gJXM6IFBJUFIoJXApPTB4JXhcbiIsCi0JCV9fTElORV9fLF9fRlVOQ1RJT05fXywKLQkJJihwY21wLT5wY21jX3BpcHIpLHBjbXAtPnBjbWNfcGlwcik7Ci0JaWYgKHBjbXAtPnBjbWNfcGlwciAmICgweDE4MDAwMDAwID4+IChzbG90IDw8IDQpKSkgewotCQlwcmludGYgKCIgICBObyBDYXJkIGZvdW5kXG4iKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQkvKgotCSAqIFBvd2VyIE9uLgotCSAqLwotCW1hc2sgPSBQQ01DSUFfVlMxKHNsb3QpIHwgUENNQ0lBX1ZTMihzbG90KTsKLQlyZWcgID0gcGNtcC0+cGNtY19waXByOwotCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwKLQkJcmVnLAotCQkocmVnJlBDTUNJQV9WUzEoc2xvdCkpPyJuIjoiZmYiLAotCQkocmVnJlBDTUNJQV9WUzIoc2xvdCkpPyJuIjoiZmYiKTsKLQlpZiAoKHJlZyAmIG1hc2spID09IG1hc2spIHsKLQkJdmFsID0gMDsJCS8qIFZDQ0IzLzUgPSAwID09PiB1c2UgVnggPSA1LjAgViAqLwotCQlwdXRzICgiIDUuMFYgY2FyZCBmb3VuZDogIik7Ci0JfSBlbHNlIHsKLQkJdmFsID0gTUFYMTYwNF9WQ0NfMzU7CS8qIFZDQ0IzLzUgPSAxID09PiB1c2UgVnkgPSAzLjMgViAqLwotCQlwdXRzICgiIDMuM1YgY2FyZCBmb3VuZDogIik7Ci0JfQotCi0JLyogIHN3aXRjaCBWQ0Mgb24gKi8KLQl2YWwgfD0gTUFYMTYwNF9PUF9TVVMgfCBNQVgxNjA0X1ZDQ0JPTjsKLQlpMmNfaW5pdCAgKENGR19JMkNfU1BFRUQsIENGR19JMkNfU0xBVkUpOwotCWkyY193cml0ZSAoQ0ZHX0kyQ19QT1dFUl9BX0FERFIsIDAsIDAsICZ2YWwsIDEpOwotCi0JdWRlbGF5KDUwMDAwMCk7Ci0KLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnICA9ICBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0KLQl1ZGVsYXkoMjUwMDAwKTsJLyogc29tZSBjYXJkcyBuZWVkID4xNTAgbXMgdG8gY29tZSB1cCA6LSggKi8KLQotCWRlYnVnICgiIyBoYXJkd2FyZV9lbmFibGUgZG9uZVxuIik7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCi1zdGF0aWMgaW50IGhhcmR3YXJlX2Rpc2FibGUoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXVfbG9uZyByZWc7Ci0JdWNoYXIgdmFsOwotCi0JZGVidWcgKCJoYXJkd2FyZV9kaXNhYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JcGNtcCA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCi0JLyogcmVtb3ZlIGFsbCBwb3dlciwgcHV0IG91dHB1dCBpbiBoaWdoIGltcGVkYW5jZSBzdGF0ZSAqLwotCXZhbCAgPSBNQVgxNjA0X1ZDQ0JISVogfCBNQVgxNjA0X1ZQUEJISVo7Ci0JaTJjX2luaXQgIChDRkdfSTJDX1NQRUVELCBDRkdfSTJDX1NMQVZFKTsKLQlpMmNfd3JpdGUgKENGR19JMkNfUE9XRVJfQV9BRERSLCAwLCAwLCAmdmFsLCAxKTsKLQotCS8qIENvbmZpZ3VyZSBQQ01DSUEgR2VuZXJhbCBDb250cm9sIFJlZ2lzdGVyICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0KLQkvKiBTd2l0Y2ggb2ZmIFBDTUNJQSBwb3J0IGluIFBJQyByZWdpc3RlciAweDYwICovCi0JcmVnID0gcGljX3JlYWQgICgweDYwKTsKLQlkZWJ1ZyAoIlslZF0gUElDIHJlYWQ6IHJlZ182MCA9IDB4JTAyeFxuIiwgX19MSU5FX18sIHJlZyk7Ci0JcmVnIHw9ICAweDEwOwotCXJlZyAmPSB+MHgwODsKLQlwaWNfd3JpdGUgKDB4NjAsIHJlZyk7Ci0jaWZkZWYgREVCVUcKLQlyZWcgPSBwaWNfcmVhZCAgKDB4NjApOwotCXByaW50ZiAoIlslZF0gUElDIHJlYWQ6IHJlZ182MCA9IDB4JTAyeFxuIiwgX19MSU5FX18sIHJlZyk7Ci0jZW5kaWYKLQl1ZGVsYXkoMTAwMDApOwotCi0JcmV0dXJuICgwKTsKLX0KLSNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLwotCi0KLXN0YXRpYyBpbnQgdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXVfbG9uZyByZWc7Ci0JdWNoYXIgdmFsOwotCi0JZGVidWcgKCJ2b2x0YWdlX3NldDogIgotCQlQQ01DSUFfQk9BUkRfTVNHCi0JCSIgU2xvdCAlYywgVmNjPSVkLiVkLCBWcHA9JWQuJWRcbiIsCi0JCSdBJytzbG90LCB2Y2MvMTAsIHZjYyUxMCwgdnBwLzEwLCB2Y2MlMTApOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXBjbXAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQkvKgotCSAqIERpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgKGlzb2xhdGUgdGhlIGludGVyZmFjZSkKLQkgKiBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAotCSAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gUENNQ0lBX1BHQ1JYKF9zbG90Xyk7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCS8qCi0JICogVHVybiBvZmYgYWxsIHBvd2VyIChzd2l0Y2ggdG8gaGlnaCBpbXBlZGFuY2UpCi0JICovCi0JZGVidWcgKCJQQ01DSUEgcG93ZXIgT0ZGXG4iKTsKLQl2YWwgID0gTUFYMTYwNF9WQ0NCSElaIHwgTUFYMTYwNF9WUFBCSElaOwotCWkyY19pbml0ICAoQ0ZHX0kyQ19TUEVFRCwgQ0ZHX0kyQ19TTEFWRSk7Ci0JaTJjX3dyaXRlIChDRkdfSTJDX1BPV0VSX0FfQUREUiwgMCwgMCwgJnZhbCwgMSk7Ci0KLQl2YWwgPSAwOwotCXN3aXRjaCh2Y2MpIHsKLQljYXNlICAwOiAJCQlicmVhazsKLQljYXNlIDMzOiB2YWwgPSBNQVgxNjA0X1ZDQ18zNTsJYnJlYWs7Ci0JY2FzZSA1MDogCQkJYnJlYWs7Ci0JZGVmYXVsdDogCQkJZ290byBkb25lOwotCX0KLQotCS8qIENoZWNraW5nIHN1cHBvcnRlZCB2b2x0YWdlcyAqLwotCi0JZGVidWcgKCJQSVBSOiAweCV4IC0tPiAlc1xuIiwKLQkJcGNtcC0+cGNtY19waXByLAotCQkocGNtcC0+cGNtY19waXByICYgMHgwMDAwODAwMCkgPyAib25seSA1IFYiIDogImNhbiBkbyAzLjNWIik7Ci0KLQlpMmNfd3JpdGUgKENGR19JMkNfUE9XRVJfQV9BRERSLCAwLCAwLCAmdmFsLCAxKTsKLQlpZiAodmFsKSB7Ci0JCWRlYnVnICgiUENNQ0lBIHBvd2VyZWQgYXQgJXNWXG4iLAotCQkJKHZhbCAmIE1BWDE2MDRfVkNDXzM1KSA/ICIzLjMiIDogIjUuMCIpOwotCX0gZWxzZSB7Ci0JCWRlYnVnICgiUENNQ0lBIHBvd2VyZWQgZG93blxuIik7Ci0JfQotCi1kb25lOgotCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKLQlyZWcgID0gIFBDTUNJQV9QR0NSWChfc2xvdF8pOwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWMsIERPTkVcbiIsCi0JCXNsb3QrJ0EnKTsKLQlyZXR1cm4gKDApOwotfQotCi0jZW5kaWYJLyogTFdNT04gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIEdUSCBib2FyZCBieSBDb3JlbGF0dXMgQUIJCQkJCQkqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19HVEgpCi0KLSNkZWZpbmUgUENNQ0lBX0JPQVJEX01TRyAiR1RIIENPTVBBQ1QgRkxBU0giCi0KLXN0YXRpYyBpbnQgdm9sdGFnZV9zZXQgKGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQotewkvKiBEbyBub3RoaW5nICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGFyZHdhcmVfZW5hYmxlIChpbnQgc2xvdCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcDsKLQl2b2xhdGlsZSBjcG04eHhfdCAqY3A7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90ICpwY21wOwotCXZvbGF0aWxlIHN5c2NvbmY4eHhfdCAqc3lzcDsKLQl1aW50IHJlZywgbWFzazsKLQotCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiBHVEggU2xvdCAlY1xuIiwgJ0EnICsgc2xvdCk7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOwotCXN5c3AgPSAoc3lzY29uZjh4eF90ICopICgmKCgoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX3NpdV9jb25mKSk7Ci0JcGNtcCA9IChwY21jb25mOHh4X3QgKikgKCYoKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0JY3AgPSAoY3BtOHh4X3QgKikgKCYoKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtKSk7Ci0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlwY21wLT5wY21jX3BzY3IgPSBQQ01DSUFfTUFTSyAoX3Nsb3RfKTsKLQlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0sgKF9zbG90Xyk7Ci0KLQkvKgotCSAqIERpc2FibGUgaW50ZXJydXB0cywgRE1BLCBhbmQgUENNQ0lBIGJ1ZmZlcnMKLQkgKiAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKSBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAotCSAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlggKF9zbG90XykgPSByZWc7Ci0JdWRlbGF5ICg1MDApOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBjYXJkIGluIHRoZSBzbG90LAotCSAqIHRoZW4gY29uZmlndXJlIHRoZSBpbnRlcmZhY2UuCi0JICovCi0JdWRlbGF5ICgxMDAwMCk7Ci0JZGVidWcgKCJbJWRdICVzOiBQSVBSKCVwKT0weCV4XG4iLAotCQlfX0xJTkVfXywgX19GVU5DVElPTl9fLAotCQkmKHBjbXAtPnBjbWNfcGlwciksIHBjbXAtPnBjbWNfcGlwcik7Ci0JaWYgKHBjbXAtPnBjbWNfcGlwciAmIDB4OTgwMDAwMDApIHsKLQkJcHJpbnRmICgiICAgTm8gQ2FyZCBmb3VuZFxuIik7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0JbWFzayA9IFBDTUNJQV9WUzEgKHNsb3QpIHwgUENNQ0lBX1ZTMiAoc2xvdCk7Ci0JcmVnID0gcGNtcC0+cGNtY19waXByOwotCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwKLQkJICAgcmVnLAotCQkgICAocmVnICYgUENNQ0lBX1ZTMSAoc2xvdCkpID8gIm4iIDogImZmIiwKLQkJICAgKHJlZyAmIFBDTUNJQV9WUzIgKHNsb3QpKSA/ICJuIiA6ICJmZiIpOwotCi0JZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOwotCXJlZyAgPSAgUENNQ0lBX1BHQ1JYIChfc2xvdF8pOwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlggKF9zbG90XykgPSByZWc7Ci0KLQl1ZGVsYXkgKDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCi0KLQlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQotewotCXJldHVybiAwOwkvKiBObyBoYXJkd2FyZSB0byBkaXNhYmxlICovCi19Ci0jZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KLSNlbmRpZgkvKiBDT05GSUdfR1RIICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBJQ1U4NjIgQm9hcmRzIGJ5IENhbWJyaWRnZSBCcm9hZGJhbmQgTHRkLgkJCQkqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0lDVTg2MikKLQotI2RlZmluZSBQQ01DSUFfQk9BUkRfTVNHICJJQ1U4NjIiCi0KLXN0YXRpYyB2b2lkIGNmZ19wb3J0X0IgKHZvaWQpOwotCi1zdGF0aWMgaW50IGhhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKLQl2b2xhdGlsZSBjcG04eHhfdAkqY3A7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXZvbGF0aWxlIHN5c2NvbmY4eHhfdAkqc3lzcDsKLQl1aW50IHJlZywgcGlwciwgbWFzazsKLQlpbnQgaTsKLQotCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7Ci0KLQl1ZGVsYXkoMTAwMDApOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXN5c3AgID0gKHN5c2NvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fc2l1X2NvbmYpKTsKLQlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKLQotCS8qIENvbmZpZ3VyZSBQb3J0IEIgZm9yIFRQUzIyMDUgUEMtQ2FyZCBQb3dlci1JbnRlcmZhY2UgU3dpdGNoICovCi0JY2ZnX3BvcnRfQiAoKTsKLQotCS8qCi0JICogQ29uZmlndXJlIFNJVU1DUiB0byBlbmFibGUgUENNQ0lBIHBvcnQgQgotCSAqIChWRkxTWzA6MV0gYXJlIG5vdCB1c2VkIGZvciBkZWJ1Z2dpbmcsIHdlIGNvbm5lY3QgRlJaIyBpbnN0ZWFkKQotCSAqLwotCXN5c3AtPnNjX3NpdW1jciAmPSB+U0lVTUNSX0RCR0MxMTsJLyogc2V0IERCR0MgdG8gMDAgKi8KLQotCS8qIGNsZWFyIGludGVycnVwdCBzdGF0ZSwgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCXBjbXAtPnBjbWNfcHNjciA9ICBQQ01DSUFfTUFTSyhfc2xvdF8pOwotCXBjbXAtPnBjbWNfcGVyICY9IH5QQ01DSUFfTUFTSyhfc2xvdF8pOwotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMsIERNQSwgYW5kIFBDTUNJQSBidWZmZXJzCi0JICogKGlzb2xhdGUgdGhlIGludGVyZmFjZSkgYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKLQkgKi8KLQlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7Ci0JcmVnICA9IDA7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoZXJlIGlzIGEgY2FyZCBpbiB0aGUgc2xvdCwgdGhlbiBjb25maWd1cmUgdGhlIGludGVyZmFjZS4KLQkgKi8KLQl1ZGVsYXkoMTAwMDApOwotCWRlYnVnICgiWyVkXSAlczogUElQUiglcCk9MHgleFxuIiwKLQkJX19MSU5FX18sX19GVU5DVElPTl9fLAotCQkmKHBjbXAtPnBjbWNfcGlwcikscGNtcC0+cGNtY19waXByKTsKLQlpZiAocGNtcC0+cGNtY19waXByICYgKDB4MTgwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKSB7Ci0JCXByaW50ZiAoIiAgIE5vIENhcmQgZm91bmRcbiIpOwotCQlyZXR1cm4gKDEpOwotCX0KLQotCS8qCi0JICogUG93ZXIgT246IFNldCBWQVZDQyB0byAzLjNWIG9yIDVWLCBzZXQgVkFWUFAgdG8gSGktWgotCSAqLwotCW1hc2sgPSBQQ01DSUFfVlMxKHNsb3QpIHwgUENNQ0lBX1ZTMihzbG90KTsKLQlwaXByID0gcGNtcC0+cGNtY19waXByOwotCWRlYnVnICgiUElQUjogMHgleCA9PT4gVlMxPW8lcywgVlMyPW8lc1xuIiwKLQkJcGlwciwKLQkJKHJlZyZQQ01DSUFfVlMxKHNsb3QpKT8ibiI6ImZmIiwKLQkJKHJlZyZQQ01DSUFfVlMyKHNsb3QpKT8ibiI6ImZmIik7Ci0KLQlyZWcgID0gY3AtPmNwX3BiZGF0OwotCWlmICgocGlwciAmIG1hc2spID09IG1hc2spIHsKLQkJcmVnIHw9IChUUFMyMjA1X1ZQUF9QR00gfCBUUFMyMjA1X1ZQUF9WQ0MgfAkvKiBWQVZQUCA9PiBIaS1aICovCi0JCQlUUFMyMjA1X1ZDQzMpOwkJCQkvKiAzViBvZmYJKi8KLQkJcmVnICY9IH4oVFBTMjIwNV9WQ0M1KTsJCQkJLyogNVYgb24JKi8KLQkJcHV0cyAoIiA1LjBWIGNhcmQgZm91bmQ6ICIpOwotCX0gZWxzZSB7Ci0JCXJlZyB8PSAoVFBTMjIwNV9WUFBfUEdNIHwgVFBTMjIwNV9WUFBfVkNDIHwJLyogVkFWUFAgPT4gSGktWiAqLwotCQkJVFBTMjIwNV9WQ0M1KTsJCQkJLyogNVYgb2ZmCSovCi0JCXJlZyAmPSB+KFRQUzIyMDVfVkNDMyk7CQkJCS8qIDNWIG9uCSovCi0JCXB1dHMgKCIgMy4zViBjYXJkIGZvdW5kOiAiKTsKLQl9Ci0KLQlkZWJ1ZyAoIlxuUEIgREFUOiAlMDh4IC0+IDMuM1YgJXMgNS4wViAlcyBWUFBfUEdNICVzIFZQUF9WQ0MgJXNcbiIsCi0JCXJlZywKLQkJKHJlZyAmIFRQUzIyMDVfVkNDMykgICAgPyAib2ZmIiA6ICJvbiIsCi0JCShyZWcgJiBUUFMyMjA1X1ZDQzUpICAgID8gIm9mZiIgOiAib24iLAotCQkocmVnICYgVFBTMjIwNV9WUFBfUEdNKSA/ICJvZmYiIDogIm9uIiwKLQkJKHJlZyAmIFRQUzIyMDVfVlBQX1ZDQykgPyAib2ZmIiA6ICJvbiIgKTsKLQotCWNwLT5jcF9wYmRhdCA9IHJlZzsKLQotCS8qICBXYWl0IDUwMCBtczsgdXNlIHRoaXMgdG8gY2hlY2sgZm9yIG92ZXItY3VycmVudCAqLwotCWZvciAoaT0wOyBpPDUwMDA7ICsraSkgewotCQlpZiAoKGNwLT5jcF9wYmRhdCAmIFRQUzIyMDVfT0MpID09IDApIHsKLQkJCXByaW50ZiAoIiAgICoqKiBPdmVyY3VycmVudCAtIFNhZmV0eSBzaHV0ZG93biAqKipcbiIpOwotCQkJY3AtPmNwX3BiZGF0ICY9IH4oVFBTMjIwNV9TSEROKTsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJdWRlbGF5ICgxMDApOwotCX0KLQotCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKLQlyZWcgID0gIFBDTUNJQV9QR0NSWChfc2xvdF8pOwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQotCXVkZWxheSgyNTAwMDApOwkvKiBzb21lIGNhcmRzIG5lZWQgPjE1MCBtcyB0byBjb21lIHVwIDotKCAqLwotCi0JZGVidWcgKCIjIGhhcmR3YXJlX2VuYWJsZSBkb25lXG4iKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKLXN0YXRpYyBpbnQgaGFyZHdhcmVfZGlzYWJsZShpbnQgc2xvdCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKLQl2b2xhdGlsZSBjcG04eHhfdAkqY3A7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXVfbG9uZyByZWc7Ci0KLQlkZWJ1ZyAoImhhcmR3YXJlX2Rpc2FibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7Ci0JcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQotCS8qIFNodXQgZG93biAqLwotCWNwLT5jcF9wYmRhdCAmPSB+KFRQUzIyMDVfU0hETik7Ci0KLQkvKiBDb25maWd1cmUgUENNQ0lBIEdlbmVyYWwgQ29udHJvbCBSZWdpc3RlciAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gMDsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCi0JdWRlbGF5KDEwMDAwKTsKLQotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KLQotCi1zdGF0aWMgaW50IHZvbHRhZ2Vfc2V0KGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0JdV9sb25nIHJlZzsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIKLQkJUENNQ0lBX0JPQVJEX01TRwotCQkiIFNsb3QgJWMsIFZjYz0lZC4lZCwgVnBwPSVkLiVkXG4iLAotCQknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7Ci0JcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQkvKgotCSAqIERpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgKGlzb2xhdGUgdGhlIGludGVyZmFjZSkKLQkgKiBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAotCSAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gUENNQ0lBX1BHQ1JYKF9zbG90Xyk7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCS8qCi0JICogQ29uZmlndXJlIFBvcnQgQyBwaW5zIGZvcgotCSAqIDUgVm9sdHMgRW5hYmxlIGFuZCAzIFZvbHRzIGVuYWJsZSwKLQkgKiBUdXJuIGFsbCBwb3dlciBwaW5zIHRvIEhpLVoKLQkgKi8KLQlkZWJ1ZyAoIlBDTUNJQSBwb3dlciBPRkZcbiIpOwotCWNmZ19wb3J0X0IgKCk7CS8qIEVuYWJsZXMgc3dpdGNoLCBidXQgYWxsIGluIEhpLVogKi8KLQotCXJlZyAgPSBjcC0+Y3BfcGJkYXQ7Ci0KLQlzd2l0Y2godmNjKSB7Ci0JY2FzZSAgMDogCQkJYnJlYWs7CS8qIFN3aXRjaCBvZmYJCSovCi0JY2FzZSAzMzogcmVnICY9IH5UUFMyMjA1X1ZDQzM7CWJyZWFrOwkvKiBTd2l0Y2ggb24gMy4zVgkqLwotCWNhc2UgNTA6IHJlZyAmPSB+VFBTMjIwNV9WQ0M1OwlicmVhazsJLyogU3dpdGNoIG9uIDUuMFYJKi8KLQlkZWZhdWx0OiAJCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyogQ2hlY2tpbmcgc3VwcG9ydGVkIHZvbHRhZ2VzICovCi0KLQlkZWJ1ZyAoIlBJUFI6IDB4JXggLS0+ICVzXG4iLAotCQlwY21wLT5wY21jX3BpcHIsCi0JCShwY21wLT5wY21jX3BpcHIgJiAweDAwMDA4MDAwKSA/ICJvbmx5IDUgViIgOiAiY2FuIGRvIDMuM1YiKTsKLQotCWNwLT5jcF9wYmRhdCA9IHJlZzsKLQotI2lmZGVmIERFQlVHCi0gICAgewotCWNoYXIgKnM7Ci0KLQlpZiAoKHJlZyAmIFRQUzIyMDVfVkNDMykgPT0gMCkgewotCQlzID0gImF0IDMuM1YiOwotCX0gZWxzZSBpZiAoKHJlZyAmIFRQUzIyMDVfVkNDNSkgPT0gMCkgewotCQlzID0gImF0IDUuMFYiOwotCX0gZWxzZSB7Ci0JCXMgPSAiZG93biI7Ci0JfQotCXByaW50ZiAoIlBDTUNJQSBwb3dlcmVkICVzXG4iLCBzKTsKLSAgICB9Ci0jZW5kaWYKLQotZG9uZToKLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnICA9ICBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0JdWRlbGF5KDUwMCk7Ci0KLQlkZWJ1ZyAoInZvbHRhZ2Vfc2V0OiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjLCBET05FXG4iLAotCQlzbG90KydBJyk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgY2ZnX3BvcnRfQiAodm9pZCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKLQl2b2xhdGlsZSBjcG04eHhfdAkqY3A7Ci0JdWludCByZWc7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JY3AgICAgPSAoY3BtOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX2NwbSkpOwotCi0JLyoKLQkgKiBDb25maWd1cmUgUG9ydCBCIGZvciBUUFMyMjA1IFBDLUNhcmQgUG93ZXItSW50ZXJmYWNlIFN3aXRjaAotCSAqCi0JICogU3dpdGNoIG9mZiBhbGwgdm9sdGFnZXMsIGFzc2VydCBzaHV0ZG93bgotCSAqLwotCXJlZyAgPSBjcC0+Y3BfcGJkYXQ7Ci0JcmVnIHw9IChUUFMyMjA1X1ZQUF9QR00gfCBUUFMyMjA1X1ZQUF9WQ0MgfAkvKiBWQVZQUCA9PiBIaS1aICovCi0JCVRQUzIyMDVfVkNDMyAgICB8IFRQUzIyMDVfVkNDNSAgICB8CS8qIFZBVkNDID0+IEhpLVogKi8KLQkJVFBTMjIwNV9TSEROKTsJCQkJLyogZW5hYmxlIHN3aXRjaCAqLwotCWNwLT5jcF9wYmRhdCA9IHJlZzsKLQotCWNwLT5jcF9wYnBhciAmPSB+KFRQUzIyMDVfSU5QVVRTIHwgVFBTMjIwNV9PVVRQVVRTKTsKLQotCXJlZyA9IGNwLT5jcF9wYmRpciAmIH4oVFBTMjIwNV9JTlBVVFMpOwotCWNwLT5jcF9wYmRpciA9IHJlZyB8IFRQUzIyMDVfT1VUUFVUUzsKLQotCWRlYnVnICgiU2V0IFBvcnQgQjogUEFSOiAlMDh4IERJUjogJTA4eCBEQVQ6ICUwOHhcbiIsCi0JCWNwLT5jcF9wYnBhciwgY3AtPmNwX3BiZGlyLCBjcC0+Y3BfcGJkYXQpOwotfQotCi0jZW5kaWYJLyogSUNVODYyICovCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIEMyTU9OIEJvYXJkcyBieSBUVFRlY2ggQ29tcHV0ZXJ0ZWNobmlrIEFHCQkJCSovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQzJNT04pCi0KLSNkZWZpbmUgUENNQ0lBX0JPQVJEX01TRyAiQzJNT04iCi0KLXN0YXRpYyB2b2lkIGNmZ19wb3J0cyAodm9pZCk7Ci0KLXN0YXRpYyBpbnQgaGFyZHdhcmVfZW5hYmxlKGludCBzbG90KQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0Jdm9sYXRpbGUgc3lzY29uZjh4eF90CSpzeXNwOwotCXVpbnQgcmVnLCBwaXByLCBtYXNrOwotCXVzaG9ydCBzcmVnOwotCWludCBpOwotCi0JZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKLQotCXVkZWxheSgxMDAwMCk7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jc3lzcCAgPSAoc3lzY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9zaXVfY29uZikpOwotCXBjbXAgID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0JY3AgICAgPSAoY3BtOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX2NwbSkpOwotCi0JLyogQ29uZmlndXJlIFBvcnRzIGZvciBUUFMyMjExQSBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2ggKi8KLQljZmdfcG9ydHMgKCk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBTSVVNQ1IgdG8gZW5hYmxlIFBDTUNJQSBwb3J0IEIKLQkgKiAoVkZMU1swOjFdIGFyZSBub3QgdXNlZCBmb3IgZGVidWdnaW5nLCB3ZSBjb25uZWN0IEZSWiMgaW5zdGVhZCkKLQkgKi8KLQlzeXNwLT5zY19zaXVtY3IgJj0gflNJVU1DUl9EQkdDMTE7CS8qIHNldCBEQkdDIHRvIDAwICovCi0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soX3Nsb3RfKTsKLQlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0soX3Nsb3RfKTsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzLCBETUEsIGFuZCBQQ01DSUEgYnVmZmVycwotCSAqIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCi0JICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0JdWRlbGF5KDUwMCk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGNhcmQgaW4gdGhlIHNsb3QsIHRoZW4gY29uZmlndXJlIHRoZSBpbnRlcmZhY2UuCi0JICovCi0JdWRlbGF5KDEwMDAwKTsKLQlkZWJ1ZyAoIlslZF0gJXM6IFBJUFIoJXApPTB4JXhcbiIsCi0JCV9fTElORV9fLF9fRlVOQ1RJT05fXywKLQkJJihwY21wLT5wY21jX3BpcHIpLHBjbXAtPnBjbWNfcGlwcik7Ci0JaWYgKHBjbXAtPnBjbWNfcGlwciAmICgweDE4MDAwMDAwID4+IChzbG90IDw8IDQpKSkgewotCQlwcmludGYgKCIgICBObyBDYXJkIGZvdW5kXG4iKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQkvKgotCSAqIFBvd2VyIE9uOiBTZXQgVkFWQ0MgdG8gMy4zViBvciA1Viwgc2V0IFZBVlBQIHRvIEhpLVoKLQkgKi8KLQltYXNrID0gUENNQ0lBX1ZTMShzbG90KSB8IFBDTUNJQV9WUzIoc2xvdCk7Ci0JcGlwciA9IHBjbXAtPnBjbWNfcGlwcjsKLQlkZWJ1ZyAoIlBJUFI6IDB4JXggPT0+IFZTMT1vJXMsIFZTMj1vJXNcbiIsCi0JCXBpcHIsCi0JCShyZWcmUENNQ0lBX1ZTMShzbG90KSk/Im4iOiJmZiIsCi0JCShyZWcmUENNQ0lBX1ZTMihzbG90KSk/Im4iOiJmZiIpOwotCi0Jc3JlZyA9IGltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0OwotCWlmICgocGlwciAmIG1hc2spID09IG1hc2spIHsKLQkJc3JlZyB8PSAgKFRQUzIyMTFfVlBQRDAgfCBUUFMyMjExX1ZQUEQxIHwJLyogVkFWUFAgPT4gSGktWiAqLwotCQkJICBUUFMyMjExX1ZDQ0QxKTsJCQkvKiA1ViBvbgkqLwotCQlzcmVnICY9IH4oVFBTMjIxMV9WQ0NEMCk7CQkJLyogM1Ygb2ZmCSovCi0JCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiAiKTsKLQl9IGVsc2UgewotCQlzcmVnIHw9ICAoVFBTMjIxMV9WUFBEMCB8IFRQUzIyMTFfVlBQRDEgfAkvKiBWQVZQUCA9PiBIaS1aICovCi0JCQkgIFRQUzIyMTFfVkNDRDApOwkJCS8qIDNWIG9uCSovCi0JCXNyZWcgJj0gfihUUFMyMjExX1ZDQ0QxKTsJCQkvKiA1ViBvZmYJKi8KLQkJcHV0cyAoIiAzLjNWIGNhcmQgZm91bmQ6ICIpOwotCX0KLQotCWRlYnVnICgiXG5QQyBEQVQ6ICUwNHggLT4gMy4zViAlcyA1LjBWICVzXG4iLAotCQlzcmVnLAotCQkoIChzcmVnICYgVFBTMjIxMV9WQ0NEMCkgJiYgIShzcmVnICYgVFBTMjIxMV9WQ0NEMSkpID8gIm9uIiA6ICJvZmYiLAotCQkoIShzcmVnICYgVFBTMjIxMV9WQ0NEMCkgJiYgIChzcmVnICYgVFBTMjIxMV9WQ0NEMSkpID8gIm9uIiA6ICJvZmYiCi0JKTsKLQotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0ID0gc3JlZzsKLQotCS8qICBXYWl0IDUwMCBtczsgdXNlIHRoaXMgdG8gY2hlY2sgZm9yIG92ZXItY3VycmVudCAqLwotCWZvciAoaT0wOyBpPDUwMDA7ICsraSkgewotCQlpZiAoKGNwLT5jcF9wYmRhdCAmIFRQUzIyMTFfT0MpID09IDApIHsKLQkJICAgIHByaW50ZiAoIiAgICoqKiBPdmVyY3VycmVudCAtIFNhZmV0eSBzaHV0ZG93biAqKipcbiIpOwotCQkgICAgaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgJj0gfihUUFMyMjExX1ZDQ0QwfFRQUzIyMTFfVkNDRDEpOwotCQkgICAgcmV0dXJuICgxKTsKLQkJfQotCQl1ZGVsYXkgKDEwMCk7Ci0JfQotCi0JZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOwotCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7Ci0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCi0JdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCi0KLQlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOwotCi0JcmV0dXJuICgwKTsKLX0KLQotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0JdV9sb25nIHJlZzsKLQotCWRlYnVnICgiaGFyZHdhcmVfZGlzYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXBjbXAgID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0KLQkvKiBDb25maWd1cmUgUENNQ0lBIEdlbmVyYWwgQ29udHJvbCBSZWdpc3RlciAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gMDsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCi0JLyogQUxsIHZvbHRhZ2VzIG9mZiAvIEhpLVogKi8KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCB8PSAoVFBTMjIxMV9WUFBEMCB8IFRQUzIyMTFfVlBQRDEgfAotCQkJCSAgICAgICBUUFMyMjExX1ZDQ0QwIHwgVFBTMjIxMV9WQ0NEMSApOwotCi0JdWRlbGF5KDEwMDAwKTsKLQotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KLQotCi1zdGF0aWMgaW50IHZvbHRhZ2Vfc2V0KGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0JdV9sb25nIHJlZzsKLQl1c2hvcnQgc3JlZzsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIKLQkJUENNQ0lBX0JPQVJEX01TRwotCQkiIFNsb3QgJWMsIFZjYz0lZC4lZCwgVnBwPSVkLiVkXG4iLAotCQknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7Ci0JcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQkvKgotCSAqIERpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgKGlzb2xhdGUgdGhlIGludGVyZmFjZSkKLQkgKiBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAotCSAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gUENNQ0lBX1BHQ1JYKF9zbG90Xyk7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCS8qCi0JICogQ29uZmlndXJlIFBvcnQgQyBwaW5zIGZvcgotCSAqIDUgVm9sdHMgRW5hYmxlIGFuZCAzIFZvbHRzIGVuYWJsZSwKLQkgKiBUdXJuIGFsbCBwb3dlciBwaW5zIHRvIEhpLVoKLQkgKi8KLQlkZWJ1ZyAoIlBDTUNJQSBwb3dlciBPRkZcbiIpOwotCWNmZ19wb3J0cyAoKTsJLyogRW5hYmxlcyBzd2l0Y2gsIGJ1dCBhbGwgaW4gSGktWiAqLwotCi0Jc3JlZyAgPSBpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdDsKLQlzcmVnIHw9IFRQUzIyMTFfVlBQRDAgfCBUUFMyMjExX1ZQUEQxOwkJLyogVkFWUFAgYWx3YXlzIEhpLVogKi8KLQotCXN3aXRjaCh2Y2MpIHsKLQljYXNlICAwOiAJCQlicmVhazsJLyogU3dpdGNoIG9mZgkJKi8KLQljYXNlIDMzOiBzcmVnIHw9ICBUUFMyMjExX1ZDQ0QwOwkvKiBTd2l0Y2ggb24gMy4zVgkqLwotCQkgc3JlZyAmPSB+VFBTMjIxMV9WQ0NEMTsKLQkJIAkJCWJyZWFrOwotCWNhc2UgNTA6IHNyZWcgJj0gflRQUzIyMTFfVkNDRDA7CS8qIFN3aXRjaCBvbiA1LjBWCSovCi0JCSBzcmVnIHw9ICBUUFMyMjExX1ZDQ0QxOwotCQkgCQkJYnJlYWs7Ci0JZGVmYXVsdDogCQkJZ290byBkb25lOwotCX0KLQotCS8qIENoZWNraW5nIHN1cHBvcnRlZCB2b2x0YWdlcyAqLwotCi0JZGVidWcgKCJQSVBSOiAweCV4IC0tPiAlc1xuIiwKLQkJcGNtcC0+cGNtY19waXByLAotCQkocGNtcC0+cGNtY19waXByICYgMHgwMDAwODAwMCkgPyAib25seSA1IFYiIDogImNhbiBkbyAzLjNWIik7Ci0KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCA9IHNyZWc7Ci0KLSNpZmRlZiBERUJVRwotICAgIHsKLQljaGFyICpzOwotCi0JaWYgKChzcmVnICYgVFBTMjIxMV9WQ0NEMCkgJiYgIShzcmVnICYgVFBTMjIxMV9WQ0NEMSkpIHsKLQkJcyA9ICJhdCAzLjNWIjsKLQl9IGVsc2UgaWYgKCEoc3JlZyAmIFRQUzIyMTFfVkNDRDApICYmICAoc3JlZyAmIFRQUzIyMTFfVkNDRDEpKSB7Ci0JCXMgPSAiYXQgNS4wViI7Ci0JfSBlbHNlIHsKLQkJcyA9ICJkb3duIjsKLQl9Ci0JcHJpbnRmICgiUENNQ0lBIHBvd2VyZWQgJXNcbiIsIHMpOwotICAgIH0KLSNlbmRpZgotCi1kb25lOgotCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKLQlyZWcgID0gIFBDTUNJQV9QR0NSWChfc2xvdF8pOwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWMsIERPTkVcbiIsCi0JCXNsb3QrJ0EnKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZCBjZmdfcG9ydHMgKHZvaWQpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QJKmNwOwotCXVzaG9ydCBzcmVnOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKLQotCS8qCi0JICogQ29uZmlndXJlIFBvcnQgQyBmb3IgVFBTMjIxMSBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2gKLQkgKgotCSAqIFN3aXRjaCBvZmYgYWxsIHZvbHRhZ2VzLCBhc3NlcnQgc2h1dGRvd24KLQkgKi8KLQlzcmVnID0gaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQ7Ci0Jc3JlZyB8PSAgKFRQUzIyMTFfVlBQRDAgfCBUUFMyMjExX1ZQUEQxKTsJLyogVkFWUFAgPT4gSGktWiAqLwotCXNyZWcgJj0gfihUUFMyMjExX1ZDQ0QwIHwgVFBTMjIxMV9WQ0NEMSk7CS8qIDNWIGFuZCA1ViBvZmYgKi8KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCA9IHNyZWc7Ci0KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3BhciAmPSB+KFRQUzIyMTFfT1VUUFVUUyk7Ci0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIgfD0gICBUUFMyMjExX09VVFBVVFM7Ci0KLQlkZWJ1ZyAoIlNldCBQb3J0IEM6IFBBUjogICAgICUwNHggRElSOiAgICAgJTA0eCBEQVQ6ICAgICAlMDR4XG4iLAotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3BhciwKLQkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIsCi0JCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0KTsKLQotCS8qCi0JICogQ29uZmlndXJlIFBvcnQgQiBmb3IgVFBTMjIxMSBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2gKLQkgKgotCSAqIE92ZXItQ3VycmVudCBJbnB1dCBvbmx5Ci0JICovCi0JY3AtPmNwX3BicGFyICY9IH4oVFBTMjIxMV9JTlBVVFMpOwotCWNwLT5jcF9wYmRpciAmPSB+KFRQUzIyMTFfSU5QVVRTKTsKLQotCWRlYnVnICgiU2V0IFBvcnQgQjogUEFSOiAlMDh4IERJUjogJTA4eCBEQVQ6ICUwOHhcbiIsCi0JCWNwLT5jcF9wYnBhciwgY3AtPmNwX3BiZGlyLCBjcC0+Y3BfcGJkYXQpOwotfQotCi0jZW5kaWYJLyogQzJNT04gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIE1CWCBib2FyZCBmcm9tIE1vcm90b2xhCQkJCQkJKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKCBDT05GSUdfTUJYICkKLSNpbmNsdWRlIDwuLi9ib2FyZC9tYng4eHgvY3NyLmg+Ci0KLS8qIEEgbG90IG9mIHRoaXMgaGFzIGJlZW4gdGFrZW4gZnJvbSB0aGUgUlBYIGNvZGUgaW4gdGhpcyBmaWxlIGl0IHdvcmtzIGZyb20gbWUuCi0gICBJIGhhdmUgYWRkZWQgdGhlIHZvbHRhZ2Ugc2VsZWN0aW9uIGZvciB0aGUgTUJYIGJvYXJkLiAqLwotCi0vKiBNQlggdm9sdGFnZSBiaXQgaW4gY29udHJvbCByZWdpc3RlciAjMiAqLwotI2RlZmluZSBDUjJfVlBQMTIgICAgICAgKCh1Y2hhcikweDEwKQotI2RlZmluZSBDUjJfVlBQVkREICAgICAgKCh1Y2hhcikweDIwKQotI2RlZmluZSBDUjJfVkRENSAgICAgICAgKCh1Y2hhcikweDQwKQotI2RlZmluZSBDUjJfVkREMyAgICAgICAgKCh1Y2hhcikweDgwKQotCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIk1CWDg2MCIKLQotc3RhdGljIGludCB2b2x0YWdlX3NldCAoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCi17Ci0JdWNoYXIgcmVnID0gMDsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6IFBDTUNJQV9CT0FSRF9NU0cgU2xvdCAlYywgVmNjPSVkLiVkLCBWcHA9JWQuJWRcbiIsCi0JCSAnQScgKyBzbG90LCB2Y2MgLyAxMCwgdmNjICUgMTAsIHZwcCAvIDEwLCB2Y2MgJSAxMCk7Ci0KLQlzd2l0Y2ggKHZjYykgewotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JY2FzZSAzMzoKLQkJcmVnIHw9IENSMl9WREQzOwotCQlicmVhazsKLQljYXNlIDUwOgotCQlyZWcgfD0gQ1IyX1ZERDU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAxOwotCX0KLQotCXN3aXRjaCAodnBwKSB7Ci0JY2FzZSAwOgotCQlicmVhazsKLQljYXNlIDMzOgotCWNhc2UgNTA6Ci0JCWlmICh2Y2MgPT0gdnBwKSB7Ci0JCQlyZWcgfD0gQ1IyX1ZQUFZERDsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgMTIwOgotCQlyZWcgfD0gQ1IyX1ZQUDEyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBmaXJzdCwgdHVybiBvZmYgYWxsIHBvd2VyICovCi0JTUJYX0NTUjIgJj0gfihDUjJfVkREU0VMIHwgQ1IyX1ZQUFNFTCk7Ci0KLQkvKiBlbmFibGUgbmV3IHBvd2Vyc2V0dGluZ3MgKi8KLQlNQlhfQ1NSMiB8PSByZWc7Ci0JZGVidWcgKCJNQlhfQ1NSMiByZWFkID0gMHglMDJ4XG4iLCBNQlhfQ1NSMik7Ci0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW50IGhhcmR3YXJlX2VuYWJsZSAoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXA7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QgKmNwOwotCXZvbGF0aWxlIHBjbWNvbmY4eHhfdCAqcGNtcDsKLQl2b2xhdGlsZSBzeXNjb25mOHh4X3QgKnN5c3A7Ci0JdWludCByZWcsIG1hc2s7Ci0KLQlkZWJ1ZyAoImhhcmR3YXJlX2VuYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwKLQkJCQkgICdBJyArIHNsb3QpOwotCi0JdWRlbGF5ICgxMDAwMCk7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOwotCXN5c3AgPSAoc3lzY29uZjh4eF90ICopICgmKCgoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX3NpdV9jb25mKSk7Ci0JcGNtcCA9IChwY21jb25mOHh4X3QgKikgKCYoKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0JY3AgPSAoY3BtOHh4X3QgKikgKCYoKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtKSk7Ci0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlwY21wLT5wY21jX3BzY3IgPSBQQ01DSUFfTUFTSyAoX3Nsb3RfKTsKLQlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0sgKF9zbG90Xyk7Ci0KLQkvKgotCSAqIERpc2FibGUgaW50ZXJydXB0cywgRE1BLCBhbmQgUENNQ0lBIGJ1ZmZlcnMKLQkgKiAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKSBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAotCSAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlggKF9zbG90XykgPSByZWc7Ci0JdWRlbGF5ICg1MDApOwotCi0JLyogcmVtb3ZlIGFsbCBwb3dlciAqLwotCXZvbHRhZ2Vfc2V0IChzbG90LCAwLCAwKTsKLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGNhcmQgaW4gdGhlIHNsb3QsIHRoZW4gY29uZmlndXJlIHRoZSBpbnRlcmZhY2UuCi0JICovCi0JdWRlbGF5KDEwMDAwKTsKLQlkZWJ1ZyAoIlslZF0gJXM6IFBJUFIoJXApPTB4JXhcbiIsCi0JCV9fTElORV9fLF9fRlVOQ1RJT05fXywKLQkJJihwY21wLT5wY21jX3BpcHIpLHBjbXAtPnBjbWNfcGlwcik7Ci0jaWZuZGVmIENPTkZJR19ITUkxMAotCWlmIChwY21wLT5wY21jX3BpcHIgJiAoMHgxODAwMDAwMCA+PiAoc2xvdCA8PCA0KSkpIHsKLSNlbHNlCi0JaWYgKHBjbXAtPnBjbWNfcGlwciAmICgweDEwMDAwMDAwID4+IChzbG90IDw8IDQpKSkgewotI2VuZGlmCS8qIENPTkZJR19ITUkxMCAqLwotCQlwcmludGYgKCIgICBObyBDYXJkIGZvdW5kXG4iKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQkvKgotCSAqIFBvd2VyIE9uLgotCSAqLwotCW1hc2sgPSBQQ01DSUFfVlMxIChfc2xvdF8pIHwgUENNQ0lBX1ZTMiAoX3Nsb3RfKTsKLQlyZWcgPSBwY21wLT5wY21jX3BpcHI7Ci0JZGVidWcgKCJQSVBSOiAweCV4ID09PiBWUzE9byVzLCBWUzI9byVzXG4iLCByZWcsCi0JCSAgKHJlZyAmIFBDTUNJQV9WUzEgKHNsb3QpKSA/ICJuIiA6ICJmZiIsCi0JCSAgKHJlZyAmIFBDTUNJQV9WUzIgKHNsb3QpKSA/ICJuIiA6ICJmZiIpOwotCi0JaWYgKChyZWcgJiBtYXNrKSA9PSBtYXNrKSB7Ci0JCXZvbHRhZ2Vfc2V0IChfc2xvdF8sIDUwLCAwKTsKLQkJcHJpbnRmICgiIDUuMFYgY2FyZCBmb3VuZDogIik7Ci0JfSBlbHNlIHsKLQkJdm9sdGFnZV9zZXQgKF9zbG90XywgMzMsIDApOwotCQlwcmludGYgKCIgMy4zViBjYXJkIGZvdW5kOiAiKTsKLQl9Ci0KLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnID0gUENNQ0lBX1BHQ1JYIChfc2xvdF8pOwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWCAoX3Nsb3RfKSA9IHJlZzsKLQotCXVkZWxheSAoMjUwMDAwKTsJLyogc29tZSBjYXJkcyBuZWVkID4xNTAgbXMgdG8gY29tZSB1cCA6LSggKi8KLQotCWRlYnVnICgiIyBoYXJkd2FyZV9lbmFibGUgZG9uZVxuIik7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlIChpbnQgc2xvdCkKLXsKLQlyZXR1cm4gMDsJLyogTm8gaGFyZHdhcmUgdG8gZGlzYWJsZSAqLwotfQotI2VuZGlmIC8qIENGR19DTURfUENNQ0lBICovCi0jZW5kaWYgLyogQ09ORklHX01CWCAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIFIzNjBNUEkgQm9hcmQJCQkJCQkJKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19SMzYwTVBJKQotCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9NU0cgIlIzNjBNUEkiCi0KLQotc3RhdGljIGludCBoYXJkd2FyZV9lbmFibGUoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QJKmNwOwotCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKLQl2b2xhdGlsZSBzeXNjb25mOHh4X3QJKnN5c3A7Ci0JdWludCByZWcsIG1hc2s7Ci0KLQlkZWJ1ZyAoImhhcmR3YXJlX2VuYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOwotCi0JdWRlbGF5KDEwMDAwKTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQlzeXNwICA9IChzeXNjb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3NpdV9jb25mKSk7Ci0JcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBTSVVNQ1IgdG8gZW5hYmxlIFBDTUNJQSBwb3J0IEIKLQkgKiAoVkZMU1swOjFdIGFyZSBub3QgdXNlZCBmb3IgZGVidWdnaW5nLCB3ZSBjb25uZWN0IEZSWiMgaW5zdGVhZCkKLQkgKi8KLQlzeXNwLT5zY19zaXVtY3IgJj0gflNJVU1DUl9EQkdDMTE7CS8qIHNldCBEQkdDIHRvIDAwICovCi0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soX3Nsb3RfKTsKLQlwY21wLT5wY21jX3BlciAmPSB+UENNQ0lBX01BU0soX3Nsb3RfKTsKLQotCS8qCi0JICogRGlzYWJsZSBpbnRlcnJ1cHRzLCBETUEsIGFuZCBQQ01DSUEgYnVmZmVycwotCSAqIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCi0JICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0JdWRlbGF5KDUwMCk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBQb3J0cyBBLCBCICYgQyBwaW5zIGZvcgotCSAqIDUgVm9sdHMgRW5hYmxlIGFuZCAzIFZvbHRzIGVuYWJsZQotCSAqLwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjcGFyICY9IH4oMHgwNDAwKTsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3NvICAmPSB+KDB4MDQwMCk7LyoKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RpciB8PSAweDA0MDA7Ki8KLQotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyICY9IH4oMHgwMjAwKTsvKgotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyIHw9IDB4MDIwMDsqLwotI2lmIDAKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYnBhciAmPSB+KDB4QzAwMCk7Ci0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGJkaXIgJj0gfigweEMwMDApOwotI2VuZGlmCi0JLyogcmVtb3ZlIGFsbCBwb3dlciAqLwotCi0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgfD0gMHgwNDAwOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0IHw9IDB4MDIwMDsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoZXJlIGlzIGEgY2FyZCBpbiB0aGUgc2xvdCwgdGhlbiBjb25maWd1cmUgdGhlIGludGVyZmFjZS4KLQkgKi8KLQl1ZGVsYXkoMTAwMDApOwotCWRlYnVnICgiWyVkXSAlczogUElQUiglcCk9MHgleFxuIiwKLQkJX19MSU5FX18sX19GVU5DVElPTl9fLAotCQkmKHBjbXAtPnBjbWNfcGlwcikscGNtcC0+cGNtY19waXByKTsKLQlpZiAocGNtcC0+cGNtY19waXByICYgKDB4MTgwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKSB7Ci0JCXByaW50ZiAoIiAgIE5vIENhcmQgZm91bmRcbiIpOwotCQlyZXR1cm4gKDEpOwotCX0KLQotCS8qCi0JICogUG93ZXIgT24uCi0JICovCi0JbWFzayA9IFBDTUNJQV9WUzEoc2xvdCkgfCBQQ01DSUFfVlMyKHNsb3QpOwotCXJlZyAgPSBwY21wLT5wY21jX3BpcHI7Ci0JZGVidWcgKCJQSVBSOiAweCV4ID09PiBWUzE9byVzLCBWUzI9byVzXG4iLAotCQlyZWcsCi0JCShyZWcmUENNQ0lBX1ZTMShzbG90KSk/Im4iOiJmZiIsCi0JCShyZWcmUENNQ0lBX1ZTMihzbG90KSk/Im4iOiJmZiIpOwotCWlmICgocmVnICYgbWFzaykgPT0gbWFzaykgewotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCAmPSB+KDB4NDAwMCk7Ci0JCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiAiKTsKLQl9IGVsc2UgewotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRhdCAmPSB+KDB4MDAwMik7Ci0JCXB1dHMgKCIgMy4zViBjYXJkIGZvdW5kOiAiKTsKLQl9Ci0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIgfD0gMHgwNDAwOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyIHw9IDB4MDIwMDsKLSNpZiAwCi0JLyogIFZDQyBzd2l0Y2ggZXJyb3IgZmxhZywgUENNQ0lBIHNsb3QgSU5QQUNLXyBwaW4gKi8KLQljcC0+Y3BfcGJkaXIgJj0gfigweDAwMjAgfCAweDAwMTApOwotCWNwLT5jcF9wYnBhciAmPSB+KDB4MDAyMCB8IDB4MDAxMCk7Ci0JdWRlbGF5KDUwMDAwMCk7Ci0jZW5kaWYKLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnICA9ICBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0KLQl1ZGVsYXkoMjUwMDAwKTsJLyogc29tZSBjYXJkcyBuZWVkID4xNTAgbXMgdG8gY29tZSB1cCA6LSggKi8KLQotCWRlYnVnICgiIyBoYXJkd2FyZV9lbmFibGUgZG9uZVxuIik7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCi1zdGF0aWMgaW50IGhhcmR3YXJlX2Rpc2FibGUoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXVfbG9uZyByZWc7Ci0KLQlkZWJ1ZyAoImhhcmR3YXJlX2Rpc2FibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQlwY21wID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0KLQkvKiByZW1vdmUgYWxsIHBvd2VyICovCi0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgfD0gMHgwNDAwOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0IHw9IDB4MDIwMDsKLQotCS8qIENvbmZpZ3VyZSBQQ01DSUEgR2VuZXJhbCBDb250cm9sIFJlZ2lzdGVyICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSAwOwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0KLQl1ZGVsYXkoMTAwMDApOwotCi0JcmV0dXJuICgwKTsKLX0KLSNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLwotCi0KLXN0YXRpYyBpbnQgdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXVfbG9uZyByZWc7Ci0KLQlkZWJ1ZyAoInZvbHRhZ2Vfc2V0OiAiCi0JCVBDTUNJQV9CT0FSRF9NU0cKLQkJIiBTbG90ICVjLCBWY2M9JWQuJWQsIFZwcD0lZC4lZFxuIiwKLQkJJ0EnK3Nsb3QsIHZjYy8xMCwgdmNjJTEwLCB2cHAvMTAsIHZjYyUxMCk7Ci0KLQlpbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JcGNtcCA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCS8qCi0JICogRGlzYWJsZSBQQ01DSUEgYnVmZmVycyAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKQotCSAqIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCi0JICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCXVkZWxheSg1MDApOwotCi0JLyoKLQkgKiBDb25maWd1cmUgUG9ydHMgQSAmIEMgcGlucyBmb3IKLQkgKiA1IFZvbHRzIEVuYWJsZSBhbmQgMyBWb2x0cyBlbmFibGUsCi0JICogVHVybiBvZmYgYWxsIHBvd2VyCi0JICovCi0JZGVidWcgKCJQQ01DSUEgcG93ZXIgT0ZGXG4iKTsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3BhciAmPSB+KDB4MDQwMCk7Ci0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNzbyAgJj0gfigweDA0MDApOy8qCi0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIgfD0gMHgwNDAwOyovCi0KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYXBhciAmPSB+KDB4MDIwMCk7LyoKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciB8PSAweDAyMDA7Ki8KLQotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0IHw9IDB4MDQwMDsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRhdCB8PSAweDAyMDA7Ci0KLQlyZWcgPSAwOwotCXN3aXRjaCh2Y2MpIHsKLQljYXNlICAwOiAJCWJyZWFrOwotCWNhc2UgMzM6IHJlZyB8PSAweDAyMDA7CWJyZWFrOwotCWNhc2UgNTA6IHJlZyB8PSAweDA0MDA7CWJyZWFrOwotCWRlZmF1bHQ6IAkJZ290byBkb25lOwotCX0KLQotCS8qIENoZWNraW5nIHN1cHBvcnRlZCB2b2x0YWdlcyAqLwotCi0JZGVidWcgKCJQSVBSOiAweCV4IC0tPiAlc1xuIiwKLQkJcGNtcC0+cGNtY19waXByLAotCQkocGNtcC0+cGNtY19waXByICYgMHgwMDAwODAwMCkgPyAib25seSA1IFYiIDogImNhbiBkbyAzLjNWIik7Ci0KLQlpZiAocmVnICYgMHgwMjAwKQotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCAmPSAhcmVnOwotCWlmIChyZWcgJiAweDA0MDApCi0JCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0ICY9ICFyZWc7Ci0JaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIgfD0gMHgwMjAwOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyIHw9IDB4MDQwMDsKLQlpZiAocmVnKSB7Ci0JCWRlYnVnICgiUENNQ0lBIHBvd2VyZWQgYXQgJXNWXG4iLAotCQkJKHJlZyYweDA0MDApID8gIjUuMCIgOiAiMy4zIik7Ci0JfSBlbHNlIHsKLQkJZGVidWcgKCJQQ01DSUEgcG93ZXJlZCBkb3duXG4iKTsKLQl9Ci0KLWRvbmU6Ci0JZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOwotCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7Ci0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCXVkZWxheSg1MDApOwotCi0JZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlYywgRE9ORVxuIiwKLQkJc2xvdCsnQScpOwotCXJldHVybiAoMCk7Ci19Ci0KLSNlbmRpZgkvKiBSMzYwTVBJICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBLVVA0SyBhbmQgS1VQNFggQm9hcmRzCQkJCQkJCQkqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19LVVA0SykgfHwgZGVmaW5lZChDT05GSUdfS1VQNFgpCi0KLSNkZWZpbmUgUENNQ0lBX0JPQVJEX01TRyAiS1VQIgotCi0jZGVmaW5lIEtVUDRLX1BDTUNJQV9CXzNWMyAoMHgwMDAyMDAwMCkKLQotc3RhdGljIGludCBoYXJkd2FyZV9lbmFibGUoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QJKmNwOwotCXZvbGF0aWxlIHBjbWNvbmY4eHhfdAkqcGNtcDsKLQl2b2xhdGlsZSBzeXNjb25mOHh4X3QJKnN5c3A7Ci0JdWludCByZWcsIG1hc2s7Ci0KLQlkZWJ1ZyAoImhhcmR3YXJlX2VuYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOwotCi0JdWRlbGF5KDEwMDAwKTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQlzeXNwICA9IChzeXNjb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3NpdV9jb25mKSk7Ci0JcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBTSVVNQ1IgdG8gZW5hYmxlIFBDTUNJQSBwb3J0IEIKLQkgKiAoVkZMU1swOjFdIGFyZSBub3QgdXNlZCBmb3IgZGVidWdnaW5nLCB3ZSBjb25uZWN0IEZSWiMgaW5zdGVhZCkKLQkgKi8KLQlzeXNwLT5zY19zaXVtY3IgJj0gflNJVU1DUl9EQkdDMTE7CS8qIHNldCBEQkdDIHRvIDAwICovCi0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soc2xvdCk7Ci0JcGNtcC0+cGNtY19wZXIgJj0gflBDTUNJQV9NQVNLKHNsb3QpOwotCi0JLyoKLQkgKiBEaXNhYmxlIGludGVycnVwdHMsIERNQSwgYW5kIFBDTUNJQSBidWZmZXJzCi0JICogKGlzb2xhdGUgdGhlIGludGVyZmFjZSkgYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKLQkgKi8KLQlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7Ci0JcmVnICA9IDA7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoc2xvdCkgPSByZWc7Ci0JdWRlbGF5KDI1MDApOwotCi0JLyoKLQkgKiBDb25maWd1cmUgUG9ydCBCIHBpbnMgZm9yCi0JICogMyBWb2x0cyBlbmFibGUKLQkgKi8KLQlpZiAoc2xvdCkgeyAvKiBTbG90IEEgaXMgYnVpbHQtaW4gKi8KLQkJY3AtPmNwX3BiZGlyIHw9ICBLVVA0S19QQ01DSUFfQl8zVjM7Ci0JCWNwLT5jcF9wYnBhciAmPSB+S1VQNEtfUENNQ0lBX0JfM1YzOwotCQkvKiByZW1vdmUgYWxsIHBvd2VyICovCi0JCWNwLT5jcF9wYmRhdCB8PSAgS1VQNEtfUENNQ0lBX0JfM1YzOyAvKiBhY3RpdmUgbG93ICovCi0JfQotCS8qCi0JICogTWFrZSBzdXJlIHRoZXJlIGlzIGEgY2FyZCBpbiB0aGUgc2xvdCwgdGhlbiBjb25maWd1cmUgdGhlIGludGVyZmFjZS4KLQkgKi8KLQl1ZGVsYXkoMTAwMDApOwotCWRlYnVnICgiWyVkXSAlczogUElQUiglcCk9MHgleFxuIiwKLQkJX19MSU5FX18sX19GVU5DVElPTl9fLAotCQkmKHBjbXAtPnBjbWNfcGlwcikscGNtcC0+cGNtY19waXByKTsKLQlpZiAocGNtcC0+cGNtY19waXByICYgKDB4MTgwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKSB7Ci0JCXByaW50ZiAoIiAgIE5vIENhcmQgZm91bmRcbiIpOwotCQlyZXR1cm4gKDEpOwotCX0KLQotCS8qCi0JICogUG93ZXIgT24uCi0JICovCi0JcHJpbnRmKCIlcyAgU2xvdCAlYzoiLCBzbG90ID8gIiIgOiAiXG4iLCAnQScgKyBzbG90KTsKLQltYXNrID0gUENNQ0lBX1ZTMShzbG90KSB8IFBDTUNJQV9WUzIoc2xvdCk7Ci0JcmVnICA9IHBjbXAtPnBjbWNfcGlwcjsKLQlkZWJ1ZyAoIlBJUFI6IDB4JXggPT0+IFZTMT1vJXMsIFZTMj1vJXNcbiIsCi0JCXJlZywKLQkJKHJlZyZQQ01DSUFfVlMxKHNsb3QpKT8ibiI6ImZmIiwKLQkJKHJlZyZQQ01DSUFfVlMyKHNsb3QpKT8ibiI6ImZmIik7Ci0JaWYgKChyZWcgJiBtYXNrKSA9PSBtYXNrKSB7Ci0JCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiBOT1QgU1VQUE9SVEVEICEhIVxuIik7Ci0JfSBlbHNlIHsKLQkJaWYoc2xvdCkKLQkJCWNwLT5jcF9wYmRhdCAmPSB+S1VQNEtfUENNQ0lBX0JfM1YzOwotCQlwdXRzICgiIDMuM1YgY2FyZCBmb3VuZDogIik7Ci0JfQotI2lmIDAKLQkvKiAgVkNDIHN3aXRjaCBlcnJvciBmbGFnLCBQQ01DSUEgc2xvdCBJTlBBQ0tfIHBpbiAqLwotCWNwLT5jcF9wYmRpciAmPSB+KDB4MDAyMCB8IDB4MDAxMCk7Ci0JY3AtPmNwX3BicGFyICY9IH4oMHgwMDIwIHwgMHgwMDEwKTsKLQl1ZGVsYXkoNTAwMDAwKTsKLSNlbmRpZgotCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKLQlyZWcgID0gIFBDTUNJQV9QR0NSWChzbG90KTsKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOwotCi0JdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCi0KLQlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOwotCi0JcmV0dXJuICgwKTsKLX0KLQotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0JdV9sb25nIHJlZzsKLQotCWRlYnVnICgiaGFyZHdhcmVfZGlzYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXBjbXAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7Ci0KLQkvKiByZW1vdmUgYWxsIHBvd2VyICovCi0JaWYgKHNsb3QpCi0JCWNwLT5jcF9wYmRhdCB8PSBLVVA0S19QQ01DSUFfQl8zVjM7Ci0KLQkvKiBDb25maWd1cmUgUENNQ0lBIEdlbmVyYWwgQ29udHJvbCBSZWdpc3RlciAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gMDsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKLQotCXVkZWxheSgxMDAwMCk7Ci0KLQlyZXR1cm4gKDApOwotfQotI2VuZGlmCS8qIENGR19DTURfUENNQ0lBICovCi0KLQotc3RhdGljIGludCB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKLQl2b2xhdGlsZSBjcG04eHhfdAkqY3A7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXVfbG9uZyByZWc7Ci0KLQlkZWJ1ZyAoInZvbHRhZ2Vfc2V0OiAiCVwKLQkJUENNQ0lBX0JPQVJEX01TRwlcCi0JCSIgU2xvdCAlYywgVmNjPSVkLiVkLCBWcHA9JWQuJWRcbiIsCi0JCSdBJytzbG90LCB2Y2MvMTAsIHZjYyUxMCwgdnBwLzEwLCB2Y2MlMTApOwotCi0JaWYgKCFzbG90KSAvKiBTbG90IEEgaXMgbm90IGNvbmZpZ3VyYWJsZSAqLwotCQlyZXR1cm4gMDsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQlwY21wID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0JY3AgICAgPSAoY3BtOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX2NwbSkpOwotCi0JLyoKLQkgKiBEaXNhYmxlIFBDTUNJQSBidWZmZXJzIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpCi0JICogYW5kIGFzc2VydCBSRVNFVCBzaWduYWwKLQkgKi8KLQlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7Ci0JcmVnICA9IFBDTUNJQV9QR0NSWChzbG90KTsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCWRlYnVnICgiUENNQ0lBIHBvd2VyIE9GRlxuIik7Ci0JLyoKLQkgKiBDb25maWd1cmUgUG9ydCBCIHBpbnMgZm9yCi0JICogMyBWb2x0cyBlbmFibGUKLQkgKi8KLQljcC0+Y3BfcGJkaXIgfD0gIEtVUDRLX1BDTUNJQV9CXzNWMzsKLQljcC0+Y3BfcGJwYXIgJj0gfktVUDRLX1BDTUNJQV9CXzNWMzsKLQkvKiByZW1vdmUgYWxsIHBvd2VyICovCi0JY3AtPmNwX3BiZGF0IHw9ICBLVVA0S19QQ01DSUFfQl8zVjM7IC8qIGFjdGl2ZSBsb3cgKi8KLQotCXN3aXRjaCh2Y2MpIHsKLQljYXNlICAwOiAJCWJyZWFrOwotCWNhc2UgMzM6Ci0JCWNwLT5jcF9wYmRhdCAmPSB+S1VQNEtfUENNQ0lBX0JfM1YzOwotCQlkZWJ1ZyAoIlBDTUNJQSBwb3dlcmVkIGF0IDMuM1ZcbiIpOwotCQlicmVhazsKLQljYXNlIDUwOgotCQlkZWJ1ZyAoIlBDTUNJQTogNVZvbHQgdmNjIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwdXRzKCJQQ01DSUE6IHZjYyBub3Qgc3VwcG9ydGVkIik7Ci0JCWJyZWFrOwotCX0KLQl1ZGVsYXkoMTAwMDApOwotCS8qIENoZWNraW5nIHN1cHBvcnRlZCB2b2x0YWdlcyAqLwotCi0JZGVidWcgKCJQSVBSOiAweCV4IC0tPiAlc1xuIiwKLQkJcGNtcC0+cGNtY19waXByLAotCQkgICAocGNtcC0+cGNtY19waXByICYgKDB4ODAwMDAwMDAgPj4gKHNsb3QgPDwgNCkpKQotCQkJPyAib25seSA1IFYgLS0+IE5PVCBTVVBQT1JURUQiCi0JCQk6ICJjYW4gZG8gMy4zViIpOwotCi0KLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnICA9ICBQQ01DSUFfUEdDUlgoc2xvdCk7Ci0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWMsIERPTkVcbiIsCi0JCXNsb3QrJ0EnKTsKLQlyZXR1cm4gKDApOwotfQotCi0jZW5kaWYJLyogS1VQNEsgfHwgS1VQNFggKi8KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRW5kIG9mIEJvYXJkIFNwZWNpZmljIFN0dWZmCQkJCQkJKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIE1QQzh4eCBTcGVjaWZpYyBTdHVmZiAtIHNob3VsZCBnbyB0byBNUEM4eHggZGlyZWN0b3J5CQkqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAqIFNlYXJjaCB0aGlzIHRhYmxlIHRvIHNlZSBpZiB0aGUgd2luZG93c2l6ZSBpcwotICogc3VwcG9ydGVkLi4uCi0gKi8KLQotI2RlZmluZSBNOFhYX1NJWkVTX05PIDMyCi0KLXN0YXRpYyBjb25zdCB1X2ludCBtOHh4X3NpemVfdG9fZ3JheVtNOFhYX1NJWkVTX05PXSA9Ci17IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDQsCi0gIDB4MDAwMDAwODAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMjAsCi0gIDB4MDAwMDgwMDAsIDB4MDAwMDQwMDAsIDB4MDAwMDEwMDAsIDB4MDAwMDIwMDAsCi0gIDB4MDAwMDAxMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA0MDAsCi0KLSAgMHgwZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLSAgMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwNDAwMDAwMCwKLSAgMHgwMDAxMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDA4MDAwMCwgMHgwMDA0MDAwMCwKLSAgMHgwMDgwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDIwMDAwMCB9OwotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiAoICEgZGVmaW5lZChDT05GSUdfSTgyMzY1KSAmJiAhIGRlZmluZWQoQ09ORklHX1BYQV9QQ01DSUEpICkKLQotc3RhdGljIHVfaW50IG04eHhfZ2V0X2dyYXljb2RlKHVfaW50IHNpemUpCi17Ci0JdV9pbnQgazsKLQotCWZvciAoayA9IDA7IGsgPCBNOFhYX1NJWkVTX05POyBrKyspIHsKLQkJaWYobTh4eF9zaXplX3RvX2dyYXlba10gPT0gc2l6ZSkKLQkJCWJyZWFrOwotCX0KLQotCWlmKChrID09IE04WFhfU0laRVNfTk8pIHx8IChtOHh4X3NpemVfdG9fZ3JheVtrXSA9PSAtMSkpCi0JCWsgPSAtMTsKLQotCXJldHVybiBrOwotfQotCi0jZW5kaWYJLyogQ09ORklHX0k4MjM2NSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgMAotc3RhdGljIHVfaW50IG04eHhfZ2V0X3NwZWVkKHVfaW50IG5zLCB1X2ludCBpc19pbykKLXsKLQl1X2ludCByZWcsIGNsb2NrcywgcHNzdCwgcHNsLCBwc2h0OwotCi0JaWYoIW5zKSB7Ci0KLQkJLyoKLQkJICogV2UgZ2V0IGNhbGxlZCB3aXRoIElPIG1hcHMgc2V0dXAgdG8gMG5zCi0JCSAqIGlmIG5vdCBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCi0JCSAqIFRoZXkgc2hvdWxkIGJlIDI1NW5zLgotCQkgKi8KLQotCQlpZihpc19pbykKLQkJCW5zID0gMjU1OwotCQllbHNlCi0JCQlucyA9IDEwMDsgIC8qIGZhc3QgbWVtb3J5IGlmIDAgKi8KLQl9Ci0KLQkvKgotCSAqIEluIFBTU1QsIFBTTCwgUFNIVCBmaWVsZHMgd2UgdGVsbCB0aGUgY29udHJvbGxlcgotCSAqIHRpbWluZyBwYXJhbWV0ZXJzIGluIENMS09VVCBjbG9jayBjeWNsZXMuCi0JICogQ0xLT1VUIGlzIHRoZSBzYW1lIGFzIEdDTEsyXzUwLgotCSAqLwotCi0vKiBob3cgd2Ugd2FudCB0byBhZGp1c3QgdGhlIHRpbWluZyAtIGluIHBlcmNlbnQgKi8KLQotI2RlZmluZSBBREogMTgwIC8qIDgwICUgbG9uZ2VyIGFjY2Vzc3RpbWUgLSB0byBiZSBzdXJlICovCi0KLQljbG9ja3MgPSAoKE04WFhfQlVTRlJFUSAvIDEwMDApICogbnMpIC8gMTAwMDsKLQljbG9ja3MgPSAoY2xvY2tzICogQURKKSAvICgxMDAqMTAwMCk7Ci0KLQlpZihjbG9ja3MgPj0gUENNQ0lBX0JNVF9MSU1JVCkgewotCQlERUJVRygwLCAiTWF4IGFjY2VzcyB0aW1lIGxpbWl0IHJlYWNoZWRcbiIpOwotCQljbG9ja3MgPSBQQ01DSUFfQk1UX0xJTUlULTE7Ci0JfQotCi0JcHNzdCA9IGNsb2NrcyAvIDc7ICAgICAgICAgIC8qIHNldHVwIHRpbWUgKi8KLQlwc2h0ID0gY2xvY2tzIC8gNzsgICAgICAgICAgLyogaG9sZCB0aW1lICovCi0JcHNsICA9IChjbG9ja3MgKiA1KSAvIDc7ICAgIC8qIHN0cm9iZSBsZW5ndGggKi8KLQotCXBzc3QgKz0gY2xvY2tzIC0gKHBzc3QgKyBwc2h0ICsgcHNsKTsKLQotCXJlZyA9ICBwc3N0IDw8IDEyOwotCXJlZyB8PSBwc2wgIDw8IDc7Ci0JcmVnIHw9IHBzaHQgPDwgMTY7Ci0KLQlyZXR1cm4gcmVnOwotfQotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19JREVfOHh4X1BDQ0FSRCkgfHwgZGVmaW5lZChDT05GSUdfUFhBX1BDTUNJQSkKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmNpZCAoaW50IGZ1bmMpCi17Ci0JcHV0cyAoaW5kZW50KTsKLQlzd2l0Y2ggKGZ1bmMpIHsKLQljYXNlIENJU1RQTF9GVU5DSURfTVVMVEk6Ci0JCXB1dHMgKCIgTXVsdGktRnVuY3Rpb24iKTsKLQkJYnJlYWs7Ci0JY2FzZSBDSVNUUExfRlVOQ0lEX01FTU9SWToKLQkJcHV0cyAoIiBNZW1vcnkiKTsKLQkJYnJlYWs7Ci0JY2FzZSBDSVNUUExfRlVOQ0lEX1NFUklBTDoKLQkJcHV0cyAoIiBTZXJpYWwgUG9ydCIpOwotCQlicmVhazsKLQljYXNlIENJU1RQTF9GVU5DSURfUEFSQUxMRUw6Ci0JCXB1dHMgKCIgUGFyYWxsZWwgUG9ydCIpOwotCQlicmVhazsKLQljYXNlIENJU1RQTF9GVU5DSURfRklYRUQ6Ci0JCXB1dHMgKCIgRml4ZWQgRGlzayIpOwotCQlicmVhazsKLQljYXNlIENJU1RQTF9GVU5DSURfVklERU86Ci0JCXB1dHMgKCIgVmlkZW8gQWRhcHRlciIpOwotCQlicmVhazsKLQljYXNlIENJU1RQTF9GVU5DSURfTkVUV09SSzoKLQkJcHV0cyAoIiBOZXR3b3JrIEFkYXB0ZXIiKTsKLQkJYnJlYWs7Ci0JY2FzZSBDSVNUUExfRlVOQ0lEX0FJTVM6Ci0JCXB1dHMgKCIgQUlNUyBDYXJkIik7Ci0JCWJyZWFrOwotCWNhc2UgQ0lTVFBMX0ZVTkNJRF9TQ1NJOgotCQlwdXRzICgiIFNDU0kgQWRhcHRlciIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwdXRzICgiIFVua25vd24iKTsKLQkJYnJlYWs7Ci0JfQotCXB1dHMgKCIgQ2FyZFxuIik7Ci19Ci0jZW5kaWYJLyogQ09ORklHX0lERV84eHhfUENDQVJEICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19JREVfOHh4X1BDQ0FSRCkgfHwgZGVmaW5lZChDT05GSUdfUFhBX1BDTUNJQSkKLXN0YXRpYyB2b2lkIHByaW50X2ZpeGVkICh2b2xhdGlsZSB1Y2hhciAqcCkKLXsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlwdXRzKGluZGVudCk7Ci0KLQlzd2l0Y2ggKCpwKSB7Ci0JY2FzZSBDSVNUUExfRlVOQ0VfSURFX0lGQUNFOgotCSAgICB7ICAgdWNoYXIgaWZhY2UgPSAqKHArMik7Ci0KLQkJcHV0cyAoKGlmYWNlID09IENJU1RQTF9JREVfSU5URVJGQUNFKSA/ICIgSURFIiA6ICIgdW5rbm93biIpOwotCQlwdXRzICgiIGludGVyZmFjZSAiKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQljYXNlIENJU1RQTF9GVU5DRV9JREVfTUFTVEVSOgotCWNhc2UgQ0lTVFBMX0ZVTkNFX0lERV9TTEFWRToKLQkgICAgeyAgIHVjaGFyIGYxID0gKihwKzIpOwotCQl1Y2hhciBmMiA9ICoocCs0KTsKLQotCQlwdXRzICgoZjEgJiBDSVNUUExfSURFX1NJTElDT04pID8gIiBbc2lsaWNvbl0iIDogIiBbcm90YXRpbmddIik7Ci0KLQkJaWYgKGYxICYgQ0lTVFBMX0lERV9VTklRVUUpCi0JCQlwdXRzICgiIFt1bmlxdWVdIik7Ci0KLQkJcHV0cyAoKGYxICYgQ0lTVFBMX0lERV9EVUFMKSA/ICIgW2R1YWxdIiA6ICIgW3NpbmdsZV0iKTsKLQotCQlpZiAoZjIgJiBDSVNUUExfSURFX0hBU19TTEVFUCkKLQkJCXB1dHMgKCIgW3NsZWVwXSIpOwotCi0JCWlmIChmMiAmIENJU1RQTF9JREVfSEFTX1NUQU5EQlkpCi0JCQlwdXRzICgiIFtzdGFuZGJ5XSIpOwotCi0JCWlmIChmMiAmIENJU1RQTF9JREVfSEFTX0lETEUpCi0JCQlwdXRzICgiIFtpZGxlXSIpOwotCi0JCWlmIChmMiAmIENJU1RQTF9JREVfTE9XX1BPV0VSKQotCQkJcHV0cyAoIiBbbG93IHBvd2VyXSIpOwotCi0JCWlmIChmMiAmIENJU1RQTF9JREVfUkVHX0lOSElCSVQpCi0JCQlwdXRzICgiIFtyZWcgaW5oaWJpdF0iKTsKLQotCQlpZiAoZjIgJiBDSVNUUExfSURFX0hBU19JTkRFWCkKLQkJCXB1dHMgKCIgW2luZGV4XSIpOwotCi0JCWlmIChmMiAmIENJU1RQTF9JREVfSU9JUzE2KQotCQkJcHV0cyAoIiBbSU9pczE2XSIpOwotCi0JCWJyZWFrOwotCSAgICB9Ci0JfQotCXB1dGMgKCdcbicpOwotfQotI2VuZGlmCS8qIENPTkZJR19JREVfOHh4X1BDQ0FSRCAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfSURFXzh4eF9QQ0NBUkQpIHx8IGRlZmluZWQoQ09ORklHX1BYQV9QQ01DSUEpCi0KLSNkZWZpbmUgTUFYX0lERU5UX0NIQVJTCQk2NAotI2RlZmluZQlNQVhfSURFTlRfRklFTERTCTQKLQotc3RhdGljIHVjaGFyICprbm93bl9jYXJkc1tdID0gewotCSh1Y2hhciAqKSJBUkdPU1kgUG5QSURFIEQ1IiwKLQlOVUxMCi19OwotCi1zdGF0aWMgaW50IGlkZW50aWZ5ICAodm9sYXRpbGUgdWNoYXIgKnApCi17Ci0JdWNoYXIgaWRfc3RyW01BWF9JREVOVF9DSEFSU107Ci0JdWNoYXIgZGF0YTsKLQl1Y2hhciAqdDsKLQl1Y2hhciAqKmNhcmQ7Ci0JaW50IGksIGRvbmU7Ci0KLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gKDApOwkvKiBEb24ndCBrbm93ICovCi0KLQl0ID0gaWRfc3RyOwotCWRvbmUgPTA7Ci0KLQlmb3IgKGk9MDsgaTw9NCAmJiAhZG9uZTsgKytpLCBwKz0yKSB7Ci0JCXdoaWxlICgoZGF0YSA9ICpwKSAhPSAnXDAnKSB7Ci0JCQlpZiAoZGF0YSA9PSAweEZGKSB7Ci0JCQkJZG9uZSA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkqdCsrID0gZGF0YTsKLQkJCWlmICh0ID09ICZpZF9zdHJbTUFYX0lERU5UX0NIQVJTLTFdKSB7Ci0JCQkJZG9uZSA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlwICs9IDI7Ci0JCX0KLQkJaWYgKCFkb25lKQotCQkJKnQrKyA9ICcgJzsKLQl9Ci0JKnQgPSAnXDAnOwotCXdoaWxlICgtLXQgPiBpZF9zdHIpIHsKLQkJaWYgKCp0ID09ICcgJykKLQkJCSp0ID0gJ1wwJzsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JfQotCXB1dHMgKChjaGFyICopaWRfc3RyKTsKLQlwdXRjICgnXG4nKTsKLQotCWZvciAoY2FyZD1rbm93bl9jYXJkczsgKmNhcmQ7ICsrY2FyZCkgewotCQlkZWJ1ZyAoIiMjIENvbXBhcmUgYWdhaW5zdCBcIiVzXCJcbiIsICpjYXJkKTsKLQkJaWYgKHN0cmNtcCgoY2hhciAqKSpjYXJkLCAoY2hhciAqKWlkX3N0cikgPT0gMCkgewkvKiBmb3VuZCEgKi8KLQkJCWRlYnVnICgiIyMgQ0FSRCBGT1VORCAjI1xuIik7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCi0JcmV0dXJuICgwKTsJLyogZG9uJ3Qga25vdyAqLwotfQotI2VuZGlmCS8qIENPTkZJR19JREVfOHh4X1BDQ0FSRCAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogTkVUVEEgYm9hcmQgYnkgSW50cmFjb20gUy5BLgkJCQkJCSovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfTkVUVEEpCi0KLS8qIHNvbWUgc2FuZSBiaXQgbWFjcm9zICovCi0jZGVmaW5lIF9CRChfYikJCQkJKDFVIDw8ICgzMS0oX2IpKSkKLSNkZWZpbmUgX0JEUihfbCwgX2gpCQkJKCgoKCgxVSA8PCAoMzEtKF9sKSkpIC0gMSkgPDwgMSkgfCAxKSAmIH4oKDFVIDw8ICgzMS0oX2gpKSkgLSAxKSkKLQotI2RlZmluZSBfQlcoX2IpCQkJCSgxVSA8PCAoMTUtKF9iKSkpCi0jZGVmaW5lIF9CV1IoX2wsIF9oKQkJCSgoKCgoMVUgPDwgKDE1LShfbCkpKSAtIDEpIDw8IDEpIHwgMSkgJiB+KCgxVSA8PCAoMTUtKF9oKSkpIC0gMSkpCi0KLSNkZWZpbmUgX0JCKF9iKQkJCQkoMVUgPDwgKDctKF9iKSkpCi0jZGVmaW5lIF9CQlIoX2wsIF9oKQkJCSgoKCgoMVUgPDwgKDctKF9sKSkpIC0gMSkgPDwgMSkgfCAxKSAmIH4oKDFVIDw8ICg3LShfaCkpKSAtIDEpKQotCi0jZGVmaW5lIF9CKF9iKQkJCQlfQkQoX2IpCi0jZGVmaW5lIF9CUihfbCwgX2gpCQkJX0JEUihfbCwgX2gpCi0KLSNkZWZpbmUgUENNQ0lBX0JPQVJEX01TRyAiTkVUVEEiCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB2cHBkX21hc2tzWzJdID0geyBfQlcoMTQpLCBfQlcoMTUpIH07Ci0KLXN0YXRpYyB2b2lkIGNmZ192cHBkKGludCBubykKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JdW5zaWduZWQgc2hvcnQgbWFzazsKLQotCWlmICgodW5zaWduZWQgaW50KW5vID49IHNpemVvZih2cHBkX21hc2tzKS9zaXplb2YodnBwZF9tYXNrc1swXSkpCi0JCXJldHVybjsKLQotCW1hc2sgPSB2cHBkX21hc2tzW25vXTsKLQotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyICY9IH5tYXNrOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3Bhb2RyICY9IH5tYXNrOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyIHw9ICBtYXNrOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfdnBwZChpbnQgbm8sIGludCB3aGF0KQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl1bnNpZ25lZCBzaG9ydCBtYXNrOwotCi0JaWYgKCh1bnNpZ25lZCBpbnQpbm8gPj0gc2l6ZW9mKHZwcGRfbWFza3MpL3NpemVvZih2cHBkX21hc2tzWzBdKSkKLQkJcmV0dXJuOwotCi0JbWFzayA9IHZwcGRfbWFza3Nbbm9dOwotCi0JaWYgKHdoYXQpCi0JCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0IHw9IG1hc2s7Ci0JZWxzZQotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRhdCAmPSB+bWFzazsKLX0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHZjY2RfbWFza3NbMl0gPSB7IF9CVygxMCksIF9CVyg2KSB9OwotCi1zdGF0aWMgdm9pZCBjZmdfdmNjZChpbnQgbm8pCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXVuc2lnbmVkIHNob3J0IG1hc2s7Ci0KLQlpZiAoKHVuc2lnbmVkIGludClubyA+PSBzaXplb2YodmNjZF9tYXNrcykvc2l6ZW9mKHZjY2RfbWFza3NbMF0pKQotCQlyZXR1cm47Ci0KLQltYXNrID0gdmNjZF9tYXNrc1tub107Ci0KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYXBhciAmPSB+bWFzazsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYW9kciAmPSB+bWFzazsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciB8PSAgbWFzazsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3ZjY2QoaW50IG5vLCBpbnQgd2hhdCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JdW5zaWduZWQgc2hvcnQgbWFzazsKLQotCWlmICgodW5zaWduZWQgaW50KW5vID49IHNpemVvZih2Y2NkX21hc2tzKS9zaXplb2YodmNjZF9tYXNrc1swXSkpCi0JCXJldHVybjsKLQotCW1hc2sgPSB2Y2NkX21hc2tzW25vXTsKLQotCWlmICh3aGF0KQotCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRhdCB8PSBtYXNrOwotCWVsc2UKLQkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgJj0gfm1hc2s7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBvY19tYXNrID0gX0JXKDgpOwotCi1zdGF0aWMgdm9pZCBjZmdfb2Modm9pZCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JdW5zaWduZWQgc2hvcnQgbWFzayA9IG9jX21hc2s7Ci0KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RpciAmPSB+bWFzazsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3NvICAmPSB+bWFzazsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2ludCAmPSB+bWFzazsKLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3BhciAmPSB+bWFzazsKLX0KLQotc3RhdGljIGludCBnZXRfb2Modm9pZCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JdW5zaWduZWQgc2hvcnQgbWFzayA9IG9jX21hc2s7Ci0JaW50IHdoYXQ7Ci0KLQl3aGF0ID0gISEoaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgJiBtYXNrKTs7Ci0JcmV0dXJuIHdoYXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzaGRuX21hc2sgPSBfQlcoMTIpOwotCi1zdGF0aWMgdm9pZCBjZmdfc2hkbih2b2lkKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl1bnNpZ25lZCBzaG9ydCBtYXNrOwotCi0JbWFzayA9IHNoZG5fbWFzazsKLQotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyICY9IH5tYXNrOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3Bhb2RyICY9IH5tYXNrOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyIHw9ICBtYXNrOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfc2hkbihpbnQgd2hhdCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JdW5zaWduZWQgc2hvcnQgbWFzazsKLQotCW1hc2sgPSBzaGRuX21hc2s7Ci0KLQlpZiAod2hhdCkKLQkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgfD0gbWFzazsKLQllbHNlCi0JCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0ICY9IH5tYXNrOwotfQotCi1zdGF0aWMgdm9pZCBjZmdfcG9ydHMgKHZvaWQpOwotCi1zdGF0aWMgaW50IGhhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKLQl2b2xhdGlsZSBjcG04eHhfdAkqY3A7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXZvbGF0aWxlIHN5c2NvbmY4eHhfdAkqc3lzcDsKLQl1aW50IHJlZywgcGlwciwgbWFzazsKLQlpbnQgaTsKLQotCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7Ci0KLQl1ZGVsYXkoMTAwMDApOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXN5c3AgID0gKHN5c2NvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fc2l1X2NvbmYpKTsKLQlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKLQotCS8qIENvbmZpZ3VyZSBQb3J0cyBmb3IgVFBTMjIxMUEgUEMtQ2FyZCBQb3dlci1JbnRlcmZhY2UgU3dpdGNoICovCi0JY2ZnX3BvcnRzICgpOwotCi0JLyogY2xlYXIgaW50ZXJydXB0IHN0YXRlLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JcGNtcC0+cGNtY19wc2NyID0gIFBDTUNJQV9NQVNLKF9zbG90Xyk7Ci0JcGNtcC0+cGNtY19wZXIgJj0gflBDTUNJQV9NQVNLKF9zbG90Xyk7Ci0KLQkvKgotCSAqIERpc2FibGUgaW50ZXJydXB0cywgRE1BLCBhbmQgUENNQ0lBIGJ1ZmZlcnMKLQkgKiAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKSBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAotCSAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gMDsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCi0JdWRlbGF5KDUwMCk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIGNhcmQgaW4gdGhlIHNsb3QsIHRoZW4gY29uZmlndXJlIHRoZSBpbnRlcmZhY2UuCi0JICovCi0JdWRlbGF5KDEwMDAwKTsKLQlkZWJ1ZyAoIlslZF0gJXM6IFBJUFIoJXApPTB4JXhcbiIsCi0JCV9fTElORV9fLF9fRlVOQ1RJT05fXywKLQkJJihwY21wLT5wY21jX3BpcHIpLHBjbXAtPnBjbWNfcGlwcik7Ci0JaWYgKHBjbXAtPnBjbWNfcGlwciAmICgweDE4MDAwMDAwID4+IChzbG90IDw8IDQpKSkgewotCQlwcmludGYgKCIgICBObyBDYXJkIGZvdW5kXG4iKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQkvKgotCSAqIFBvd2VyIE9uOiBTZXQgVkFWQ0MgdG8gMy4zViBvciA1Viwgc2V0IFZBVlBQIHRvIEhpLVoKLQkgKi8KLQltYXNrID0gUENNQ0lBX1ZTMShzbG90KSB8IFBDTUNJQV9WUzIoc2xvdCk7Ci0JcGlwciA9IHBjbXAtPnBjbWNfcGlwcjsKLQlkZWJ1ZyAoIlBJUFI6IDB4JXggPT0+IFZTMT1vJXMsIFZTMj1vJXNcbiIsCi0JCXBpcHIsCi0JCShyZWcmUENNQ0lBX1ZTMShzbG90KSk/Im4iOiJmZiIsCi0JCShyZWcmUENNQ0lBX1ZTMihzbG90KSk/Im4iOiJmZiIpOwotCi0JaWYgKChwaXByICYgbWFzaykgPT0gbWFzaykgewotCQlzZXRfdnBwZCgwLCAxKTsgc2V0X3ZwcGQoMSwgMSk7IAkJLyogVkFWUFAgPT4gSGktWiAqLwotCQlzZXRfdmNjZCgwLCAwKTsgc2V0X3ZjY2QoMSwgMSk7IAkJLyogNVYgb24sIDNWIG9mZiAqLwotCQlwdXRzICgiIDUuMFYgY2FyZCBmb3VuZDogIik7Ci0JfSBlbHNlIHsKLQkJc2V0X3ZwcGQoMCwgMSk7IHNldF92cHBkKDEsIDEpOyAJCS8qIFZBVlBQID0+IEhpLVogKi8KLQkJc2V0X3ZjY2QoMCwgMSk7IHNldF92Y2NkKDEsIDApOyAJCS8qIDVWIG9mZiwgM1Ygb24gKi8KLQkJcHV0cyAoIiAzLjNWIGNhcmQgZm91bmQ6ICIpOwotCX0KLQotCS8qICBXYWl0IDUwMCBtczsgdXNlIHRoaXMgdG8gY2hlY2sgZm9yIG92ZXItY3VycmVudCAqLwotCWZvciAoaT0wOyBpPDUwMDA7ICsraSkgewotCQlpZiAoIWdldF9vYygpKSB7Ci0JCQlwcmludGYgKCIgICAqKiogT3ZlcmN1cnJlbnQgLSBTYWZldHkgc2h1dGRvd24gKioqXG4iKTsKLQkJCXNldF92Y2NkKDAsIDApOyBzZXRfdmNjZCgxLCAwKTsgCQkvKiBWQVZQUCA9PiBIaS1aICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCXVkZWxheSAoMTAwKTsKLQl9Ci0KLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnICA9ICBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0KLQl1ZGVsYXkoMjUwMDAwKTsJLyogc29tZSBjYXJkcyBuZWVkID4xNTAgbXMgdG8gY29tZSB1cCA6LSggKi8KLQotCWRlYnVnICgiIyBoYXJkd2FyZV9lbmFibGUgZG9uZVxuIik7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCi1zdGF0aWMgaW50IGhhcmR3YXJlX2Rpc2FibGUoaW50IHNsb3QpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXVfbG9uZyByZWc7Ci0KLQlkZWJ1ZyAoImhhcmR3YXJlX2Rpc2FibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCi0JLyogQ29uZmlndXJlIFBDTUNJQSBHZW5lcmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7Ci0JcmVnICA9IDA7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQotCS8qIEFsbCB2b2x0YWdlcyBvZmYgLyBIaS1aICovCi0JCQlzZXRfdnBwZCgwLCAxKTsgc2V0X3ZwcGQoMSwgMSk7Ci0Jc2V0X3ZjY2QoMCwgMSk7IHNldF92Y2NkKDEsIDEpOwotCi0JdWRlbGF5KDEwMDAwKTsKLQotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KLQotCi1zdGF0aWMgaW50IHZvbHRhZ2Vfc2V0KGludCBzbG90LCBpbnQgdmNjLCBpbnQgdnBwKQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0JdV9sb25nIHJlZzsKLQl1c2hvcnQgc3JlZzsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIKLQkJUENNQ0lBX0JPQVJEX01TRwotCQkiIFNsb3QgJWMsIFZjYz0lZC4lZCwgVnBwPSVkLiVkXG4iLAotCQknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQljcCAgICA9IChjcG04eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fY3BtKSk7Ci0JcGNtcCAgPSAocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKLQkvKgotCSAqIERpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgKGlzb2xhdGUgdGhlIGludGVyZmFjZSkKLQkgKiBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAotCSAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gUENNQ0lBX1BHQ1JYKF9zbG90Xyk7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCS8qCi0JICogQ29uZmlndXJlIFBvcnQgQyBwaW5zIGZvcgotCSAqIDUgVm9sdHMgRW5hYmxlIGFuZCAzIFZvbHRzIGVuYWJsZSwKLQkgKiBUdXJuIGFsbCBwb3dlciBwaW5zIHRvIEhpLVoKLQkgKi8KLQlkZWJ1ZyAoIlBDTUNJQSBwb3dlciBPRkZcbiIpOwotCWNmZ19wb3J0cyAoKTsJLyogRW5hYmxlcyBzd2l0Y2gsIGJ1dCBhbGwgaW4gSGktWiAqLwotCi0Jc3JlZyAgPSBpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdDsKLQlzZXRfdnBwZCgwLCAxKTsgc2V0X3ZwcGQoMSwgMSk7Ci0KLQlzd2l0Y2godmNjKSB7Ci0JY2FzZSAgMDoKLQkJYnJlYWs7CS8qIFN3aXRjaCBvZmYJCSovCi0KLQljYXNlIDMzOgotCQlzZXRfdmNjZCgwLCAxKTsgc2V0X3ZjY2QoMSwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSA1MDoKLQkJc2V0X3ZjY2QoMCwgMCk7IHNldF92Y2NkKDEsIDEpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQkvKiBDaGVja2luZyBzdXBwb3J0ZWQgdm9sdGFnZXMgKi8KLQotCWRlYnVnICgiUElQUjogMHgleCAtLT4gJXNcbiIsCi0JCXBjbXAtPnBjbWNfcGlwciwKLQkJKHBjbXAtPnBjbWNfcGlwciAmIDB4MDAwMDgwMDApID8gIm9ubHkgNSBWIiA6ICJjYW4gZG8gMy4zViIpOwotCi1kb25lOgotCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKLQlyZWcgID0gIFBDTUNJQV9QR0NSWChfc2xvdF8pOwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQl1ZGVsYXkoNTAwKTsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWMsIERPTkVcbiIsCi0JCXNsb3QrJ0EnKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZCBjZmdfcG9ydHMgKHZvaWQpCi17Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7Ci0Jdm9sYXRpbGUgY3BtOHh4X3QJKmNwOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKLQotCi0JY2ZnX3ZwcGQoMCk7IGNmZ192cHBkKDEpOwkvKiBWUFBEMCxWUFBEMSBWQVZQUCA9PiBIaS1aICovCi0JY2ZnX3ZjY2QoMCk7IGNmZ192Y2NkKDEpOwkvKiAzViBhbmQgNVYgb2ZmICovCi0JY2ZnX3NoZG4oKTsKLQljZmdfb2MoKTsKLQotCS8qCi0JICogQ29uZmlndXJlIFBvcnQgQSBmb3IgVFBTMjIxMSBQQy1DYXJkIFBvd2VyLUludGVyZmFjZSBTd2l0Y2gKLQkgKgotCSAqIFN3aXRjaCBvZmYgYWxsIHZvbHRhZ2VzLCBhc3NlcnQgc2h1dGRvd24KLQkgKi8KLQlzZXRfdnBwZCgwLCAxKTsgc2V0X3ZwcGQoMSwgMSk7Ci0Jc2V0X3ZjY2QoMCwgMCk7IHNldF92Y2NkKDEsIDApOwotCXNldF9zaGRuKDEpOwotCi0JdWRlbGF5KDEwMDAwMCk7Ci19Ci0KLSNlbmRpZgkvKiBORVRUQSAqLwotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBVQzEwMCBCb2FyZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfVUMxMDApCi0KLSNkZWZpbmUgUENNQ0lBX0JPQVJEX01TRyAiVUMxMDAiCi0KLS8qCi0gKiBSZW1hcms6IGRvbid0IHR1cm4gb2ZmIE9FICJfX01ZX1BDTUNJQV9HQ1JYX0NYT0UiIG9uIFVDMTAwIGJvYXJkLgotICogICAgICAgICBUaGlzIGxlYWRzIHRvIGJvYXJkLWhhbmd1cCEgKHNyLCA4IERlei4gMjAwNCkKLSAqLwotCi1zdGF0aWMgdm9pZCBjZmdfcG9ydHMgKHZvaWQpOwotCi1zdGF0aWMgaW50IGhhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKLQl2b2xhdGlsZSBjcG04eHhfdAkqY3A7Ci0Jdm9sYXRpbGUgcGNtY29uZjh4eF90CSpwY21wOwotCXZvbGF0aWxlIHN5c2NvbmY4eHhfdAkqc3lzcDsKLQl1aW50IHJlZywgbWFzazsKLQotCWRlYnVnICgiaGFyZHdhcmVfZW5hYmxlOiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjXG4iLCAnQScrc2xvdCk7Ci0KLQl1ZGVsYXkoMTAwMDApOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXN5c3AgID0gKHN5c2NvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fc2l1X2NvbmYpKTsKLQlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCWNwICAgID0gKGNwbTh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9jcG0pKTsKLQotCS8qIENvbmZpZ3VyZSBQb3J0cyBmb3IgVFBTMjIxMUEgUEMtQ2FyZCBQb3dlci1JbnRlcmZhY2UgU3dpdGNoICovCi0JY2ZnX3BvcnRzICgpOwotCi0JLyoKLQkgKiBDb25maWd1cmUgU0lVTUNSIHRvIGVuYWJsZSBQQ01DSUEgcG9ydCBCCi0JICogKFZGTFNbMDoxXSBhcmUgbm90IHVzZWQgZm9yIGRlYnVnZ2luZywgd2UgY29ubmVjdCBGUlojIGluc3RlYWQpCi0JICovCi0Jc3lzcC0+c2Nfc2l1bWNyICY9IH5TSVVNQ1JfREJHQzExOwkvKiBzZXQgREJHQyB0byAwMCAqLwotCi0JLyogY2xlYXIgaW50ZXJydXB0IHN0YXRlLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JcGNtcC0+cGNtY19wc2NyID0gIFBDTUNJQV9NQVNLKF9zbG90Xyk7Ci0JcGNtcC0+cGNtY19wZXIgJj0gflBDTUNJQV9NQVNLKF9zbG90Xyk7Ci0KLQkvKgotCSAqIERpc2FibGUgaW50ZXJydXB0cywgRE1BLCBhbmQgUENNQ0lBIGJ1ZmZlcnMKLQkgKiAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKSBhbmQgYXNzZXJ0IFJFU0VUIHNpZ25hbAotCSAqLwotCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKLQlyZWcgID0gMDsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCXVkZWxheSg1MDApOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBjYXJkIGluIHRoZSBzbG90LCB0aGVuIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlLgotCSAqLwotCXVkZWxheSgxMDAwMCk7Ci0JZGVidWcgKCJbJWRdICVzOiBQSVBSKCVwKT0weCV4XG4iLAotCQlfX0xJTkVfXyxfX0ZVTkNUSU9OX18sCi0JCSYocGNtcC0+cGNtY19waXByKSxwY21wLT5wY21jX3BpcHIpOwotCWlmIChwY21wLT5wY21jX3BpcHIgJiAoMHgxODAwMDAwMCA+PiAoc2xvdCA8PCA0KSkpIHsKLQkJcHJpbnRmICgiICAgTm8gQ2FyZCBmb3VuZFxuIik7Ci0JCXJldHVybiAoMSk7Ci0JfQotCi0JLyoKLQkgKiBQb3dlciBPbi4KLQkgKi8KLQltYXNrID0gUENNQ0lBX1ZTMShzbG90KSB8IFBDTUNJQV9WUzIoc2xvdCk7Ci0JcmVnICA9IHBjbXAtPnBjbWNfcGlwcjsKLQlkZWJ1ZyAoIlBJUFI6IDB4JXggPT0+IFZTMT1vJXMsIFZTMj1vJXNcbiIsCi0JCXJlZywKLQkJKHJlZyZQQ01DSUFfVlMxKHNsb3QpKT8ibiI6ImZmIiwKLQkJKHJlZyZQQ01DSUFfVlMyKHNsb3QpKT8ibiI6ImZmIik7Ci0JaWYgKChyZWcgJiBtYXNrKSA9PSBtYXNrKSB7Ci0JCXB1dHMgKCIgNS4wViBjYXJkIGZvdW5kOiAiKTsKLQl9IGVsc2UgewotCQlwdXRzICgiIDMuM1YgY2FyZCBmb3VuZDogIik7Ci0JfQotCi0JLyogIHN3aXRjaCBWQ0Mgb24gKi8KLQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRhdCB8PSAweDgwMDA7IC8qIHBvd2VyIGVuYWJsZSAzLjNWICovCi0KLQl1ZGVsYXkoMTAwMDApOwotCi0JZGVidWcgKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOwotCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKF9zbG90Xyk7Ci0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYUkVTRVQ7CS8qIGFjdGl2ZSBoaWdoICovCi0JcmVnICY9IH5fX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCi0JdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCi0KLQlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOwotCi0JcmV0dXJuICgwKTsKLX0KLQotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCXZvbGF0aWxlIGNwbTh4eF90CSpjcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0JdV9sb25nIHJlZzsKLQotCWRlYnVnICgiaGFyZHdhcmVfZGlzYWJsZTogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlY1xuIiwgJ0EnK3Nsb3QpOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXBjbXAgID0gKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7Ci0KLQkvKiBzd2l0Y2ggVkNDIG9mZiAqLwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0ICY9IH4weDgwMDA7IC8qIHBvd2VyIGRpc2FibGUgMy4zViAqLwotCi0JLyogQ29uZmlndXJlIFBDTUNJQSBHZW5lcmFsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7Ci0JcmVnICA9IDA7Ci0JcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IHJlZzsKLQotCXVkZWxheSgxMDAwMCk7Ci0KLQlyZXR1cm4gKDApOwotfQotI2VuZGlmCS8qIENGR19DTURfUENNQ0lBICovCi0KLQotc3RhdGljIGludCB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKLXsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKLQl2b2xhdGlsZSBwY21jb25mOHh4X3QJKnBjbXA7Ci0JdV9sb25nIHJlZzsKLQotCWRlYnVnICgidm9sdGFnZV9zZXQ6ICIKLQkJUENNQ0lBX0JPQVJEX01TRwotCQkiIFNsb3QgJWMsIFZjYz0lZC4lZCwgVnBwPSVkLiVkXG4iLAotCQknQScrc2xvdCwgdmNjLzEwLCB2Y2MlMTAsIHZwcC8xMCwgdmNjJTEwKTsKLQotCWltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQlwY21wICA9IChwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOwotCS8qCi0JICogRGlzYWJsZSBQQ01DSUEgYnVmZmVycyAoaXNvbGF0ZSB0aGUgaW50ZXJmYWNlKQotCSAqIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCi0JICovCi0JZGVidWcgKCJEaXNhYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBhc3NlcnQgUkVTRVRcbiIpOwotCXJlZyAgPSBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKLQlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLwotCVBDTUNJQV9QR0NSWChfc2xvdF8pID0gcmVnOwotCXVkZWxheSg1MDApOwotCi0JLyoKLQkgKiBDb25maWd1cmUgUG9ydCBDIHBpbnMgZm9yCi0JICogNSBWb2x0cyBFbmFibGUgYW5kIDMgVm9sdHMgZW5hYmxlLAotCSAqIFR1cm4gYWxsIHBvd2VyIHBpbnMgdG8gSGktWgotCSAqLwotCWRlYnVnICgiUENNQ0lBIHBvd2VyIE9GRlxuIik7Ci0JY2ZnX3BvcnRzICgpOwkvKiBFbmFibGVzIHN3aXRjaCwgYnV0IGFsbCBpbiBIaS1aICovCi0KLQlkZWJ1ZyAoIkVuYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgc3RvcCBSRVNFVFxuIik7Ci0JcmVnICA9ICBQQ01DSUFfUEdDUlgoX3Nsb3RfKTsKLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KLQlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsJCS8qIGFjdGl2ZSBsb3cgICovCi0JUENNQ0lBX1BHQ1JYKF9zbG90XykgPSByZWc7Ci0JdWRlbGF5KDUwMCk7Ci0KLQlkZWJ1ZyAoInZvbHRhZ2Vfc2V0OiAiIFBDTUNJQV9CT0FSRF9NU0cgIiBTbG90ICVjLCBET05FXG4iLAotCQlzbG90KydBJyk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQgY2ZnX3BvcnRzICh2b2lkKQotewotCXZvbGF0aWxlIGltbWFwX3QJKmltbWFwOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCi0JLyoKLQkgKiBDb25maWd1cmUgUG9ydCBBIGZvciBNQVgxNjAyIFBDLUNhcmQgUG93ZXItSW50ZXJmYWNlIFN3aXRjaAotCSAqLwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0ICY9IH4weDgwMDA7CS8qIHNldCBwb3J0IHggb3V0cHV0IHRvIGxvdyAqLwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyIHw9IDB4ODAwMDsJLyogZW5hYmxlIHBvcnQgeCBhcyBvdXRwdXQgKi8KLQotCWRlYnVnICgiU2V0IFBvcnQgQTogUEFSOiAlMDh4IERJUjogJTA4eCBEQVQ6ICUwOHhcbiIsCi0JICAgICAgIGltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyLCBpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciwKLQkgICAgICAgaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQpOwotfQotCi0jZW5kaWYJLyogVUMxMDAgKi8KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZW5kaWYgLyogQ0ZHX0NNRF9QQ01DSUEgfHwgKENGR19DTURfSURFICYmIENPTkZJR19JREVfOHh4X1BDQ0FSRCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQotVV9CT09UX0NNRCgKLQlwaW5pdCwJMiwJMSwJZG9fcGluaXQsCi0JInBpbml0ICAgLSBQQ01DSUEgc3ViLXN5c3RlbVxuIiwKLQkib24gIC0gcG93ZXIgb24gUENNQ0lBIHNvY2tldFxuIgotCSJwaW5pdCBvZmYgLSBwb3dlciBvZmYgUENNQ0lBIHNvY2tldFxuIgotKTsKLSNlbmRpZgorI2VuZGlmCS8qIENIRUNLX0lERV9ERVZJQ0UgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfcmVnaW5mby5jIGIvY29tbW9uL2NtZF9yZWdpbmZvLmMKaW5kZXggMTVhYzE2YS4uZjQyOGY3ZSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9yZWdpbmZvLmMKKysrIGIvY29tbW9uL2NtZF9yZWdpbmZvLmMKQEAgLTMyOCw3ICszMjgsNyBAQAogCQkoKih2b2xhdGlsZSB1bG9uZyopTVBDNVhYWF9BRERFQ1IgJiAweDAyMDAwMDAwKSA/IDEgOiAwKTsKIAlwcmludGYgKCJcdFNEUkFNQ1MwOiAlMDhYXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX1NEUkFNX0NTMENGRyk7Ci0JcHJpbnRmICgiXHRTRFJBTUNTMDogJTA4WFxuIiwKKwlwcmludGYgKCJcdFNEUkFNQ1MxOiAlMDhYXG4iLAogCQkqKHZvbGF0aWxlIHVsb25nKilNUEM1WFhYX1NEUkFNX0NTMUNGRyk7CiAjZW5kaWYgLyogQ09ORklHX01QQzUyMDAgKi8KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfc2NzaS5jIGIvY29tbW9uL2NtZF9zY3NpLmMKaW5kZXggZTgwNDg2MS4uY2MwODc0MyAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9zY3NpLmMKKysrIGIvY29tbW9uL2NtZF9zY3NpLmMKQEAgLTQzLDggKzQzLDEzIEBACiAjZWxzZQogI2RlZmluZSBTQ1NJX0RFVl9JRAkJQ09ORklHX1NDU0lfREVWX0lECiAjZW5kaWYKKyNlbGlmIGRlZmluZWQgQ09ORklHX1NBVEFfVUxJNTI4OAorCisjZGVmaW5lIFNDU0lfVkVORF9JRCAweDEwYjkKKyNkZWZpbmUgU0NTSV9ERVZfSUQgIDB4NTI4OAorCiAjZWxzZQotI2Vycm9yIENPTkZJR19TQ1NJX1NZTTUzQzhYWCBtdXN0IGJlIGRlZmluZWQKKyNlcnJvciBubyBzY3NpIGRldmljZSBkZWZpbmVkCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9jb21tb24vY21kX3VzYi5jIGIvY29tbW9uL2NtZF91c2IuYwppbmRleCBmZGZkMDQyLi4yOGMwNWFhIDEwMDY0NAotLS0gYS9jb21tb24vY21kX3VzYi5jCisrKyBiL2NvbW1vbi9jbWRfdXNiLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogdm9pZCB1c2JfZGlzcGxheV9pZl9kZXNjKHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmlmZGVzYyxzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewogCXByaW50ZigiICAgICBJbnRlcmZhY2U6ICVkXG4iLGlmZGVzYy0+YkludGVyZmFjZU51bWJlcik7Ci0JcHJpbnRmKCIgICAgIC0gQWx0ZXJuYXRlIFNldHRpbmdzICVkLCBFbmRwb2ludHM6ICVkXG4iLGlmZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcsaWZkZXNjLT5iTnVtRW5kcG9pbnRzKTsKKwlwcmludGYoIiAgICAgLSBBbHRlcm5hdGUgU2V0dGluZyAlZCwgRW5kcG9pbnRzOiAlZFxuIixpZmRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nLGlmZGVzYy0+Yk51bUVuZHBvaW50cyk7CiAJcHJpbnRmKCIgICAgIC0gQ2xhc3MgIik7CiAJdXNiX2Rpc3BsYXlfY2xhc3Nfc3ViKGlmZGVzYy0+YkludGVyZmFjZUNsYXNzLGlmZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzLGlmZGVzYy0+YkludGVyZmFjZVByb3RvY29sKTsKIAlwcmludGYoIlxuIik7CkBAIC00NDQsNiArNDQ0LDcgQEAKIAogCWludCBpOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBOVUxMOworCWV4dGVybiBjaGFyIHVzYl9zdGFydGVkOwogI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRQogCWJsb2NrX2Rldl9kZXNjX3QgKnN0b3JfZGV2OwogI2VuZGlmCkBAIC00NzcsNiArNDc4LDEwIEBACiAJCXVzYl9zdG9wKCk7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXVzYl9zdGFydGVkKSB7CisJCXByaW50ZigiVVNCIGlzIHN0b3BwZWQuIFBsZWFzZSBpc3N1ZSAndXNiIHN0YXJ0JyBmaXJzdC5cbiIpOworCQlyZXR1cm4gMTsKKwl9CiAJaWYgKHN0cm5jbXAoYXJndlsxXSwidHJlZSIsNCkgPT0gMCkgewogCQlwcmludGYoIlxuRGV2aWNlIFRyZWU6XG4iKTsKIAkJdXNiX3Nob3dfdHJlZSh1c2JfZ2V0X2Rldl9pbmRleCgwKSk7CmRpZmYgLS1naXQgYS9jb21tb24vY3JjMTYuYyBiL2NvbW1vbi9jcmMxNi5jCmluZGV4IDNjZWYxMDYuLjY5MDQzNjUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jcmMxNi5jCisrKyBiL2NvbW1vbi9jcmMxNi5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogICAgIGNrc3VtID0gMDsKICAgICBmb3IgKGkgPSAwOyAgaSA8IGxlbjsgIGkrKykgewotICAgICAgICBja3N1bSA9IGNyYzE2X3RhYlsoKGNrc3VtPj44KSBeICpidWYrKykgJiAweEZGXSBeIChja3N1bSA8PCA4KTsKKwlja3N1bSA9IGNyYzE2X3RhYlsoKGNrc3VtPj44KSBeICpidWYrKykgJiAweEZGXSBeIChja3N1bSA8PCA4KTsKICAgICB9CiAgICAgcmV0dXJuIGNrc3VtOwogfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9uYW5kLmMgYi9jb21tb24vZW52X25hbmQuYwppbmRleCAwYTA1YjA5Li42N2M0YTRlIDEwMDY0NAotLS0gYS9jb21tb24vZW52X25hbmQuYworKysgYi9jb21tb24vZW52X25hbmQuYwpAQCAtMiw3ICsyLDcgQEAKICAqIChDKSBDb3B5cmlnaHQgMjAwNAogICogSmlhbiBaaGFuZywgVGV4YXMgSW5zdHJ1bWVudHMsIGp6aGFuZ0B0aS5jb20uCiAKLSAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICAqCiAgKiAoQykgQ29weXJpZ2h0IDIwMDEgU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CkBAIC03Niw3ICs3Niw5IEBACiAKIAogLyogbG9jYWwgZnVuY3Rpb25zICovCisjaWYgIWRlZmluZWQoRU5WX0lTX0VNQkVEREVEKQogc3RhdGljIHZvaWQgdXNlX2RlZmF1bHQodm9pZCk7CisjZW5kaWYKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKQEAgLTkxLDExICs5Myw1NSBAQAogICogTWFyayBpdCBPSyBmb3Igbm93LiBlbnZfcmVsb2NhdGUoKSBpbiBlbnZfY29tbW9uLmMKICAqIHdpbGwgY2FsbCBvdXIgcmVsb2NhdGUgZnVuY3Rpb24gd2hpY2ggd2lsbCBkb2VzCiAgKiB0aGUgcmVhbCB2YWxpZGF0aW9uLgorICoKKyAqIFdoZW4gdXNpbmcgYSBOQU5EIGJvb3QgaW1hZ2UgKGxpa2Ugc2VxdW9pYV9uYW5kKSwgdGhlIGVudmlyb25tZW50CisgKiBjYW4gYmUgZW1iZWRkZWQgb3IgYXR0YWNoZWQgdG8gdGhlIFUtQm9vdCBpbWFnZSBpbiBOQU5EIGZsYXNoLiBUaGlzIHdheQorICogdGhlIFNQTCBsb2FkcyBub3Qgb25seSB0aGUgVS1Cb290IGltYWdlIGZyb20gTkFORCBidXQgYWxzbyB0aGUKKyAqIGVudmlyb25tZW50LgogICovCiBpbnQgZW52X2luaXQodm9pZCkKIHsKKyNpZiBkZWZpbmVkKEVOVl9JU19FTUJFRERFRCkKKwl1bG9uZyB0b3RhbDsKKwlpbnQgY3JjMV9vayA9IDAsIGNyYzJfb2sgPSAwOworCWVudl90ICp0bXBfZW52MSwgKnRtcF9lbnYyOworCisJdG90YWwgPSBDRkdfRU5WX1NJWkU7CisKKwl0bXBfZW52MSA9IGVudl9wdHI7CisJdG1wX2VudjIgPSAoZW52X3QgKikoKHVsb25nKWVudl9wdHIgKyBDRkdfRU5WX1NJWkUpOworCisJY3JjMV9vayA9IChjcmMzMigwLCB0bXBfZW52MS0+ZGF0YSwgRU5WX1NJWkUpID09IHRtcF9lbnYxLT5jcmMpOworCWNyYzJfb2sgPSAoY3JjMzIoMCwgdG1wX2VudjItPmRhdGEsIEVOVl9TSVpFKSA9PSB0bXBfZW52Mi0+Y3JjKTsKKworCWlmICghY3JjMV9vayAmJiAhY3JjMl9vaykKKwkJZ2QtPmVudl92YWxpZCA9IDA7CisJZWxzZSBpZihjcmMxX29rICYmICFjcmMyX29rKQorCQlnZC0+ZW52X3ZhbGlkID0gMTsKKwllbHNlIGlmKCFjcmMxX29rICYmIGNyYzJfb2spCisJCWdkLT5lbnZfdmFsaWQgPSAyOworCWVsc2UgeworCQkvKiBib3RoIG9rIC0gY2hlY2sgc2VyaWFsICovCisJCWlmKHRtcF9lbnYxLT5mbGFncyA9PSAyNTUgJiYgdG1wX2VudjItPmZsYWdzID09IDApCisJCQlnZC0+ZW52X3ZhbGlkID0gMjsKKwkJZWxzZSBpZih0bXBfZW52Mi0+ZmxhZ3MgPT0gMjU1ICYmIHRtcF9lbnYxLT5mbGFncyA9PSAwKQorCQkJZ2QtPmVudl92YWxpZCA9IDE7CisJCWVsc2UgaWYodG1wX2VudjEtPmZsYWdzID4gdG1wX2VudjItPmZsYWdzKQorCQkJZ2QtPmVudl92YWxpZCA9IDE7CisJCWVsc2UgaWYodG1wX2VudjItPmZsYWdzID4gdG1wX2VudjEtPmZsYWdzKQorCQkJZ2QtPmVudl92YWxpZCA9IDI7CisJCWVsc2UgLyogZmxhZ3MgYXJlIGVxdWFsIC0gYWxtb3N0IGltcG9zc2libGUgKi8KKwkJCWdkLT5lbnZfdmFsaWQgPSAxOworCX0KKworCWlmIChnZC0+ZW52X3ZhbGlkID09IDEpCisJCWVudl9wdHIgPSB0bXBfZW52MTsKKwllbHNlIGlmIChnZC0+ZW52X3ZhbGlkID09IDIpCisJCWVudl9wdHIgPSB0bXBfZW52MjsKKyNlbHNlIC8qIEVOVl9JU19FTUJFRERFRCAqLwogCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpJmRlZmF1bHRfZW52aXJvbm1lbnRbMF07CiAJZ2QtPmVudl92YWxpZCA9IDE7CisjZW5kaWYgLyogRU5WX0lTX0VNQkVEREVEICovCiAKIAlyZXR1cm4gKDApOwogfQpAQCAtMjM2LDYgKzI4Miw3IEBACiB9CiAjZW5kaWYgLyogQ0ZHX0VOVl9PRkZTRVRfUkVEVU5EICovCiAKKyNpZiAhZGVmaW5lZChFTlZfSVNfRU1CRURERUQpCiBzdGF0aWMgdm9pZCB1c2VfZGVmYXVsdCgpCiB7CiAJcHV0cyAoIioqKiBXYXJuaW5nIC0gYmFkIENSQyBvciBOQU5ELCB1c2luZyBkZWZhdWx0IGVudmlyb25tZW50XG5cbiIpOwpAQCAtMjUzLDUgKzMwMCw2IEBACiAJZ2QtPmVudl92YWxpZCA9IDE7CiAKIH0KKyNlbmRpZgogCiAjZW5kaWYgLyogQ0ZHX0VOVl9JU19JTl9OQU5EICovCmRpZmYgLS1naXQgYS9jb21tb24vZW52aXJvbm1lbnQuYyBiL2NvbW1vbi9lbnZpcm9ubWVudC5jCmluZGV4IDgxNDcxY2UuLjE5YmRlYjAgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZpcm9ubWVudC5jCisrKyBiL2NvbW1vbi9lbnZpcm9ubWVudC5jCkBAIC02MCw3ICs2MCw4IEBACiAgICAgIGRlZmluZWQoQ09ORklHX1JSVklTSU9OKQl8fCBcCiAgICAgIGRlZmluZWQoQ09ORklHX1RSQUIpICAgCXx8IFwKICAgICAgZGVmaW5lZChDT05GSUdfUFBDSEFNRUxFT05FVkIpIHx8IFwKLSAgICAgZGVmaW5lZChDT05GSUdfTTUyNzFFVkIpKQkmJiBcCisgICAgIGRlZmluZWQoQ09ORklHX001MjcxRVZCKQl8fCBcCisgICAgIGRlZmluZWQoQ09ORklHX05BTkRfVV9CT09UKSkJJiYgXAogICAgICBkZWZpbmVkKEVOVl9DUkMpIC8qIEVudmlyb25tZW50IGVtYmVkZGVkIGluIFUtQm9vdCAucHBjZW52IHNlY3Rpb24gKi8KIC8qIFhYWCAtIFRoaXMgb25seSB3b3JrcyB3aXRoIEdOVSBDICovCiAjICBkZWZpbmUgX19QUENFTlZfXyBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLnBwY2VudiIpKSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9leHBvcnRzLmMgYi9jb21tb24vZXhwb3J0cy5jCmluZGV4IGVmMjUzMzguLjBjYjQzOTYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9leHBvcnRzLmMKKysrIGIvY29tbW9uL2V4cG9ydHMuYwpAQCAtMjMsOCArMjMsMTEgQEAKIAlnZC0+anRbWEZfZ2V0X3ZlcnNpb25dID0gKHZvaWQgKikgZ2V0X3ZlcnNpb247CiAJZ2QtPmp0W1hGX21hbGxvY10gPSAodm9pZCAqKSBtYWxsb2M7CiAJZ2QtPmp0W1hGX2ZyZWVdID0gKHZvaWQgKikgZnJlZTsKLQlnZC0+anRbWEZfZ2V0X3RpbWVyXSA9ICh2b2lkICopZ2V0X3RpbWVyOwotCWdkLT5qdFtYRl91ZGVsYXldID0gKHZvaWQgKil1ZGVsYXk7CisJZ2QtPmp0W1hGX2dldGVudl0gPSAodm9pZCAqKSBnZXRlbnY7CisJZ2QtPmp0W1hGX3NldGVudl0gPSAodm9pZCAqKSBzZXRlbnY7CisJZ2QtPmp0W1hGX2dldF90aW1lcl0gPSAodm9pZCAqKSBnZXRfdGltZXI7CisJZ2QtPmp0W1hGX3NpbXBsZV9zdHJ0b3VsXSA9ICh2b2lkICopIHNpbXBsZV9zdHJ0b3VsOworCWdkLT5qdFtYRl91ZGVsYXldID0gKHZvaWQgKikgdWRlbGF5OwogI2lmIGRlZmluZWQoQ09ORklHX0kzODYpIHx8IGRlZmluZWQoQ09ORklHX1BQQykKIAlnZC0+anRbWEZfaW5zdGFsbF9oZGxyXSA9ICh2b2lkICopIGlycV9pbnN0YWxsX2hhbmRsZXI7CiAJZ2QtPmp0W1hGX2ZyZWVfaGRscl0gPSAodm9pZCAqKSBpcnFfZnJlZV9oYW5kbGVyOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2xjZC5jIGIvY29tbW9uL2xjZC5jCmluZGV4IDBiZTE5MTIuLmQ3OTM1MGYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9sY2QuYworKysgYi9jb21tb24vbGNkLmMKQEAgLTU4NSw2ICs1ODUsNyBAQAogCXVjaGFyICpibWFwOwogCXVzaG9ydCBwYWRkZWRfbGluZTsKIAl1bnNpZ25lZCBsb25nIHdpZHRoLCBoZWlnaHQ7CisJdW5zaWduZWQgbG9uZyBwd2lkdGggPSBwYW5lbF9pbmZvLnZsX2NvbDsKIAl1bnNpZ25lZCBjb2xvcnMsYnBpeDsKIAl1bnNpZ25lZCBsb25nIGNvbXByZXNzaW9uOwogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1MCkKQEAgLTYyOCw2ICs2MjksOCBAQAogCQljbWFwID0gKHVzaG9ydCAqKWZiaS0+cGFsZXR0ZTsKICNlbGlmIGRlZmluZWQoQ09ORklHX01QQzgyMykKIAkJY21hcCA9ICh1c2hvcnQgKikmKGNwLT5sY2RfY21hcFsyNTUqc2l6ZW9mKHVzaG9ydCldKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX01DQzIwMCkKKwkJLyogTUNDMjAwIExDRCBkb2Vzbid0IG5lZWQgQ01BUCwgc3VwcG9ydHMgMWJwcCBiJncgb25seSAqLwogI2Vsc2UKICMgZXJyb3IgIkRvbid0IGtub3cgbG9jYXRpb24gb2YgY29sb3IgbWFwIgogI2VuZGlmCkBAIC02NTIsOSArNjU1LDI4IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqICBCTVAgZm9ybWF0IGZvciBNb25vY2hyb21lIGFzc3VtZXMgdGhhdCB0aGUgc3RhdGUgb2YgYQorCSAqIHBpeGVsIGlzIGRlc2NyaWJlZCBvbiBhIHBlciBCaXQgYmFzaXMsIG5vdCBwZXIgQnl0ZS4KKwkgKiAgU28sIGluIGNhc2Ugb2YgTW9ub2Nocm9tZSBCTVAgd2Ugc2hvdWxkIGFsaWduIHdpZHRocworCSAqIG9uIGEgYnl0ZSBib3VuZGFyeSBhbmQgY29udmVydCB0aGVtIGZyb20gQml0IHRvIEJ5dGUKKwkgKiB1bml0cy4KKwkgKiAgUHJvYmFibHksIFBYQTI1MCBhbmQgTVBDODIzIHByb2Nlc3MgMWJwcCBCTVAgaW1hZ2VzIGluIAorCSAqIHRoZWlyIG93biB3YXlzLCBzbyBtYWtlIHRoZSBjb252ZXJ0aW5nIHRvIGJlIE1DQzIwMCAKKwkgKiBzcGVjaWZpYy4KKwkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NQ0MyMDApCisJaWYgKGJwaXg9PTEpCisJeworCQl3aWR0aCA9ICgod2lkdGggKyA3KSAmIH43KSA+PiAzOworCQl4ICAgICA9ICgoeCArIDcpICYgfjcpID4+IDM7CisJCXB3aWR0aD0gKChwd2lkdGggKyA3KSAmIH43KSA+PiAzOworCX0KKyNlbmRpZgorCiAJcGFkZGVkX2xpbmUgPSAod2lkdGgmMHgzKSA/ICgod2lkdGgmfjB4MykrNCkgOiAod2lkdGgpOwotCWlmICgoeCArIHdpZHRoKT5wYW5lbF9pbmZvLnZsX2NvbCkKLQkJd2lkdGggPSBwYW5lbF9pbmZvLnZsX2NvbCAtIHg7CisJaWYgKCh4ICsgd2lkdGgpPnB3aWR0aCkKKwkJd2lkdGggPSBwd2lkdGggLSB4OwogCWlmICgoeSArIGhlaWdodCk+cGFuZWxfaW5mby52bF9yb3cpCiAJCWhlaWdodCA9IHBhbmVsX2luZm8udmxfcm93IC0geTsKIApAQCAtNjY2LDcgKzY4OCw3IEBACiAJCWZvciAoaiA9IDA7IGogPCB3aWR0aCA7IGorKykKICNpZiBkZWZpbmVkKENPTkZJR19QWEEyNTApCiAJCQkqKGZiKyspPSooYm1hcCsrKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX01QQzgyMykKKyNlbGlmIGRlZmluZWQoQ09ORklHX01QQzgyMykgfHwgZGVmaW5lZChDT05GSUdfTUNDMjAwKQogCQkJKihmYisrKT0yNTUtKihibWFwKyspOwogI2VuZGlmCiAJCWJtYXAgKz0gKHdpZHRoIC0gcGFkZGVkX2xpbmUpOwpkaWZmIC0tZ2l0IGEvY29tbW9uL21haW4uYyBiL2NvbW1vbi9tYWluLmMKaW5kZXggNzU4ZWY4ZC4uMTNkMTJhNCAxMDA2NDQKLS0tIGEvY29tbW9uL21haW4uYworKysgYi9jb21tb24vbWFpbi5jCkBAIC0yLDYgKzIsMTAgQEAKICAqIChDKSBDb3B5cmlnaHQgMjAwMAogICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICAqCisgKiBBZGQgdG8gcmVhZGxpbmUgY21kbGluZS1lZGl0aW5nIGJ5CisgKiAoQykgQ29weXJpZ2h0IDIwMDUKKyAqIEppbkh1YSBMdW8sIEd1YW5nRG9uZyBMaW51eCBDZW50ZXIsIDxsdW8uamluaHVhQGdkLWxpbnV4LmNvbT4KKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCkBAIC00OSw3ICs1Myw2IEBACiAKICNkZWZpbmUgTUFYX0RFTEFZX1NUT1BfU1RSIDMyCiAKLXN0YXRpYyBjaGFyICogZGVsZXRlX2NoYXIgKGNoYXIgKmJ1ZmZlciwgY2hhciAqcCwgaW50ICpjb2xwLCBpbnQgKm5wLCBpbnQgcGxlbik7CiBzdGF0aWMgaW50IHBhcnNlX2xpbmUgKGNoYXIgKiwgY2hhciAqW10pOwogI2lmIGRlZmluZWQoQ09ORklHX0JPT1RERUxBWSkgJiYgKENPTkZJR19CT09UREVMQVkgPj0gMCkKIHN0YXRpYyBpbnQgYWJvcnRib290KGludCk7CkBAIC01OSw4ICs2MiwxMSBAQAogCiBjaGFyICAgICAgICBjb25zb2xlX2J1ZmZlcltDRkdfQ0JTSVpFXTsJCS8qIGNvbnNvbGUgSS9PIGJ1ZmZlcgkqLwogCisjaWZuZGVmIENPTkZJR19DTURMSU5FX0VESVRJTkcKK3N0YXRpYyBjaGFyICogZGVsZXRlX2NoYXIgKGNoYXIgKmJ1ZmZlciwgY2hhciAqcCwgaW50ICpjb2xwLCBpbnQgKm5wLCBpbnQgcGxlbik7CiBzdGF0aWMgY2hhciBlcmFzZV9zZXFbXSA9ICJcYiBcYiI7CQkvKiBlcmFzZSBzZXF1ZW5jZQkqLwogc3RhdGljIGNoYXIgICB0YWJfc2VxW10gPSAiICAgICAgICAiOwkJLyogdXNlZCB0byBleHBhbmQgVEFCcwkqLworI2VuZGlmIC8qIENPTkZJR19DTURMSU5FX0VESVRJTkcgKi8KIAogI2lmZGVmIENPTkZJR19CT09UX1JFVFJZX1RJTUUKIHN0YXRpYyB1aW50NjRfdCBlbmR0aW1lID0gMDsgIC8qIG11c3QgYmUgc2V0LCBkZWZhdWx0IGlzIGluc3RhbnQgdGltZW91dCAqLwpAQCAtNTE2LDYgKzUyMiw0MDYgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NNRExJTkVfRURJVElORworCisvKgorICogY21kbGluZS1lZGl0aW5nIHJlbGF0ZWQgY29kZXMgZnJvbSB2aXZpLgorICogQXV0aG9yOiBKYW5naG9vbiBMeXUgPG5hbmR5QG1pemkuY29tPgorICovCisKKyNpZiAxCS8qIGF2b2lkIHJlZHVuZGFuZCBjb2RlIC0tIHdkICovCisjZGVmaW5lIHB1dG5zdHIoc3RyLG4pCWRvIHsJCQlcCisJCXByaW50ZiAoIiUuKnMiLCBuLCBzdHIpOwlcCisJfSB3aGlsZSAoMCkKKyNlbHNlCit2b2lkIHB1dG5zdHIoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbikKK3sKKwlpZiAoc3RyID09IE5VTEwpCisJCXJldHVybjsKKworCXdoaWxlIChuICYmICpzdHIgIT0gJ1wwJykgeworCQlwdXRjKCpzdHIpOworCQlzdHIrKzsKKwkJbi0tOworCX0KK30KKyNlbmRpZgorCisjZGVmaW5lIENUTF9DSChjKQkJKChjKSAtICdhJyArIDEpCisKKyNkZWZpbmUgTUFYX0NNREJVRl9TSVpFCQkyNTYKKworI2RlZmluZSBDVExfQkFDS1NQQUNFCQkoJ1xiJykKKyNkZWZpbmUgREVMCQkJKChjaGFyKTI1NSkKKyNkZWZpbmUgREVMNwkJCSgoY2hhcikxMjcpCisjZGVmaW5lIENSRUFEX0hJU1RfQ0hBUgkJKCchJykKKworI2RlZmluZSBnZXRjbWRfcHV0Y2goY2gpCXB1dGMoY2gpCisjZGVmaW5lIGdldGNtZF9nZXRjaCgpCQlnZXRjKCkKKyNkZWZpbmUgZ2V0Y21kX2NiZWVwKCkJCWdldGNtZF9wdXRjaCgnXGEnKQorCisjZGVmaW5lIEhJU1RfTUFYCQkyMAorI2RlZmluZSBISVNUX1NJWkUJCU1BWF9DTURCVUZfU0laRQorCitzdGF0aWMgaW50IGhpc3RfbWF4ID0gMDsKK3N0YXRpYyBpbnQgaGlzdF9hZGRfaWR4ID0gMDsKK3N0YXRpYyBpbnQgaGlzdF9jdXIgPSAtMTsKK3Vuc2lnbmVkIGhpc3RfbnVtID0gMDsKKworY2hhciogaGlzdF9saXN0W0hJU1RfTUFYXTsKK2NoYXIgaGlzdF9saW5lc1tISVNUX01BWF1bSElTVF9TSVpFXTsKKworI2RlZmluZSBhZGRfaWR4X21pbnVzX29uZSgpICgoaGlzdF9hZGRfaWR4ID09IDApID8gaGlzdF9tYXggOiBoaXN0X2FkZF9pZHgtMSkKKworc3RhdGljIHZvaWQgaGlzdF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwloaXN0X21heCA9IDA7CisJaGlzdF9hZGRfaWR4ID0gMDsKKwloaXN0X2N1ciA9IC0xOworCWhpc3RfbnVtID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBISVNUX01BWDsgaSsrKSB7CisJCWhpc3RfbGlzdFtpXSA9IGhpc3RfbGluZXNbaV07CisJCWhpc3RfbGlzdFtpXVswXSA9ICdcMCc7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcmVhZF9hZGRfdG9faGlzdChjaGFyICpsaW5lKQoreworCXN0cmNweShoaXN0X2xpc3RbaGlzdF9hZGRfaWR4XSwgbGluZSk7CisKKwlpZiAoKytoaXN0X2FkZF9pZHggPj0gSElTVF9NQVgpCisJCWhpc3RfYWRkX2lkeCA9IDA7CisKKwlpZiAoaGlzdF9hZGRfaWR4ID4gaGlzdF9tYXgpCisJCWhpc3RfbWF4ID0gaGlzdF9hZGRfaWR4OworCisJaGlzdF9udW0rKzsKK30KKworc3RhdGljIGNoYXIqIGhpc3RfcHJldih2b2lkKQoreworCWNoYXIgKnJldDsKKwlpbnQgb2xkX2N1cjsKKworCWlmIChoaXN0X2N1ciA8IDApCisJCXJldHVybiBOVUxMOworCisJb2xkX2N1ciA9IGhpc3RfY3VyOworCWlmICgtLWhpc3RfY3VyIDwgMCkKKwkJaGlzdF9jdXIgPSBoaXN0X21heDsKKworCWlmIChoaXN0X2N1ciA9PSBoaXN0X2FkZF9pZHgpIHsKKwkJaGlzdF9jdXIgPSBvbGRfY3VyOworCQlyZXQgPSBOVUxMOworCX0gZWxzZQorCQlyZXQgPSBoaXN0X2xpc3RbaGlzdF9jdXJdOworCisJcmV0dXJuIChyZXQpOworfQorCitzdGF0aWMgY2hhciogaGlzdF9uZXh0KHZvaWQpCit7CisJY2hhciAqcmV0OworCisJaWYgKGhpc3RfY3VyIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaGlzdF9jdXIgPT0gaGlzdF9hZGRfaWR4KQorCQlyZXR1cm4gTlVMTDsKKworCWlmICgrK2hpc3RfY3VyID4gaGlzdF9tYXgpCisJCWhpc3RfY3VyID0gMDsKKworCWlmIChoaXN0X2N1ciA9PSBoaXN0X2FkZF9pZHgpIHsKKwkJcmV0ID0gIiI7CisJfSBlbHNlCisJCXJldCA9IGhpc3RfbGlzdFtoaXN0X2N1cl07CisKKwlyZXR1cm4gKHJldCk7Cit9CisKKyNpZm5kZWYgQ09ORklHX0NNRExJTkVfRURJVElORworc3RhdGljIHZvaWQgY3JlYWRfcHJpbnRfaGlzdF9saXN0KHZvaWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBuOworCisJbiA9IGhpc3RfbnVtIC0gaGlzdF9tYXg7CisKKwlpID0gaGlzdF9hZGRfaWR4ICsgMTsKKwl3aGlsZSAoMSkgeworCQlpZiAoaSA+IGhpc3RfbWF4KQorCQkJaSA9IDA7CisJCWlmIChpID09IGhpc3RfYWRkX2lkeCkKKwkJCWJyZWFrOworCQlwcmludGYoIiVzXG4iLCBoaXN0X2xpc3RbaV0pOworCQluKys7CisJCWkrKzsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0NNRExJTkVfRURJVElORyAqLworCisjZGVmaW5lIEJFR0lOTklOR19PRl9MSU5FKCkgewkJCVwKKwl3aGlsZSAobnVtKSB7CQkJCVwKKwkJZ2V0Y21kX3B1dGNoKENUTF9CQUNLU1BBQ0UpOwlcCisJCW51bS0tOwkJCQlcCisJfQkJCQkJXAorfQorCisjZGVmaW5lIEVSQVNFX1RPX0VPTCgpIHsJCQkJXAorCWlmIChudW0gPCBlb2xfbnVtKSB7CQkJCVwKKwkJaW50IHRtcDsJCQkJXAorCQlmb3IgKHRtcCA9IG51bTsgdG1wIDwgZW9sX251bTsgdG1wKyspCVwKKwkJCWdldGNtZF9wdXRjaCgnICcpOwkJXAorCQl3aGlsZSAodG1wLS0gPiBudW0pCQkJXAorCQkJZ2V0Y21kX3B1dGNoKENUTF9CQUNLU1BBQ0UpOwlcCisJCWVvbF9udW0gPSBudW07CQkJCVwKKwl9CQkJCQkJXAorfQorCisjZGVmaW5lIFJFRlJFU0hfVE9fRU9MKCkgewkJCVwKKwlpZiAobnVtIDwgZW9sX251bSkgewkJCVwKKwkJd2xlbiA9IGVvbF9udW0gLSBudW07CQlcCisJCXB1dG5zdHIoYnVmICsgbnVtLCB3bGVuKTsJXAorCQludW0gPSBlb2xfbnVtOwkJCVwKKwl9CQkJCQlcCit9CisKK3N0YXRpYyB2b2lkIGNyZWFkX2FkZF9jaGFyKGNoYXIgaWNoYXIsIGludCBpbnNlcnQsIHVuc2lnbmVkIGxvbmcgKm51bSwKKwkgICAgICAgdW5zaWduZWQgbG9uZyAqZW9sX251bSwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIHdsZW47CisKKwkvKiByb29tID8/PyAqLworCWlmIChpbnNlcnQgfHwgKm51bSA9PSAqZW9sX251bSkgeworCQlpZiAoKmVvbF9udW0gPiBsZW4gLSAxKSB7CisJCQlnZXRjbWRfY2JlZXAoKTsKKwkJCXJldHVybjsKKwkJfQorCQkoKmVvbF9udW0pKys7CisJfQorCisJaWYgKGluc2VydCkgeworCQl3bGVuID0gKmVvbF9udW0gLSAqbnVtOworCQlpZiAod2xlbiA+IDEpIHsKKwkJCW1lbW1vdmUoJmJ1ZlsqbnVtKzFdLCAmYnVmWypudW1dLCB3bGVuLTEpOworCQl9CisKKwkJYnVmWypudW1dID0gaWNoYXI7CisJCXB1dG5zdHIoYnVmICsgKm51bSwgd2xlbik7CisJCSgqbnVtKSsrOworCQl3aGlsZSAoLS13bGVuKSB7CisJCQlnZXRjbWRfcHV0Y2goQ1RMX0JBQ0tTUEFDRSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBlY2hvIHRoZSBjaGFyYWN0ZXIgKi8KKwkJd2xlbiA9IDE7CisJCWJ1ZlsqbnVtXSA9IGljaGFyOworCQlwdXRuc3RyKGJ1ZiArICpudW0sIHdsZW4pOworCQkoKm51bSkrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyZWFkX2FkZF9zdHIoY2hhciAqc3RyLCBpbnQgc3Ryc2l6ZSwgaW50IGluc2VydCwgdW5zaWduZWQgbG9uZyAqbnVtLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgKmVvbF9udW0sIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJd2hpbGUgKHN0cnNpemUtLSkgeworCQljcmVhZF9hZGRfY2hhcigqc3RyLCBpbnNlcnQsIG51bSwgZW9sX251bSwgYnVmLCBsZW4pOworCQlzdHIrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY3JlYWRfbGluZShjaGFyICpidWYsIHVuc2lnbmVkIGludCAqbGVuKQoreworCXVuc2lnbmVkIGxvbmcgbnVtID0gMDsKKwl1bnNpZ25lZCBsb25nIGVvbF9udW0gPSAwOworCXVuc2lnbmVkIGxvbmcgcmxlbjsKKwl1bnNpZ25lZCBsb25nIHdsZW47CisJY2hhciBpY2hhcjsKKwlpbnQgaW5zZXJ0ID0gMTsKKwlpbnQgZXNjX2xlbiA9IDA7CisJaW50IHJjID0gMDsKKwljaGFyIGVzY19zYXZlWzhdOworCisJd2hpbGUgKDEpIHsKKwkJcmxlbiA9IDE7CisJCWljaGFyID0gZ2V0Y21kX2dldGNoKCk7CisKKwkJaWYgKChpY2hhciA9PSAnXG4nKSB8fCAoaWNoYXIgPT0gJ1xyJykpIHsKKwkJCXB1dGMoJ1xuJyk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIGhhbmRsZSBzdGFuZGFyZCBsaW51eCB4dGVybSBlc2Mgc2VxdWVuY2VzIGZvciBhcnJvdyBrZXksIGV0Yy4KKwkJICovCisJCWlmIChlc2NfbGVuICE9IDApIHsKKwkJCWlmIChlc2NfbGVuID09IDEpIHsKKwkJCQlpZiAoaWNoYXIgPT0gJ1snKSB7CisJCQkJCWVzY19zYXZlW2VzY19sZW5dID0gaWNoYXI7CisJCQkJCWVzY19sZW4gPSAyOworCQkJCX0gZWxzZSB7CisJCQkJCWNyZWFkX2FkZF9zdHIoZXNjX3NhdmUsIGVzY19sZW4sIGluc2VydCwKKwkJCQkJCSAgICAgICZudW0sICZlb2xfbnVtLCBidWYsICpsZW4pOworCQkJCQllc2NfbGVuID0gMDsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXN3aXRjaCAoaWNoYXIpIHsKKworCQkJY2FzZSAnRCc6CS8qIDwtIGtleSAqLworCQkJCWljaGFyID0gQ1RMX0NIKCdiJyk7CisJCQkJZXNjX2xlbiA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlICdDJzoJLyogLT4ga2V5ICovCisJCQkJaWNoYXIgPSBDVExfQ0goJ2YnKTsKKwkJCQllc2NfbGVuID0gMDsKKwkJCQlicmVhazsJLyogcGFzcyBvZmYgdG8gXkYgaGFuZGxlciAqLworCQkJY2FzZSAnSCc6CS8qIEhvbWUga2V5ICovCisJCQkJaWNoYXIgPSBDVExfQ0goJ2EnKTsKKwkJCQllc2NfbGVuID0gMDsKKwkJCQlicmVhazsJLyogcGFzcyBvZmYgdG8gXkEgaGFuZGxlciAqLworCQkJY2FzZSAnQSc6CS8qIHVwIGFycm93ICovCisJCQkJaWNoYXIgPSBDVExfQ0goJ3AnKTsKKwkJCQllc2NfbGVuID0gMDsKKwkJCQlicmVhazsJLyogcGFzcyBvZmYgdG8gXlAgaGFuZGxlciAqLworCQkJY2FzZSAnQic6CS8qIGRvd24gYXJyb3cgKi8KKwkJCQlpY2hhciA9IENUTF9DSCgnbicpOworCQkJCWVzY19sZW4gPSAwOworCQkJCWJyZWFrOwkvKiBwYXNzIG9mZiB0byBeTiBoYW5kbGVyICovCisJCQlkZWZhdWx0OgorCQkJCWVzY19zYXZlW2VzY19sZW4rK10gPSBpY2hhcjsKKwkJCQljcmVhZF9hZGRfc3RyKGVzY19zYXZlLCBlc2NfbGVuLCBpbnNlcnQsCisJCQkJCSAgICAgICZudW0sICZlb2xfbnVtLCBidWYsICpsZW4pOworCQkJCWVzY19sZW4gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJc3dpdGNoIChpY2hhcikgeworCQljYXNlIDB4MWI6CisJCQlpZiAoZXNjX2xlbiA9PSAwKSB7CisJCQkJZXNjX3NhdmVbZXNjX2xlbl0gPSBpY2hhcjsKKwkJCQllc2NfbGVuID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJcHV0cygiaW1wb3NzaWJsZSBjb25kaXRpb24gIzg3NlxuIik7CisJCQkJZXNjX2xlbiA9IDA7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIENUTF9DSCgnYScpOgorCQkJQkVHSU5OSU5HX09GX0xJTkUoKTsKKwkJCWJyZWFrOworCQljYXNlIENUTF9DSCgnYycpOgkvKiBeQyAtIGJyZWFrICovCisJCQkqYnVmID0gJ1wwJzsJLyogZGlzY2FyZCBpbnB1dCAqLworCQkJcmV0dXJuICgtMSk7CisJCWNhc2UgQ1RMX0NIKCdmJyk6CisJCQlpZiAobnVtIDwgZW9sX251bSkgeworCQkJCWdldGNtZF9wdXRjaChidWZbbnVtXSk7CisJCQkJbnVtKys7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfQ0goJ2InKToKKwkJCWlmIChudW0pIHsKKwkJCQlnZXRjbWRfcHV0Y2goQ1RMX0JBQ0tTUEFDRSk7CisJCQkJbnVtLS07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfQ0goJ2QnKToKKwkJCWlmIChudW0gPCBlb2xfbnVtKSB7CisJCQkJd2xlbiA9IGVvbF9udW0gLSBudW0gLSAxOworCQkJCWlmICh3bGVuKSB7CisJCQkJCW1lbW1vdmUoJmJ1ZltudW1dLCAmYnVmW251bSsxXSwgd2xlbik7CisJCQkJCXB1dG5zdHIoYnVmICsgbnVtLCB3bGVuKTsKKwkJCQl9CisKKwkJCQlnZXRjbWRfcHV0Y2goJyAnKTsKKwkJCQlkbyB7CisJCQkJCWdldGNtZF9wdXRjaChDVExfQkFDS1NQQUNFKTsKKwkJCQl9IHdoaWxlICh3bGVuLS0pOworCQkJCWVvbF9udW0tLTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENUTF9DSCgnaycpOgorCQkJRVJBU0VfVE9fRU9MKCk7CisJCQlicmVhazsKKwkJY2FzZSBDVExfQ0goJ2UnKToKKwkJCVJFRlJFU0hfVE9fRU9MKCk7CisJCQlicmVhazsKKwkJY2FzZSBDVExfQ0goJ28nKToKKwkJCWluc2VydCA9ICFpbnNlcnQ7CisJCQlicmVhazsKKwkJY2FzZSBDVExfQ0goJ3gnKToKKwkJCUJFR0lOTklOR19PRl9MSU5FKCk7CisJCQlFUkFTRV9UT19FT0woKTsKKwkJCWJyZWFrOworCQljYXNlIERFTDoKKwkJY2FzZSBERUw3OgorCQljYXNlIDg6CisJCQlpZiAobnVtKSB7CisJCQkJd2xlbiA9IGVvbF9udW0gLSBudW07CisJCQkJbnVtLS07CisJCQkJbWVtbW92ZSgmYnVmW251bV0sICZidWZbbnVtKzFdLCB3bGVuKTsKKwkJCQlnZXRjbWRfcHV0Y2goQ1RMX0JBQ0tTUEFDRSk7CisJCQkJcHV0bnN0cihidWYgKyBudW0sIHdsZW4pOworCQkJCWdldGNtZF9wdXRjaCgnICcpOworCQkJCWRvIHsKKwkJCQkJZ2V0Y21kX3B1dGNoKENUTF9CQUNLU1BBQ0UpOworCQkJCX0gd2hpbGUgKHdsZW4tLSk7CisJCQkJZW9sX251bS0tOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1RMX0NIKCdwJyk6CisJCWNhc2UgQ1RMX0NIKCduJyk6CisJCXsKKwkJCWNoYXIgKiBobGluZTsKKworCQkJZXNjX2xlbiA9IDA7CisKKwkJCWlmIChpY2hhciA9PSBDVExfQ0goJ3AnKSkKKwkJCQlobGluZSA9IGhpc3RfcHJldigpOworCQkJZWxzZQorCQkJCWhsaW5lID0gaGlzdF9uZXh0KCk7CisKKwkJCWlmICghaGxpbmUpIHsKKwkJCQlnZXRjbWRfY2JlZXAoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogbnVrZSB0aGUgY3VycmVudCBsaW5lICovCisJCQkvKiBmaXJzdCwgZ28gaG9tZSAqLworCQkJQkVHSU5OSU5HX09GX0xJTkUoKTsKKworCQkJLyogZXJhc2UgdG8gZW5kIG9mIGxpbmUgKi8KKwkJCUVSQVNFX1RPX0VPTCgpOworCisJCQkvKiBjb3B5IG5ldyBsaW5lIGludG8gcGxhY2UgYW5kIGRpc3BsYXkgKi8KKwkJCXN0cmNweShidWYsIGhsaW5lKTsKKwkJCWVvbF9udW0gPSBzdHJsZW4oYnVmKTsKKwkJCVJFRlJFU0hfVE9fRU9MKCk7CisJCQljb250aW51ZTsKKwkJfQorCQlkZWZhdWx0OgorCQkJY3JlYWRfYWRkX2NoYXIoaWNoYXIsIGluc2VydCwgJm51bSwgJmVvbF9udW0sIGJ1ZiwgKmxlbik7CisJCQlicmVhazsKKwkJfQorCX0KKwkqbGVuID0gZW9sX251bTsKKwlidWZbZW9sX251bV0gPSAnXDAnOwkvKiBsb3NlIHRoZSBuZXdsaW5lICovCisKKwlpZiAoYnVmWzBdICYmIGJ1ZlswXSAhPSBDUkVBRF9ISVNUX0NIQVIpCisJCWNyZWFkX2FkZF90b19oaXN0KGJ1Zik7CisJaGlzdF9jdXIgPSBoaXN0X2FkZF9pZHg7CisKKwlyZXR1cm4gKHJjKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19DTURMSU5FX0VESVRJTkcgKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC01MjgsNiArOTM0LDIyIEBACiAgKi8KIGludCByZWFkbGluZSAoY29uc3QgY2hhciAqY29uc3QgcHJvbXB0KQogeworI2lmZGVmIENPTkZJR19DTURMSU5FX0VESVRJTkcKKwljaGFyICpwID0gY29uc29sZV9idWZmZXI7CisJdW5zaWduZWQgaW50IGxlbj1NQVhfQ01EQlVGX1NJWkU7CisJaW50IHJjOworCXN0YXRpYyBpbnQgaW5pdHRlZCA9IDA7CisKKwlpZiAoIWluaXR0ZWQpIHsKKwkJaGlzdF9pbml0KCk7CisJCWluaXR0ZWQgPSAxOworCX0KKworCXB1dHMgKHByb21wdCk7CisKKwlyYyA9IGNyZWFkX2xpbmUocCwgJmxlbik7CisJcmV0dXJuIHJjIDwgMCA/IHJjIDogbGVuOworI2Vsc2UKIAljaGFyICAgKnAgPSBjb25zb2xlX2J1ZmZlcjsKIAlpbnQJbiA9IDA7CQkJCS8qIGJ1ZmZlciBpbmRleAkJKi8KIAlpbnQJcGxlbiA9IDA7CQkJLyogcHJvbXB0IGxlbmd0aAkqLwpAQCAtNjIzLDEwICsxMDQ1LDEyIEBACiAJCQl9CiAJCX0KIAl9CisjZW5kaWYgLyogQ09ORklHX0NNRExJTkVfRURJVElORyAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBDT05GSUdfQ01ETElORV9FRElUSU5HCiBzdGF0aWMgY2hhciAqIGRlbGV0ZV9jaGFyIChjaGFyICpidWZmZXIsIGNoYXIgKnAsIGludCAqY29scCwgaW50ICpucCwgaW50IHBsZW4pCiB7CiAJY2hhciAqczsKQEAgLTY1Niw2ICsxMDgwLDcgQEAKIAkoKm5wKS0tOwogCXJldHVybiAocCk7CiB9CisjZW5kaWYgLyogQ09ORklHX0NNRExJTkVfRURJVElORyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvY29tbW9uL3NlcmlhbC5jIGIvY29tbW9uL3NlcmlhbC5jCmluZGV4IDdiMjk5NTEuLjYwNWQ0ZTMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9zZXJpYWwuYworKysgYi9jb21tb24vc2VyaWFsLmMKQEAgLTQyLDcgKzQyLDIzIEBACiAJcmV0dXJuICZzZXJpYWxfc2NjX2RldmljZTsKICNlbGlmIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBkZWZpbmVkKENPTkZJR180MDVDUikgfHwgZGVmaW5lZChDT05GSUdfNDQwKSBcCiAgICB8fCBkZWZpbmVkKENPTkZJR180MDVFUCkgfHwgZGVmaW5lZChDT05GSUdfTVBDNXh4eCkKLQlyZXR1cm4gJnNlcmlhbDBfZGV2aWNlOworI2lmIGRlZmluZWQoQ09ORklHX0NPTlNfSU5ERVgpICYmIGRlZmluZWQoQ0ZHX05TMTY1NTBfU0VSSUFMKQorI2lmIChDT05GSUdfQ09OU19JTkRFWD09MSkKKwlyZXR1cm4gJmVzZXJpYWwxX2RldmljZTsKKyNlbGlmIChDT05GSUdfQ09OU19JTkRFWD09MikKKwlyZXR1cm4gJmVzZXJpYWwyX2RldmljZTsKKyNlbGlmIChDT05GSUdfQ09OU19JTkRFWD09MykKKwlyZXR1cm4gJmVzZXJpYWwzX2RldmljZTsKKyNlbGlmIChDT05GSUdfQ09OU19JTkRFWD09NCkKKwlyZXR1cm4gJmVzZXJpYWw0X2RldmljZTsKKyNlbHNlCisjZXJyb3IgIkJhZCBDT05GSUdfQ09OU19JTkRFWC4iCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoQ09ORklHX1VBUlQxX0NPTlNPTEUpCisJCXJldHVybiAmc2VyaWFsMV9kZXZpY2U7CisjZWxzZQorCQlyZXR1cm4gJnNlcmlhbDBfZGV2aWNlOworI2VuZGlmCiAjZWxzZQogI2Vycm9yIE5vIGRlZmF1bHQgY29uc29sZQogI2VuZGlmCkBAIC04MCw2ICs5NiwyMCBAQAogCXNlcmlhbF9yZWdpc3Rlcigmc2VyaWFsMV9kZXZpY2UpOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENGR19OUzE2NTUwX1NFUklBTCkKKyNpZiBkZWZpbmVkKENGR19OUzE2NTUwX0NPTTEpCisJc2VyaWFsX3JlZ2lzdGVyKCZlc2VyaWFsMV9kZXZpY2UpOworI2VuZGlmCisjaWYgZGVmaW5lZChDRkdfTlMxNjU1MF9DT00yKQorCXNlcmlhbF9yZWdpc3RlcigmZXNlcmlhbDJfZGV2aWNlKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ0ZHX05TMTY1NTBfQ09NMykKKwlzZXJpYWxfcmVnaXN0ZXIoJmVzZXJpYWwzX2RldmljZSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENGR19OUzE2NTUwX0NPTTQpCisJc2VyaWFsX3JlZ2lzdGVyKCZlc2VyaWFsNF9kZXZpY2UpOworI2VuZGlmCisjZW5kaWYgLyogQ0ZHX05TMTY1NTBfU0VSSUFMICovCiAJc2VyaWFsX2Fzc2lnbiAoZGVmYXVsdF9zZXJpYWxfY29uc29sZSAoKS0+bmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi91c2IuYyBiL2NvbW1vbi91c2IuYwppbmRleCBkOTUxNWU2Li4wODU3NDk0IDEwMDY0NAotLS0gYS9jb21tb24vdXNiLmMKKysrIGIvY29tbW9uL3VzYi5jCkBAIC03Miw2ICs3Miw4IEBACiBzdGF0aWMgaW50IGFzeW5jaF9hbGxvd2VkOwogc3RhdGljIHN0cnVjdCBkZXZyZXF1ZXN0IHNldHVwX3BhY2tldDsKIAorY2hhciB1c2Jfc3RhcnRlZDsgLyogZmxhZyBmb3IgdGhlIHN0YXJ0ZWQvc3RvcHBlZCBVU0Igc3RhdHVzICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBzb21lIGZvcndhcmQgZGVjbGVyYXRpb25zLi4uCiAgKi8KQEAgLTExMCwxMCArMTEyLDEyIEBACiAJCXByaW50Zigic2Nhbm5pbmcgYnVzIGZvciBkZXZpY2VzLi4uICIpOwogCQlydW5uaW5nPTE7CiAJCXVzYl9zY2FuX2RldmljZXMoKTsKKwkJdXNiX3N0YXJ0ZWQgPSAxOwogCQlyZXR1cm4gMDsKIAl9CiAJZWxzZSB7CiAJCXByaW50ZigiRXJyb3IsIGNvdWxkbid0IGluaXQgTG93bGV2ZWwgcGFydFxuIik7CisJCXVzYl9zdGFydGVkID0gMDsKIAkJcmV0dXJuIC0xOwogCX0KIH0KQEAgLTEyNCw2ICsxMjgsNyBAQAogaW50IHVzYl9zdG9wKHZvaWQpCiB7CiAJYXN5bmNoX2FsbG93ZWQ9MTsKKwl1c2Jfc3RhcnRlZCA9IDA7CiAJdXNiX2h1Yl9yZXNldCgpOwogCXJldHVybiB1c2JfbG93bGV2ZWxfc3RvcCgpOwogfQpAQCAtMjgwLDU2ICsyODUsNjggQEAKIGludCB1c2JfcGFyc2VfY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGNmZ25vKQogewogCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhlYWQ7Ci0JaW50IGluZGV4LGlmbm8sZXBubzsKLQlpZm5vPS0xOwotCWVwbm89LTE7CisJaW50IGluZGV4LCBpZm5vLCBlcG5vLCBjdXJyX2lmX251bTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpjaDsKIAotCWRldi0+Y29uZmlnbm89Y2Znbm87Ci0JaGVhZCA9KHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikmYnVmZmVyWzBdOwotCWlmKGhlYWQtPmJEZXNjcmlwdG9yVHlwZSE9VVNCX0RUX0NPTkZJRykgewotCQlwcmludGYoIiBFUlJPUjogTk9UIFVTQl9DT05GSUdfREVTQyAleFxuIixoZWFkLT5iRGVzY3JpcHRvclR5cGUpOworCWlmbm8gPSAtMTsKKwllcG5vID0gLTE7CisJY3Vycl9pZl9udW0gPSAtMTsKKworCWRldi0+Y29uZmlnbm8gPSBjZmdubzsKKwloZWFkID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmJ1ZmZlclswXTsKKwlpZihoZWFkLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0NPTkZJRykgeworCQlwcmludGYoIiBFUlJPUjogTk9UIFVTQl9DT05GSUdfREVTQyAleFxuIiwgaGVhZC0+YkRlc2NyaXB0b3JUeXBlKTsKIAkJcmV0dXJuIC0xOwogCX0KLQltZW1jcHkoJmRldi0+Y29uZmlnLGJ1ZmZlcixidWZmZXJbMF0pOwotCWRldi0+Y29uZmlnLndUb3RhbExlbmd0aD1zd2FwXzE2KGRldi0+Y29uZmlnLndUb3RhbExlbmd0aCk7Ci0JZGV2LT5jb25maWcubm9fb2ZfaWY9MDsKKwltZW1jcHkoJmRldi0+Y29uZmlnLCBidWZmZXIsIGJ1ZmZlclswXSk7CisJZGV2LT5jb25maWcud1RvdGFsTGVuZ3RoID0gc3dhcF8xNihkZXYtPmNvbmZpZy53VG90YWxMZW5ndGgpOworCWRldi0+Y29uZmlnLm5vX29mX2lmID0gMDsKIAotCWluZGV4PWRldi0+Y29uZmlnLmJMZW5ndGg7CisJaW5kZXggPSBkZXYtPmNvbmZpZy5iTGVuZ3RoOwogCS8qIE9rIHRoZSBmaXJzdCBlbnRyeSBtdXN0IGJlIGEgY29uZmlndXJhdGlvbiBlbnRyeSwgbm93IHByb2Nlc3MgdGhlIG90aGVycyAqLwotCWhlYWQ9KHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikmYnVmZmVyW2luZGV4XTsKLQl3aGlsZShpbmRleCsxIDwgZGV2LT5jb25maWcud1RvdGFsTGVuZ3RoKSB7CisJaGVhZCA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZidWZmZXJbaW5kZXhdOworCXdoaWxlKGluZGV4ICsgMSA8IGRldi0+Y29uZmlnLndUb3RhbExlbmd0aCkgewogCQlzd2l0Y2goaGVhZC0+YkRlc2NyaXB0b3JUeXBlKSB7CiAJCQljYXNlIFVTQl9EVF9JTlRFUkZBQ0U6Ci0JCQkJaWZubz1kZXYtPmNvbmZpZy5ub19vZl9pZjsKLQkJCQlkZXYtPmNvbmZpZy5ub19vZl9pZisrOyAvKiBmb3VuZCBhbiBpbnRlcmZhY2UgZGVzYywgaW5jcmVhc2UgbnVtYmVycyAqLwotCQkJCW1lbWNweSgmZGV2LT5jb25maWcuaWZfZGVzY1tpZm5vXSwmYnVmZmVyW2luZGV4XSxidWZmZXJbaW5kZXhdKTsgLyogY29weSBuZXcgZGVzYyAqLwotCQkJCWRldi0+Y29uZmlnLmlmX2Rlc2NbaWZub10ubm9fb2ZfZXA9MDsKLQorCQkJCWlmKCgoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqKSAmYnVmZmVyW2luZGV4XSktPgorCQkJCQliSW50ZXJmYWNlTnVtYmVyICE9IGN1cnJfaWZfbnVtKSB7CisJCQkJCS8qIHRoaXMgaXMgYSBuZXcgaW50ZXJmYWNlLCBjb3B5IG5ldyBkZXNjICovCisJCQkJCWlmbm8gPSBkZXYtPmNvbmZpZy5ub19vZl9pZjsKKwkJCQkJZGV2LT5jb25maWcubm9fb2ZfaWYrKzsKKwkJCQkJbWVtY3B5KCZkZXYtPmNvbmZpZy5pZl9kZXNjW2lmbm9dLAorCQkJCQkJJmJ1ZmZlcltpbmRleF0sIGJ1ZmZlcltpbmRleF0pOworCQkJCQlkZXYtPmNvbmZpZy5pZl9kZXNjW2lmbm9dLm5vX29mX2VwID0gMDsKKwkJCQkJZGV2LT5jb25maWcuaWZfZGVzY1tpZm5vXS5udW1fYWx0c2V0dGluZyA9IDE7CisJCQkJCWN1cnJfaWZfbnVtID0gZGV2LT5jb25maWcuaWZfZGVzY1tpZm5vXS5iSW50ZXJmYWNlTnVtYmVyOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGZvdW5kIGFsdGVybmF0ZSBzZXR0aW5nIGZvciB0aGUgaW50ZXJmYWNlICovCisJCQkJCWRldi0+Y29uZmlnLmlmX2Rlc2NbaWZub10ubnVtX2FsdHNldHRpbmcrKzsKKwkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIFVTQl9EVF9FTkRQT0lOVDoKLQkJCQllcG5vPWRldi0+Y29uZmlnLmlmX2Rlc2NbaWZub10ubm9fb2ZfZXA7CisJCQkJZXBubyA9IGRldi0+Y29uZmlnLmlmX2Rlc2NbaWZub10ubm9fb2ZfZXA7CiAJCQkJZGV2LT5jb25maWcuaWZfZGVzY1tpZm5vXS5ub19vZl9lcCsrOyAvKiBmb3VuZCBhbiBlbmRwb2ludCAqLwotCQkJCW1lbWNweSgmZGV2LT5jb25maWcuaWZfZGVzY1tpZm5vXS5lcF9kZXNjW2Vwbm9dLCZidWZmZXJbaW5kZXhdLGJ1ZmZlcltpbmRleF0pOwotCQkJCWRldi0+Y29uZmlnLmlmX2Rlc2NbaWZub10uZXBfZGVzY1tlcG5vXS53TWF4UGFja2V0U2l6ZQotCQkJCQk9c3dhcF8xNihkZXYtPmNvbmZpZy5pZl9kZXNjW2lmbm9dLmVwX2Rlc2NbZXBub10ud01heFBhY2tldFNpemUpOwotCQkJCVVTQl9QUklOVEYoImlmICVkLCBlcCAlZFxuIixpZm5vLGVwbm8pOworCQkJCW1lbWNweSgmZGV2LT5jb25maWcuaWZfZGVzY1tpZm5vXS5lcF9kZXNjW2Vwbm9dLAorCQkJCQkmYnVmZmVyW2luZGV4XSwgYnVmZmVyW2luZGV4XSk7CisJCQkJZGV2LT5jb25maWcuaWZfZGVzY1tpZm5vXS5lcF9kZXNjW2Vwbm9dLndNYXhQYWNrZXRTaXplID0KKwkJCQkJc3dhcF8xNihkZXYtPmNvbmZpZy5pZl9kZXNjW2lmbm9dLmVwX2Rlc2NbZXBub10ud01heFBhY2tldFNpemUpOworCQkJCVVTQl9QUklOVEYoImlmICVkLCBlcCAlZFxuIiwgaWZubywgZXBubyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCWlmKGhlYWQtPmJMZW5ndGg9PTApCisJCQkJaWYoaGVhZC0+Ykxlbmd0aCA9PSAwKQogCQkJCQlyZXR1cm4gMTsKLQkJCQlVU0JfUFJJTlRGKCJ1bmtub3duIERlc2NyaXB0aW9uIFR5cGUgOiAleFxuIixoZWFkLT5iRGVzY3JpcHRvclR5cGUpOworCQkJCVVTQl9QUklOVEYoInVua25vd24gRGVzY3JpcHRpb24gVHlwZSA6ICV4XG4iLCBoZWFkLT5iRGVzY3JpcHRvclR5cGUpOwogCQkJCXsKLQkJCQkJaW50IGk7Ci0JCQkJCXVuc2lnbmVkIGNoYXIgKmNoOwotCQkJCQljaD0odW5zaWduZWQgY2hhciAqKWhlYWQ7Ci0JCQkJCWZvcihpPTA7aTxoZWFkLT5iTGVuZ3RoOyBpKyspCi0JCQkJCQlVU0JfUFJJTlRGKCIlMDJYICIsKmNoKyspOworCQkJCQljaCA9ICh1bnNpZ25lZCBjaGFyICopaGVhZDsKKwkJCQkJZm9yKGkgPSAwOyBpIDwgaGVhZC0+Ykxlbmd0aDsgaSsrKQorCQkJCQkJVVNCX1BSSU5URigiJTAyWCAiLCAqY2grKyk7CiAJCQkJCVVTQl9QUklOVEYoIlxuXG5cbiIpOwogCQkJCX0KIAkJCQlicmVhazsKIAkJfQotCQlpbmRleCs9aGVhZC0+Ykxlbmd0aDsKLQkJaGVhZD0oc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSZidWZmZXJbaW5kZXhdOworCQlpbmRleCArPSBoZWFkLT5iTGVuZ3RoOworCQloZWFkID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikmYnVmZmVyW2luZGV4XTsKIAl9CiAJcmV0dXJuIDE7CiB9CkBAIC00NDMsNiArNDYwLDE0IEBACiAJCXByaW50Zigic2VsZWN0aW5nIGludmFsaWQgaW50ZXJmYWNlICVkIiwgaW50ZXJmYWNlKTsKIAkJcmV0dXJuIC0xOwogCX0KKwkvKgorCSAqIFdlIHNob3VsZCByZXR1cm4gbm93IGZvciBkZXZpY2VzIHdpdGggb25seSBvbmUgYWx0ZXJuYXRlIHNldHRpbmcuCisJICogQWNjb3JkaW5nIHRvIDkuNC4xMCBvZiB0aGUgVW5pdmVyc2FsIFNlcmlhbCBCdXMgU3BlY2lmaWNhdGlvbiBSZXZpc2lvbiAyLjAKKwkgKiBzdWNoIGRldmljZXMgY2FuIHJldHVybiB3aXRoIGEgU1RBTEwuIFRoaXMgcmVzdWx0cyBpbiBzb21lIFVTQiBzdGlja3MKKwkgKiB0aW1lb3V0aW5nIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgdGhlbiBiZWluZyB1bnVzYWJsZSBpbiBVLUJvb3QuCisJICovCisJaWYgKGlmX2ZhY2UtPm51bV9hbHRzZXR0aW5nID09IDEpCisJCXJldHVybiAwOwogCiAJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKIAkgICAgVVNCX1JFUV9TRVRfSU5URVJGQUNFLCBVU0JfUkVDSVBfSU5URVJGQUNFLCBhbHRlcm5hdGUsCmRpZmYgLS1naXQgYS9jb21tb24vdXNiX3N0b3JhZ2UuYyBiL2NvbW1vbi91c2Jfc3RvcmFnZS5jCmluZGV4IDk5ZTRhYjAuLjY5ZWNmMTggMTAwNjQ0Ci0tLSBhL2NvbW1vbi91c2Jfc3RvcmFnZS5jCisrKyBiL2NvbW1vbi91c2Jfc3RvcmFnZS5jCkBAIC05MTYsNiArOTE2LDI4IEBACiB9CiAKIAorI2lmZGVmIENPTkZJR19VU0JfQklOX0ZJWFVQCisvKgorICogU29tZSBVU0Igc3RvcmFnZSBkZXZpY2VzIHF1ZXJpZWQgZm9yIFNDU0kgaWRlbnRpZmljYXRpb24gZGF0YSByZXNwb25kIHdpdGgKKyAqIGJpbmFyeSBzdHJpbmdzLCB3aGljaCBpZiBvdXRwdXQgdG8gdGhlIGNvbnNvbGUgZnJlZXplIHRoZSB0ZXJtaW5hbC4gVGhlCisgKiB3b3JrYXJvdW5kIGlzIHRvIG1vZGlmeSB0aGUgdmVuZG9yIGFuZCBwcm9kdWN0IHN0cmluZ3MgcmVhZCBmcm9tIHN1Y2gKKyAqIGRldmljZSB3aXRoIHByb3BlciB2YWx1ZXMgKGFzIHJlcG9ydGVkIGJ5ICd1c2IgaW5mbycpLgorICoKKyAqIFZlbmRvciBhbmQgcHJvZHVjdCBsZW5ndGggbGltaXRzIGFyZSB0YWtlbiBmcm9tIHRoZSBkZWZpbml0aW9uIG9mCisgKiBibG9ja19kZXZfZGVzY190IGluIGluY2x1ZGUvcGFydC5oLgorICovCitzdGF0aWMgdm9pZCB1c2JfYmluX2ZpeHVwKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGVzY3JpcHRvciwKKwkJCQl1bnNpZ25lZCBjaGFyIHZlbmRvcltdLAorCQkJCXVuc2lnbmVkIGNoYXIgcHJvZHVjdFtdKSB7CisJY29uc3QgdW5zaWduZWQgY2hhciBtYXhfdmVuZG9yX2xlbiA9IDQwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWF4X3Byb2R1Y3RfbGVuID0gMjA7CisJaWYgKGRlc2NyaXB0b3IuaWRWZW5kb3IgPT0gMHgwNDI0ICYmIGRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IDB4MjIzYSkgeworCQlzdHJuY3B5KHZlbmRvciwgIlNNU0MiLCBtYXhfdmVuZG9yX2xlbik7CisJCXN0cm5jcHkocHJvZHVjdCwgIkZsYXNoIE1lZGlhIENudHJsbGVyIiwgbWF4X3Byb2R1Y3RfbGVuKTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1VTQl9CSU5fRklYVVAgKi8KKwogI2RlZmluZSBVU0JfTUFYX1JFQURfQkxLIDIwCiAKIHVuc2lnbmVkIGxvbmcgdXNiX3N0b3JfcmVhZChpbnQgZGV2aWNlLCB1bnNpZ25lZCBsb25nIGJsa25yLCB1bnNpZ25lZCBsb25nIGJsa2NudCwgdW5zaWduZWQgbG9uZyAqYnVmZmVyKQpAQCAtMTEzOSw2ICsxMTYxLDEwIEBACiAJICAgIC8qIFVTQjAwNyBNaW5pLVVTQjIgRmxhc2ggRHJpdmUgKi8KIAkgICAgKGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSAweDA2NmYgJiYKIAkgICAgIGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gMHgyMDEwKQorCSAgICB8fAorCSAgICAvKiBTYW5EaXNrIENvcnBvcmF0aW9uIENydXplciBNaWNybyAyMDA0NDMxODQxMDU0NjYxMzk1MyAqLworCSAgICAoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IDB4MDc4MSAmJgorCSAgICAgZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSAweDUxNTEpCiAJICAgICkKIAkJVVNCX1NUT1JfUFJJTlRGKCJ1c2Jfc3Rvcl9nZXRfaW5mbzogc2tpcHBpbmcgUkVTRVQuLlxuIik7CiAJZWxzZQpAQCAtMTE2Nyw2ICsxMTkzLDkgQEAKIAlkZXZfZGVzYy0+dmVuZG9yWzhdID0gMDsKIAlkZXZfZGVzYy0+cHJvZHVjdFsxNl0gPSAwOwogCWRldl9kZXNjLT5yZXZpc2lvbls0XSA9IDA7CisjaWZkZWYgQ09ORklHX1VTQl9CSU5fRklYVVAKKwl1c2JfYmluX2ZpeHVwKGRldi0+ZGVzY3JpcHRvciwgZGV2X2Rlc2MtPnZlbmRvciwgZGV2X2Rlc2MtPnByb2R1Y3QpOworI2VuZGlmIC8qIENPTkZJR19VU0JfQklOX0ZJWFVQICovCiAJVVNCX1NUT1JfUFJJTlRGKCJJU08gVmVycyAlWCwgUmVzcG9uc2UgRGF0YSAlWFxuIix1c2Jfc3Rvcl9idWZbMl0sdXNiX3N0b3JfYnVmWzNdKTsKIAlpZih1c2JfdGVzdF91bml0X3JlYWR5KHBjY2Isc3MpKSB7CiAJCXByaW50ZigiRGV2aWNlIE5PVCByZWFkeVxuICAgUmVxdWVzdCBTZW5zZSByZXR1cm5lZCAlMDJYICUwMlggJTAyWFxuIixwY2NiLT5zZW5zZV9idWZbMl0scGNjYi0+c2Vuc2VfYnVmWzEyXSxwY2NiLT5zZW5zZV9idWZbMTNdKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi94eXpNb2RlbS5jIGIvY29tbW9uL3h5ek1vZGVtLmMKaW5kZXggOWI0NTVhMy4uYTIwOWRmYSAxMDA2NDQKLS0tIGEvY29tbW9uL3h5ek1vZGVtLmMKKysrIGIvY29tbW9uL3h5ek1vZGVtLmMKQEAgLTY5LDEzNSArNjksMTU3IEBACiAjZGVmaW5lIEJTUCAweDA4CiAjZGVmaW5lIE5BSyAweDE1CiAjZGVmaW5lIENBTiAweDE4Ci0jZGVmaW5lIEVPRiAweDFBICAvKiBeWiBmb3IgRE9TIG9mZmljaW9uYWRvcyAqLworI2RlZmluZSBFT0YgMHgxQQkJLyogXlogZm9yIERPUyBvZmZpY2lvbmFkb3MgKi8KIAogI2RlZmluZSBVU0VfWU1PREVNX0xFTkdUSAogCiAvKiBEYXRhICYgc3RhdGUgbG9jYWwgdG8gdGhlIHByb3RvY29sICovCi1zdGF0aWMgc3RydWN0IHsKK3N0YXRpYyBzdHJ1Y3QKK3sKICNpZmRlZiBSRURCT09UCi0gICAgaGFsX3ZpcnR1YWxfY29tbV90YWJsZV90KiBfX2NoYW47CisgIGhhbF92aXJ0dWFsX2NvbW1fdGFibGVfdCAqX19jaGFuOwogI2Vsc2UKLSAgICBpbnQgKl9fY2hhbjsKKyAgaW50ICpfX2NoYW47CiAjZW5kaWYKLSAgICB1bnNpZ25lZCBjaGFyIHBrdFsxMDI0XSwgKmJ1ZnA7Ci0gICAgdW5zaWduZWQgY2hhciBibGssY2JsayxjcmMxLGNyYzI7Ci0gICAgdW5zaWduZWQgY2hhciBuZXh0X2JsazsgIC8qIEV4cGVjdGVkIGJsb2NrICovCi0gICAgaW50IGxlbiwgbW9kZSwgdG90YWxfcmV0cmllczsKLSAgICBpbnQgdG90YWxfU09ILCB0b3RhbF9TVFgsIHRvdGFsX0NBTjsKLSAgICBib29sIGNyY19tb2RlLCBhdF9lb2YsIHR4X2FjazsKKyAgdW5zaWduZWQgY2hhciBwa3RbMTAyNF0sICpidWZwOworICB1bnNpZ25lZCBjaGFyIGJsaywgY2JsaywgY3JjMSwgY3JjMjsKKyAgdW5zaWduZWQgY2hhciBuZXh0X2JsazsJLyogRXhwZWN0ZWQgYmxvY2sgKi8KKyAgaW50IGxlbiwgbW9kZSwgdG90YWxfcmV0cmllczsKKyAgaW50IHRvdGFsX1NPSCwgdG90YWxfU1RYLCB0b3RhbF9DQU47CisgIGJvb2wgY3JjX21vZGUsIGF0X2VvZiwgdHhfYWNrOwogI2lmZGVmIFVTRV9ZTU9ERU1fTEVOR1RICi0gICAgdW5zaWduZWQgbG9uZyBmaWxlX2xlbmd0aCwgcmVhZF9sZW5ndGg7CisgIHVuc2lnbmVkIGxvbmcgZmlsZV9sZW5ndGgsIHJlYWRfbGVuZ3RoOwogI2VuZGlmCiB9IHh5ejsKIAotI2RlZmluZSB4eXpNb2RlbV9DSEFSX1RJTUVPVVQgICAgICAgICAgICAyMDAwICAvKiAyIHNlY29uZHMgKi8KKyNkZWZpbmUgeHl6TW9kZW1fQ0hBUl9USU1FT1VUICAgICAgICAgICAgMjAwMAkvKiAyIHNlY29uZHMgKi8KICNkZWZpbmUgeHl6TW9kZW1fTUFYX1JFVFJJRVMgICAgICAgICAgICAgMjAKICNkZWZpbmUgeHl6TW9kZW1fTUFYX1JFVFJJRVNfV0lUSF9DUkMgICAgMTAKLSNkZWZpbmUgeHl6TW9kZW1fQ0FOX0NPVU5UICAgICAgICAgICAgICAgIDMgICAgLyogV2FpdCBmb3IgMyBDQU4gYmVmb3JlIHF1aXR0aW5nICovCisjZGVmaW5lIHh5ek1vZGVtX0NBTl9DT1VOVCAgICAgICAgICAgICAgICAzCS8qIFdhaXQgZm9yIDMgQ0FOIGJlZm9yZSBxdWl0dGluZyAqLwogCiAKLSNpZm5kZWYgUkVEQk9PVCAgLypTQiAqLworI2lmbmRlZiBSRURCT09UCQkJLypTQiAqLwogdHlwZWRlZiBpbnQgY3lnX2ludDMyOwotaW50IENZR0FDQ19DT01NX0lGX0dFVENfVElNRU9VVCAoY2hhciBjaGFuLGNoYXIgKmMpIHsKK2ludAorQ1lHQUNDX0NPTU1fSUZfR0VUQ19USU1FT1VUIChjaGFyIGNoYW4sIGNoYXIgKmMpCit7CiAjZGVmaW5lIERFTEFZIDIwCi0JdW5zaWduZWQgbG9uZyBjb3VudGVyPTA7Ci0Jd2hpbGUgKCF0c3RjKCkgJiYgKGNvdW50ZXIgPCB4eXpNb2RlbV9DSEFSX1RJTUVPVVQqMTAwMC9ERUxBWSkpIHsKLQkJdWRlbGF5KERFTEFZKTsKLQkJY291bnRlcisrOwotCX0KLQlpZiAodHN0YygpKSB7Ci0JCSpjPWdldGMoKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOworICB1bnNpZ25lZCBsb25nIGNvdW50ZXIgPSAwOworICB3aGlsZSAoIXRzdGMgKCkgJiYgKGNvdW50ZXIgPCB4eXpNb2RlbV9DSEFSX1RJTUVPVVQgKiAxMDAwIC8gREVMQVkpKQorICAgIHsKKyAgICAgIHVkZWxheSAoREVMQVkpOworICAgICAgY291bnRlcisrOworICAgIH0KKyAgaWYgKHRzdGMgKCkpCisgICAgeworICAgICAgKmMgPSBnZXRjICgpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKIH0KIAotdm9pZCBDWUdBQ0NfQ09NTV9JRl9QVVRDKGNoYXIgeCxjaGFyIHkpIHsKLQlwdXRjKHkpOwordm9pZAorQ1lHQUNDX0NPTU1fSUZfUFVUQyAoY2hhciB4LCBjaGFyIHkpCit7CisgIHB1dGMgKHkpOwogfQogCiAvKiBWYWxpZGF0ZSBhIGhleCBjaGFyYWN0ZXIgKi8KIF9faW5saW5lX18gc3RhdGljIGJvb2wKLV9pc19oZXgoY2hhciBjKQorX2lzX2hleCAoY2hhciBjKQogewotICAgIHJldHVybiAoKChjID49ICcwJykgJiYgKGMgPD0gJzknKSkgfHwKLSAgICAgICAgICAgICgoYyA+PSAnQScpICYmIChjIDw9ICdGJykpIHx8Ci0gICAgICAgICAgICAoKGMgPj0gJ2EnKSAmJiAoYyA8PSAnZicpKSk7CisgIHJldHVybiAoKChjID49ICcwJykgJiYgKGMgPD0gJzknKSkgfHwKKwkgICgoYyA+PSAnQScpICYmIChjIDw9ICdGJykpIHx8ICgoYyA+PSAnYScpICYmIChjIDw9ICdmJykpKTsKIH0KIAogLyogQ29udmVydCBhIHNpbmdsZSBoZXggbmliYmxlICovCiBfX2lubGluZV9fIHN0YXRpYyBpbnQKLV9mcm9tX2hleChjaGFyIGMpCitfZnJvbV9oZXggKGNoYXIgYykKIHsKLSAgICBpbnQgcmV0ID0gMDsKKyAgaW50IHJldCA9IDA7CiAKLSAgICBpZiAoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKSB7Ci0gICAgICAgIHJldCA9IChjIC0gJzAnKTsKLSAgICB9IGVsc2UgaWYgKChjID49ICdhJykgJiYgKGMgPD0gJ2YnKSkgewotICAgICAgICByZXQgPSAoYyAtICdhJyArIDB4MGEpOwotICAgIH0gZWxzZSBpZiAoKGMgPj0gJ0EnKSAmJiAoYyA8PSAnRicpKSB7Ci0gICAgICAgIHJldCA9IChjIC0gJ0EnICsgMHgwQSk7CisgIGlmICgoYyA+PSAnMCcpICYmIChjIDw9ICc5JykpCisgICAgeworICAgICAgcmV0ID0gKGMgLSAnMCcpOwogICAgIH0KLSAgICByZXR1cm4gcmV0OworICBlbHNlIGlmICgoYyA+PSAnYScpICYmIChjIDw9ICdmJykpCisgICAgeworICAgICAgcmV0ID0gKGMgLSAnYScgKyAweDBhKTsKKyAgICB9CisgIGVsc2UgaWYgKChjID49ICdBJykgJiYgKGMgPD0gJ0YnKSkKKyAgICB7CisgICAgICByZXQgPSAoYyAtICdBJyArIDB4MEEpOworICAgIH0KKyAgcmV0dXJuIHJldDsKIH0KIAogLyogQ29udmVydCBhIGNoYXJhY3RlciB0byBsb3dlciBjYXNlICovCiBfX2lubGluZV9fIHN0YXRpYyBjaGFyCi1fdG9sb3dlcihjaGFyIGMpCitfdG9sb3dlciAoY2hhciBjKQogewotICAgIGlmICgoYyA+PSAnQScpICYmIChjIDw9ICdaJykpIHsKLSAgICAgICAgYyA9IChjIC0gJ0EnKSArICdhJzsKKyAgaWYgKChjID49ICdBJykgJiYgKGMgPD0gJ1onKSkKKyAgICB7CisgICAgICBjID0gKGMgLSAnQScpICsgJ2EnOwogICAgIH0KLSAgICByZXR1cm4gYzsKKyAgcmV0dXJuIGM7CiB9CiAKIC8qIFBhcnNlIChzY2FuKSBhIG51bWJlciAqLwogYm9vbAotcGFyc2VfbnVtKGNoYXIgKnMsIHVuc2lnbmVkIGxvbmcgKnZhbCwgY2hhciAqKmVzLCBjaGFyICpkZWxpbSkKK3BhcnNlX251bSAoY2hhciAqcywgdW5zaWduZWQgbG9uZyAqdmFsLCBjaGFyICoqZXMsIGNoYXIgKmRlbGltKQogewotICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgIGludCByYWRpeCA9IDEwOwotICAgIGNoYXIgYzsKLSAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7Ci0gICAgaW50IGRpZ2l0OworICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgaW50IHJhZGl4ID0gMTA7CisgIGNoYXIgYzsKKyAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOworICBpbnQgZGlnaXQ7CiAKLSAgICB3aGlsZSAoKnMgPT0gJyAnKSBzKys7Ci0gICAgd2hpbGUgKCpzKSB7Ci0gICAgICAgIGlmIChmaXJzdCAmJiAoc1swXSA9PSAnMCcpICYmIChfdG9sb3dlcihzWzFdKSA9PSAneCcpKSB7Ci0gICAgICAgICAgICByYWRpeCA9IDE2OwotICAgICAgICAgICAgcyArPSAyOwotICAgICAgICB9Ci0gICAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgICAgIGMgPSAqcysrOwotICAgICAgICBpZiAoX2lzX2hleChjKSAmJiAoKGRpZ2l0ID0gX2Zyb21faGV4KGMpKSA8IHJhZGl4KSkgewotICAgICAgICAgICAgLyogVmFsaWQgZGlnaXQgKi8KKyAgd2hpbGUgKCpzID09ICcgJykKKyAgICBzKys7CisgIHdoaWxlICgqcykKKyAgICB7CisgICAgICBpZiAoZmlyc3QgJiYgKHNbMF0gPT0gJzAnKSAmJiAoX3RvbG93ZXIgKHNbMV0pID09ICd4JykpCisJeworCSAgcmFkaXggPSAxNjsKKwkgIHMgKz0gMjsKKwl9CisgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgYyA9ICpzKys7CisgICAgICBpZiAoX2lzX2hleCAoYykgJiYgKChkaWdpdCA9IF9mcm9tX2hleCAoYykpIDwgcmFkaXgpKQorCXsKKwkgIC8qIFZhbGlkIGRpZ2l0ICovCiAjaWZkZWYgQ1lHUEtHX0hBTF9NSVBTCi0gICAgICAgICAgICAvKiBGSVhNRTogdHg0OSBjb21waWxlciBnZW5lcmF0ZXMgMHgyNTM5MDE4IGZvciBNVUwgd2hpY2ggKi8KLSAgICAgICAgICAgIC8qIGlzbid0IGFueSBnb29kLiAqLwotICAgICAgICAgICAgaWYgKDE2ID09IHJhZGl4KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCA8PCA0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IDEwICogcmVzdWx0OwotICAgICAgICAgICAgcmVzdWx0ICs9IGRpZ2l0OworCSAgLyogRklYTUU6IHR4NDkgY29tcGlsZXIgZ2VuZXJhdGVzIDB4MjUzOTAxOCBmb3IgTVVMIHdoaWNoICovCisJICAvKiBpc24ndCBhbnkgZ29vZC4gKi8KKwkgIGlmICgxNiA9PSByYWRpeCkKKwkgICAgcmVzdWx0ID0gcmVzdWx0IDw8IDQ7CisJICBlbHNlCisJICAgIHJlc3VsdCA9IDEwICogcmVzdWx0OworCSAgcmVzdWx0ICs9IGRpZ2l0OwogI2Vsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgKiByYWRpeCkgKyBkaWdpdDsKKwkgIHJlc3VsdCA9IChyZXN1bHQgKiByYWRpeCkgKyBkaWdpdDsKICNlbmRpZgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGRlbGltICE9IChjaGFyICopMCkgewotICAgICAgICAgICAgICAgIC8qIFNlZSBpZiB0aGlzIGNoYXJhY3RlciBpcyBvbmUgb2YgdGhlIGRlbGltaXRlcnMgKi8KLSAgICAgICAgICAgICAgICBjaGFyICpkcCA9IGRlbGltOwotICAgICAgICAgICAgICAgIHdoaWxlICgqZHAgJiYgKGMgIT0gKmRwKSkgZHArKzsKLSAgICAgICAgICAgICAgICBpZiAoKmRwKSBicmVhazsgIC8qIEZvdW5kIGEgZ29vZCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgIC8qIE1hbGZvcm1hdHRlZCBudW1iZXIgKi8KLSAgICAgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoZGVsaW0gIT0gKGNoYXIgKikgMCkKKwkgICAgeworCSAgICAgIC8qIFNlZSBpZiB0aGlzIGNoYXJhY3RlciBpcyBvbmUgb2YgdGhlIGRlbGltaXRlcnMgKi8KKwkgICAgICBjaGFyICpkcCA9IGRlbGltOworCSAgICAgIHdoaWxlICgqZHAgJiYgKGMgIT0gKmRwKSkKKwkJZHArKzsKKwkgICAgICBpZiAoKmRwKQorCQlicmVhazsJCS8qIEZvdW5kIGEgZ29vZCBkZWxpbWl0ZXIgKi8KKwkgICAgfQorCSAgcmV0dXJuIGZhbHNlOwkJLyogTWFsZm9ybWF0dGVkIG51bWJlciAqLworCX0KICAgICB9Ci0gICAgKnZhbCA9IHJlc3VsdDsKLSAgICBpZiAoZXMgIT0gKGNoYXIgKiopMCkgewotICAgICAgICAqZXMgPSBzOworICAqdmFsID0gcmVzdWx0OworICBpZiAoZXMgIT0gKGNoYXIgKiopIDApCisgICAgeworICAgICAgKmVzID0gczsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgIHJldHVybiB0cnVlOwogfQogCiAjZW5kaWYKQEAgLTIxMSwyNCArMjMzLDI2IEBACiAgKiBtZXNzYWdlcy4KICAqLwogc3RhdGljIGludAotem1fZHByaW50ZihjaGFyICpmbXQsIC4uLikKK3ptX2RwcmludGYgKGNoYXIgKmZtdCwgLi4uKQogewotICAgIGludCBjdXJfY29uc29sZTsKLSAgICB2YV9saXN0IGFyZ3M7CisgIGludCBjdXJfY29uc29sZTsKKyAgdmFfbGlzdCBhcmdzOwogCi0gICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CiAjaWZkZWYgUkVEQk9PVAotICAgIGN1cl9jb25zb2xlID0gQ1lHQUNDX0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTShDWUdOVU1fQ0FMTF9JRl9TRVRfQ09NTV9JRF9RVUVSWV9DVVJSRU5UKTsKLSAgICBDWUdBQ0NfQ0FMTF9JRl9TRVRfQ09OU09MRV9DT01NKDEpOworICBjdXJfY29uc29sZSA9CisgICAgQ1lHQUNDX0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTQorICAgIChDWUdOVU1fQ0FMTF9JRl9TRVRfQ09NTV9JRF9RVUVSWV9DVVJSRU5UKTsKKyAgQ1lHQUNDX0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTSAoMSk7CiAjZW5kaWYKLSAgICBkaWFnX3ZwcmludGYoZm10LCBhcmdzKTsKKyAgZGlhZ192cHJpbnRmIChmbXQsIGFyZ3MpOwogI2lmZGVmIFJFREJPT1QKLSAgICBDWUdBQ0NfQ0FMTF9JRl9TRVRfQ09OU09MRV9DT01NKGN1cl9jb25zb2xlKTsKKyAgQ1lHQUNDX0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTSAoY3VyX2NvbnNvbGUpOwogI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkCi16bV9mbHVzaCh2b2lkKQorem1fZmx1c2ggKHZvaWQpCiB7CiB9CiAKQEAgLTIzOCw0MiArMjYyLDQzIEBACiAgKi8KICNkZWZpbmUgRklOQUwKICNpZmRlZiBGSU5BTAotc3RhdGljIGNoYXIgKnptX291dCA9IChjaGFyICopMHgwMDM4MDAwMDsKLXN0YXRpYyBjaGFyICp6bV9vdXRfc3RhcnQgPSAoY2hhciAqKTB4MDAzODAwMDA7CitzdGF0aWMgY2hhciAqem1fb3V0ID0gKGNoYXIgKikgMHgwMDM4MDAwMDsKK3N0YXRpYyBjaGFyICp6bV9vdXRfc3RhcnQgPSAoY2hhciAqKSAweDAwMzgwMDAwOwogI2Vsc2UKIHN0YXRpYyBjaGFyIHptX2J1Zls4MTkyXTsKLXN0YXRpYyBjaGFyICp6bV9vdXQ9em1fYnVmOworc3RhdGljIGNoYXIgKnptX291dCA9IHptX2J1ZjsKIHN0YXRpYyBjaGFyICp6bV9vdXRfc3RhcnQgPSB6bV9idWY7CiAKICNlbmRpZgogc3RhdGljIGludAotem1fZHByaW50ZihjaGFyICpmbXQsIC4uLikKK3ptX2RwcmludGYgKGNoYXIgKmZtdCwgLi4uKQogewotICAgIGludCBsZW47Ci0gICAgdmFfbGlzdCBhcmdzOworICBpbnQgbGVuOworICB2YV9saXN0IGFyZ3M7CiAKLSAgICB2YV9zdGFydChhcmdzLCBmbXQpOwotICAgIGxlbiA9IGRpYWdfdnNwcmludGYoem1fb3V0LCBmbXQsIGFyZ3MpOwotICAgIHptX291dCArPSBsZW47Ci0gICAgcmV0dXJuIGxlbjsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisgIGxlbiA9IGRpYWdfdnNwcmludGYgKHptX291dCwgZm10LCBhcmdzKTsKKyAgem1fb3V0ICs9IGxlbjsKKyAgcmV0dXJuIGxlbjsKIH0KIAogc3RhdGljIHZvaWQKLXptX2ZsdXNoKHZvaWQpCit6bV9mbHVzaCAodm9pZCkKIHsKLSAgICBjaGFyICpwID0gem1fb3V0X3N0YXJ0OwogI2lmZGVmIFJFREJPT1QKLSAgICB3aGlsZSAoKnApIG1vbl93cml0ZV9jaGFyKCpwKyspOworICBjaGFyICpwID0gem1fb3V0X3N0YXJ0OworICB3aGlsZSAoKnApCisgICAgbW9uX3dyaXRlX2NoYXIgKCpwKyspOwogI2VuZGlmCi0gICAgem1fb3V0ID0gem1fb3V0X3N0YXJ0OworICB6bV9vdXQgPSB6bV9vdXRfc3RhcnQ7CiB9CiAjZW5kaWYKIAogc3RhdGljIHZvaWQKLXptX2R1bXBfYnVmKHZvaWQgKmJ1ZiwgaW50IGxlbikKK3ptX2R1bXBfYnVmICh2b2lkICpidWYsIGludCBsZW4pCiB7CiAjaWZkZWYgUkVEQk9PVAotICAgIGRpYWdfdmR1bXBfYnVmX3dpdGhfb2Zmc2V0KHptX2RwcmludGYsIGJ1ZiwgbGVuLCAwKTsKKyAgZGlhZ192ZHVtcF9idWZfd2l0aF9vZmZzZXQgKHptX2RwcmludGYsIGJ1ZiwgbGVuLCAwKTsKICNlbHNlCiAKICNlbmRpZgpAQCAtMjgzLDIyICszMDgsMjIgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICp6bV9icDsKIAogc3RhdGljIHZvaWQKLXptX25ldyh2b2lkKQorem1fbmV3ICh2b2lkKQogewotICAgIHptX2JwID0gem1fYnVmOworICB6bV9icCA9IHptX2J1ZjsKIH0KIAogc3RhdGljIHZvaWQKLXptX3NhdmUodW5zaWduZWQgY2hhciBjKQorem1fc2F2ZSAodW5zaWduZWQgY2hhciBjKQogewotICAgICp6bV9icCsrID0gYzsKKyAgKnptX2JwKysgPSBjOwogfQogCiBzdGF0aWMgdm9pZAotem1fZHVtcChpbnQgbGluZSkKK3ptX2R1bXAgKGludCBsaW5lKQogewotICAgIHptX2RwcmludGYoIlBhY2tldCBhdCBsaW5lOiAlZFxuIiwgbGluZSk7Ci0gICAgem1fZHVtcF9idWYoem1fYnVmLCB6bV9icC16bV9idWYpOworICB6bV9kcHJpbnRmICgiUGFja2V0IGF0IGxpbmU6ICVkXG4iLCBsaW5lKTsKKyAgem1fZHVtcF9idWYgKHptX2J1Ziwgem1fYnAgLSB6bV9idWYpOwogfQogCiAjZGVmaW5lIFpNX0RFQlVHKHgpIHgKQEAgLTMwOCw0MzkgKzMzMyw1MTcgQEAKIAogLyogV2FpdCBmb3IgdGhlIGxpbmUgdG8gZ28gaWRsZSAqLwogc3RhdGljIHZvaWQKLXh5ek1vZGVtX2ZsdXNoKHZvaWQpCit4eXpNb2RlbV9mbHVzaCAodm9pZCkKIHsKLSAgICBpbnQgcmVzOwotICAgIGNoYXIgYzsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICByZXMgPSBDWUdBQ0NfQ09NTV9JRl9HRVRDX1RJTUVPVVQoKnh5ei5fX2NoYW4sICZjKTsKLSAgICAgICAgaWYgKCFyZXMpIHJldHVybjsKKyAgaW50IHJlczsKKyAgY2hhciBjOworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICByZXMgPSBDWUdBQ0NfQ09NTV9JRl9HRVRDX1RJTUVPVVQgKCp4eXouX19jaGFuLCAmYyk7CisgICAgICBpZiAoIXJlcykKKwlyZXR1cm47CiAgICAgfQogfQogCiBzdGF0aWMgaW50Ci14eXpNb2RlbV9nZXRfaGRyKHZvaWQpCit4eXpNb2RlbV9nZXRfaGRyICh2b2lkKQogewotICAgIGNoYXIgYzsKLSAgICBpbnQgcmVzOwotICAgIGJvb2wgaGRyX2ZvdW5kID0gZmFsc2U7Ci0gICAgaW50IGksIGNhbl90b3RhbCwgaGRyX2NoYXJzOwotICAgIHVuc2lnbmVkIHNob3J0IGNrc3VtOworICBjaGFyIGM7CisgIGludCByZXM7CisgIGJvb2wgaGRyX2ZvdW5kID0gZmFsc2U7CisgIGludCBpLCBjYW5fdG90YWwsIGhkcl9jaGFyczsKKyAgdW5zaWduZWQgc2hvcnQgY2tzdW07CiAKLSAgICBaTV9ERUJVRyh6bV9uZXcoKSk7Ci0gICAgLyogRmluZCB0aGUgc3RhcnQgb2YgYSBoZWFkZXIgKi8KLSAgICBjYW5fdG90YWwgPSAwOwotICAgIGhkcl9jaGFycyA9IDA7CisgIFpNX0RFQlVHICh6bV9uZXcgKCkpOworICAvKiBGaW5kIHRoZSBzdGFydCBvZiBhIGhlYWRlciAqLworICBjYW5fdG90YWwgPSAwOworICBoZHJfY2hhcnMgPSAwOwogCi0gICAgaWYgKHh5ei50eF9hY2spIHsKLSAgICAgICAgQ1lHQUNDX0NPTU1fSUZfUFVUQygqeHl6Ll9fY2hhbiwgQUNLKTsKLSAgICAgICAgeHl6LnR4X2FjayA9IGZhbHNlOworICBpZiAoeHl6LnR4X2FjaykKKyAgICB7CisgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDICgqeHl6Ll9fY2hhbiwgQUNLKTsKKyAgICAgIHh5ei50eF9hY2sgPSBmYWxzZTsKICAgICB9Ci0gICAgd2hpbGUgKCFoZHJfZm91bmQpIHsKLSAgICAgICAgcmVzID0gQ1lHQUNDX0NPTU1fSUZfR0VUQ19USU1FT1VUKCp4eXouX19jaGFuLCAmYyk7Ci0gICAgICAgIFpNX0RFQlVHKHptX3NhdmUoYykpOwotICAgICAgICBpZiAocmVzKSB7Ci0gICAgICAgICAgICBoZHJfY2hhcnMrKzsKLSAgICAgICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAgY2FzZSBTT0g6Ci0gICAgICAgICAgICAgICAgeHl6LnRvdGFsX1NPSCsrOwotICAgICAgICAgICAgY2FzZSBTVFg6Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gU1RYKSB4eXoudG90YWxfU1RYKys7Ci0gICAgICAgICAgICAgICAgaGRyX2ZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ0FOOgotICAgICAgICAgICAgICAgIHh5ei50b3RhbF9DQU4rKzsKLSAgICAgICAgICAgICAgICBaTV9ERUJVRyh6bV9kdW1wKF9fTElORV9fKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCsrY2FuX3RvdGFsID09IHh5ek1vZGVtX0NBTl9DT1VOVCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4geHl6TW9kZW1fY2FuY2VsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgZm9yIG11bHRpcGxlIENBTiB0byBhdm9pZCBlYXJseSBxdWl0cyAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEVPVDoKLSAgICAgICAgICAgICAgICAvKiBFT1Qgb25seSBzdXBwb3J0ZWQgaWYgbm8gbm9pc2UgKi8KLSAgICAgICAgICAgICAgICBpZiAoaGRyX2NoYXJzID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1lHQUNDX0NPTU1fSUZfUFVUQygqeHl6Ll9fY2hhbiwgQUNLKTsKLSAgICAgICAgICAgICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiQUNLIG9uIEVPVCAjJWRcbiIsIF9fTElORV9fKSk7Ci0gICAgICAgICAgICAgICAgICAgIFpNX0RFQlVHKHptX2R1bXAoX19MSU5FX18pKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHh5ek1vZGVtX2VvZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIC8qIElnbm9yZSwgd2FpdGluZyBmb3Igc3RhcnQgb2YgaGVhZGVyICovCi0gICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogRGF0YSBzdHJlYW0gdGltZWQgb3V0ICovCi0gICAgICAgICAgICB4eXpNb2RlbV9mbHVzaCgpOyAgLyogVG9zcyBhbnkgY3VycmVudCBpbnB1dCAqLwotICAgICAgICAgICAgWk1fREVCVUcoem1fZHVtcChfX0xJTkVfXykpOwotICAgICAgICAgICAgQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMoKGN5Z19pbnQzMikyNTAwMDApOwotICAgICAgICAgICAgcmV0dXJuIHh5ek1vZGVtX3RpbWVvdXQ7Ci0gICAgICAgIH0KKyAgd2hpbGUgKCFoZHJfZm91bmQpCisgICAgeworICAgICAgcmVzID0gQ1lHQUNDX0NPTU1fSUZfR0VUQ19USU1FT1VUICgqeHl6Ll9fY2hhbiwgJmMpOworICAgICAgWk1fREVCVUcgKHptX3NhdmUgKGMpKTsKKyAgICAgIGlmIChyZXMpCisJeworCSAgaGRyX2NoYXJzKys7CisJICBzd2l0Y2ggKGMpCisJICAgIHsKKwkgICAgY2FzZSBTT0g6CisJICAgICAgeHl6LnRvdGFsX1NPSCsrOworCSAgICBjYXNlIFNUWDoKKwkgICAgICBpZiAoYyA9PSBTVFgpCisJCXh5ei50b3RhbF9TVFgrKzsKKwkgICAgICBoZHJfZm91bmQgPSB0cnVlOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIENBTjoKKwkgICAgICB4eXoudG90YWxfQ0FOKys7CisJICAgICAgWk1fREVCVUcgKHptX2R1bXAgKF9fTElORV9fKSk7CisJICAgICAgaWYgKCsrY2FuX3RvdGFsID09IHh5ek1vZGVtX0NBTl9DT1VOVCkKKwkJeworCQkgIHJldHVybiB4eXpNb2RlbV9jYW5jZWw7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBXYWl0IGZvciBtdWx0aXBsZSBDQU4gdG8gYXZvaWQgZWFybHkgcXVpdHMgKi8KKwkJICBicmVhazsKKwkJfQorCSAgICBjYXNlIEVPVDoKKwkgICAgICAvKiBFT1Qgb25seSBzdXBwb3J0ZWQgaWYgbm8gbm9pc2UgKi8KKwkgICAgICBpZiAoaGRyX2NoYXJzID09IDEpCisJCXsKKwkJICBDWUdBQ0NfQ09NTV9JRl9QVVRDICgqeHl6Ll9fY2hhbiwgQUNLKTsKKwkJICBaTV9ERUJVRyAoem1fZHByaW50ZiAoIkFDSyBvbiBFT1QgIyVkXG4iLCBfX0xJTkVfXykpOworCQkgIFpNX0RFQlVHICh6bV9kdW1wIChfX0xJTkVfXykpOworCQkgIHJldHVybiB4eXpNb2RlbV9lb2Y7CisJCX0KKwkgICAgZGVmYXVsdDoKKwkgICAgICAvKiBJZ25vcmUsIHdhaXRpbmcgZm9yIHN0YXJ0IG9mIGhlYWRlciAqLworCSAgICAgIDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBEYXRhIHN0cmVhbSB0aW1lZCBvdXQgKi8KKwkgIHh5ek1vZGVtX2ZsdXNoICgpOwkvKiBUb3NzIGFueSBjdXJyZW50IGlucHV0ICovCisJICBaTV9ERUJVRyAoem1fZHVtcCAoX19MSU5FX18pKTsKKwkgIENZR0FDQ19DQUxMX0lGX0RFTEFZX1VTICgoY3lnX2ludDMyKSAyNTAwMDApOworCSAgcmV0dXJuIHh5ek1vZGVtX3RpbWVvdXQ7CisJfQogICAgIH0KIAotICAgIC8qIEhlYWRlciBmb3VuZCwgbm93IHJlYWQgdGhlIGRhdGEgKi8KLSAgICByZXMgPSBDWUdBQ0NfQ09NTV9JRl9HRVRDX1RJTUVPVVQoKnh5ei5fX2NoYW4sIChjaGFyICopJnh5ei5ibGspOwotICAgIFpNX0RFQlVHKHptX3NhdmUoeHl6LmJsaykpOwotICAgIGlmICghcmVzKSB7Ci0gICAgICAgIFpNX0RFQlVHKHptX2R1bXAoX19MSU5FX18pKTsKLSAgICAgICAgcmV0dXJuIHh5ek1vZGVtX3RpbWVvdXQ7CisgIC8qIEhlYWRlciBmb3VuZCwgbm93IHJlYWQgdGhlIGRhdGEgKi8KKyAgcmVzID0gQ1lHQUNDX0NPTU1fSUZfR0VUQ19USU1FT1VUICgqeHl6Ll9fY2hhbiwgKGNoYXIgKikgJnh5ei5ibGspOworICBaTV9ERUJVRyAoem1fc2F2ZSAoeHl6LmJsaykpOworICBpZiAoIXJlcykKKyAgICB7CisgICAgICBaTV9ERUJVRyAoem1fZHVtcCAoX19MSU5FX18pKTsKKyAgICAgIHJldHVybiB4eXpNb2RlbV90aW1lb3V0OwogICAgIH0KLSAgICByZXMgPSBDWUdBQ0NfQ09NTV9JRl9HRVRDX1RJTUVPVVQoKnh5ei5fX2NoYW4sIChjaGFyICopJnh5ei5jYmxrKTsKLSAgICBaTV9ERUJVRyh6bV9zYXZlKHh5ei5jYmxrKSk7Ci0gICAgaWYgKCFyZXMpIHsKLSAgICAgICAgWk1fREVCVUcoem1fZHVtcChfX0xJTkVfXykpOwotICAgICAgICByZXR1cm4geHl6TW9kZW1fdGltZW91dDsKKyAgcmVzID0gQ1lHQUNDX0NPTU1fSUZfR0VUQ19USU1FT1VUICgqeHl6Ll9fY2hhbiwgKGNoYXIgKikgJnh5ei5jYmxrKTsKKyAgWk1fREVCVUcgKHptX3NhdmUgKHh5ei5jYmxrKSk7CisgIGlmICghcmVzKQorICAgIHsKKyAgICAgIFpNX0RFQlVHICh6bV9kdW1wIChfX0xJTkVfXykpOworICAgICAgcmV0dXJuIHh5ek1vZGVtX3RpbWVvdXQ7CiAgICAgfQotICAgIHh5ei5sZW4gPSAoYyA9PSBTT0gpID8gMTI4IDogMTAyNDsKLSAgICB4eXouYnVmcCA9IHh5ei5wa3Q7Ci0gICAgZm9yIChpID0gMDsgIGkgPCB4eXoubGVuOyAgaSsrKSB7Ci0gICAgICAgIHJlcyA9IENZR0FDQ19DT01NX0lGX0dFVENfVElNRU9VVCgqeHl6Ll9fY2hhbiwgJmMpOwotICAgICAgICBaTV9ERUJVRyh6bV9zYXZlKGMpKTsKLSAgICAgICAgaWYgKHJlcykgewotICAgICAgICAgICAgeHl6LnBrdFtpXSA9IGM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBaTV9ERUJVRyh6bV9kdW1wKF9fTElORV9fKSk7Ci0gICAgICAgICAgICByZXR1cm4geHl6TW9kZW1fdGltZW91dDsKLSAgICAgICAgfQorICB4eXoubGVuID0gKGMgPT0gU09IKSA/IDEyOCA6IDEwMjQ7CisgIHh5ei5idWZwID0geHl6LnBrdDsKKyAgZm9yIChpID0gMDsgaSA8IHh5ei5sZW47IGkrKykKKyAgICB7CisgICAgICByZXMgPSBDWUdBQ0NfQ09NTV9JRl9HRVRDX1RJTUVPVVQgKCp4eXouX19jaGFuLCAmYyk7CisgICAgICBaTV9ERUJVRyAoem1fc2F2ZSAoYykpOworICAgICAgaWYgKHJlcykKKwl7CisJICB4eXoucGt0W2ldID0gYzsKKwl9CisgICAgICBlbHNlCisJeworCSAgWk1fREVCVUcgKHptX2R1bXAgKF9fTElORV9fKSk7CisJICByZXR1cm4geHl6TW9kZW1fdGltZW91dDsKKwl9CiAgICAgfQotICAgIHJlcyA9IENZR0FDQ19DT01NX0lGX0dFVENfVElNRU9VVCgqeHl6Ll9fY2hhbiwgKGNoYXIgKikmeHl6LmNyYzEpOwotICAgIFpNX0RFQlVHKHptX3NhdmUoeHl6LmNyYzEpKTsKLSAgICBpZiAoIXJlcykgewotICAgICAgICBaTV9ERUJVRyh6bV9kdW1wKF9fTElORV9fKSk7Ci0gICAgICAgIHJldHVybiB4eXpNb2RlbV90aW1lb3V0OworICByZXMgPSBDWUdBQ0NfQ09NTV9JRl9HRVRDX1RJTUVPVVQgKCp4eXouX19jaGFuLCAoY2hhciAqKSAmeHl6LmNyYzEpOworICBaTV9ERUJVRyAoem1fc2F2ZSAoeHl6LmNyYzEpKTsKKyAgaWYgKCFyZXMpCisgICAgeworICAgICAgWk1fREVCVUcgKHptX2R1bXAgKF9fTElORV9fKSk7CisgICAgICByZXR1cm4geHl6TW9kZW1fdGltZW91dDsKICAgICB9Ci0gICAgaWYgKHh5ei5jcmNfbW9kZSkgewotICAgICAgICByZXMgPSBDWUdBQ0NfQ09NTV9JRl9HRVRDX1RJTUVPVVQoKnh5ei5fX2NoYW4sIChjaGFyICopJnh5ei5jcmMyKTsKLSAgICAgICAgWk1fREVCVUcoem1fc2F2ZSh4eXouY3JjMikpOwotICAgICAgICBpZiAoIXJlcykgewotICAgICAgICAgICAgWk1fREVCVUcoem1fZHVtcChfX0xJTkVfXykpOwotICAgICAgICAgICAgcmV0dXJuIHh5ek1vZGVtX3RpbWVvdXQ7Ci0gICAgICAgIH0KKyAgaWYgKHh5ei5jcmNfbW9kZSkKKyAgICB7CisgICAgICByZXMgPSBDWUdBQ0NfQ09NTV9JRl9HRVRDX1RJTUVPVVQgKCp4eXouX19jaGFuLCAoY2hhciAqKSAmeHl6LmNyYzIpOworICAgICAgWk1fREVCVUcgKHptX3NhdmUgKHh5ei5jcmMyKSk7CisgICAgICBpZiAoIXJlcykKKwl7CisJICBaTV9ERUJVRyAoem1fZHVtcCAoX19MSU5FX18pKTsKKwkgIHJldHVybiB4eXpNb2RlbV90aW1lb3V0OworCX0KICAgICB9Ci0gICAgWk1fREVCVUcoem1fZHVtcChfX0xJTkVfXykpOwotICAgIC8qIFZhbGlkYXRlIHRoZSBtZXNzYWdlICovCi0gICAgaWYgKCh4eXouYmxrIF4geHl6LmNibGspICE9ICh1bnNpZ25lZCBjaGFyKTB4RkYpIHsKLSAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiRnJhbWluZyBlcnJvciAtIGJsazogJXgvJXgvJXhcbiIsIHh5ei5ibGssIHh5ei5jYmxrLCAoeHl6LmJsayBeIHh5ei5jYmxrKSkpOwotICAgICAgICBaTV9ERUJVRyh6bV9kdW1wX2J1Zih4eXoucGt0LCB4eXoubGVuKSk7Ci0gICAgICAgIHh5ek1vZGVtX2ZsdXNoKCk7Ci0gICAgICAgIHJldHVybiB4eXpNb2RlbV9mcmFtZTsKKyAgWk1fREVCVUcgKHptX2R1bXAgKF9fTElORV9fKSk7CisgIC8qIFZhbGlkYXRlIHRoZSBtZXNzYWdlICovCisgIGlmICgoeHl6LmJsayBeIHh5ei5jYmxrKSAhPSAodW5zaWduZWQgY2hhcikgMHhGRikKKyAgICB7CisgICAgICBaTV9ERUJVRyAoem1fZHByaW50ZgorCQkoIkZyYW1pbmcgZXJyb3IgLSBibGs6ICV4LyV4LyV4XG4iLCB4eXouYmxrLCB4eXouY2JsaywKKwkJICh4eXouYmxrIF4geHl6LmNibGspKSk7CisgICAgICBaTV9ERUJVRyAoem1fZHVtcF9idWYgKHh5ei5wa3QsIHh5ei5sZW4pKTsKKyAgICAgIHh5ek1vZGVtX2ZsdXNoICgpOworICAgICAgcmV0dXJuIHh5ek1vZGVtX2ZyYW1lOwogICAgIH0KLSAgICAvKiBWZXJpZnkgY2hlY2tzdW0vQ1JDICovCi0gICAgaWYgKHh5ei5jcmNfbW9kZSkgewotICAgICAgICBja3N1bSA9IGN5Z19jcmMxNih4eXoucGt0LCB4eXoubGVuKTsKLSAgICAgICAgaWYgKGNrc3VtICE9ICgoeHl6LmNyYzEgPDwgOCkgfCB4eXouY3JjMikpIHsKLSAgICAgICAgICAgIFpNX0RFQlVHKHptX2RwcmludGYoIkNSQyBlcnJvciAtIHJlY3ZkOiAlMDJ4JTAyeCwgY29tcHV0ZWQ6ICV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXouY3JjMSwgeHl6LmNyYzIsIGNrc3VtICYgMHhGRkZGKSk7Ci0gICAgICAgICAgICByZXR1cm4geHl6TW9kZW1fY2tzdW07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBja3N1bSA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDA7ICBpIDwgeHl6LmxlbjsgIGkrKykgewotICAgICAgICAgICAgY2tzdW0gKz0geHl6LnBrdFtpXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeHl6LmNyYzEgIT0gKGNrc3VtICYgMHhGRikpIHsKLSAgICAgICAgICAgIFpNX0RFQlVHKHptX2RwcmludGYoIkNoZWNrc3VtIGVycm9yIC0gcmVjdmQ6ICV4LCBjb21wdXRlZDogJXhcbiIsIHh5ei5jcmMxLCBja3N1bSAmIDB4RkYpKTsKLSAgICAgICAgICAgIHJldHVybiB4eXpNb2RlbV9ja3N1bTsKLSAgICAgICAgfQorICAvKiBWZXJpZnkgY2hlY2tzdW0vQ1JDICovCisgIGlmICh4eXouY3JjX21vZGUpCisgICAgeworICAgICAgY2tzdW0gPSBjeWdfY3JjMTYgKHh5ei5wa3QsIHh5ei5sZW4pOworICAgICAgaWYgKGNrc3VtICE9ICgoeHl6LmNyYzEgPDwgOCkgfCB4eXouY3JjMikpCisJeworCSAgWk1fREVCVUcgKHptX2RwcmludGYgKCJDUkMgZXJyb3IgLSByZWN2ZDogJTAyeCUwMngsIGNvbXB1dGVkOiAleFxuIiwKKwkJCQl4eXouY3JjMSwgeHl6LmNyYzIsIGNrc3VtICYgMHhGRkZGKSk7CisJICByZXR1cm4geHl6TW9kZW1fY2tzdW07CisJfQogICAgIH0KLSAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIG1lc3NhZ2UgcGFzc2VzIFtzdHJ1Y3R1cmFsXSBtdXN0ZXIgKi8KLSAgICByZXR1cm4gMDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGNrc3VtID0gMDsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCB4eXoubGVuOyBpKyspCisJeworCSAgY2tzdW0gKz0geHl6LnBrdFtpXTsKKwl9CisgICAgICBpZiAoeHl6LmNyYzEgIT0gKGNrc3VtICYgMHhGRikpCisJeworCSAgWk1fREVCVUcgKHptX2RwcmludGYKKwkJICAgICgiQ2hlY2tzdW0gZXJyb3IgLSByZWN2ZDogJXgsIGNvbXB1dGVkOiAleFxuIiwgeHl6LmNyYzEsCisJCSAgICAgY2tzdW0gJiAweEZGKSk7CisJICByZXR1cm4geHl6TW9kZW1fY2tzdW07CisJfQorICAgIH0KKyAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBtZXNzYWdlIHBhc3NlcyBbc3RydWN0dXJhbF0gbXVzdGVyICovCisgIHJldHVybiAwOwogfQogCiBpbnQKLXh5ek1vZGVtX3N0cmVhbV9vcGVuKGNvbm5lY3Rpb25faW5mb190ICppbmZvLCBpbnQgKmVycikKK3h5ek1vZGVtX3N0cmVhbV9vcGVuIChjb25uZWN0aW9uX2luZm9fdCAqIGluZm8sIGludCAqZXJyKQogewogI2lmZGVmIFJFREJPT1QKLSAgICBpbnQgY29uc29sZV9jaGFuOworICBpbnQgY29uc29sZV9jaGFuOwogI2VuZGlmCi0gICAgaW50IHN0YXQgPSAwOwotICAgIGludCByZXRyaWVzID0geHl6TW9kZW1fTUFYX1JFVFJJRVM7Ci0gICAgaW50IGNyY19yZXRyaWVzID0geHl6TW9kZW1fTUFYX1JFVFJJRVNfV0lUSF9DUkM7CisgIGludCBzdGF0ID0gMDsKKyAgaW50IHJldHJpZXMgPSB4eXpNb2RlbV9NQVhfUkVUUklFUzsKKyAgaW50IGNyY19yZXRyaWVzID0geHl6TW9kZW1fTUFYX1JFVFJJRVNfV0lUSF9DUkM7CiAKIC8qICAgIFpNX0RFQlVHKHptX291dCA9IHptX291dF9zdGFydCk7ICovCiAjaWZkZWYgeHl6TW9kZW1fem1vZGVtCi0gICAgaWYgKGluZm8tPm1vZGUgPT0geHl6TW9kZW1fem1vZGVtKSB7Ci0gICAgICAgICplcnIgPSB4eXpNb2RlbV9ub1ptb2RlbTsKLSAgICAgICAgcmV0dXJuIC0xOworICBpZiAoaW5mby0+bW9kZSA9PSB4eXpNb2RlbV96bW9kZW0pCisgICAgeworICAgICAgKmVyciA9IHh5ek1vZGVtX25vWm1vZGVtOworICAgICAgcmV0dXJuIC0xOwogICAgIH0KICNlbmRpZgogCiAjaWZkZWYgUkVEQk9PVAotICAgIC8qIFNldCB1cCB0aGUgSS9PIGNoYW5uZWwuICBOb3RlOiB0aGlzIGFsbG93cyBmb3IgdXNpbmcgYSBkaWZmZXJlbnQgcG9ydCBpbiB0aGUgZnV0dXJlICovCi0gICAgY29uc29sZV9jaGFuID0gQ1lHQUNDX0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTShDWUdOVU1fQ0FMTF9JRl9TRVRfQ09NTV9JRF9RVUVSWV9DVVJSRU5UKTsKLSAgICBpZiAoaW5mby0+Y2hhbiA+PSAwKSB7Ci0gICAgICAgIENZR0FDQ19DQUxMX0lGX1NFVF9DT05TT0xFX0NPTU0oaW5mby0+Y2hhbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQ1lHQUNDX0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTShjb25zb2xlX2NoYW4pOworICAvKiBTZXQgdXAgdGhlIEkvTyBjaGFubmVsLiAgTm90ZTogdGhpcyBhbGxvd3MgZm9yIHVzaW5nIGEgZGlmZmVyZW50IHBvcnQgaW4gdGhlIGZ1dHVyZSAqLworICBjb25zb2xlX2NoYW4gPQorICAgIENZR0FDQ19DQUxMX0lGX1NFVF9DT05TT0xFX0NPTU0KKyAgICAoQ1lHTlVNX0NBTExfSUZfU0VUX0NPTU1fSURfUVVFUllfQ1VSUkVOVCk7CisgIGlmIChpbmZvLT5jaGFuID49IDApCisgICAgeworICAgICAgQ1lHQUNDX0NBTExfSUZfU0VUX0NPTlNPTEVfQ09NTSAoaW5mby0+Y2hhbik7CiAgICAgfQotICAgIHh5ei5fX2NoYW4gPSBDWUdBQ0NfQ0FMTF9JRl9DT05TT0xFX1BST0NTKCk7CisgIGVsc2UKKyAgICB7CisgICAgICBDWUdBQ0NfQ0FMTF9JRl9TRVRfQ09OU09MRV9DT01NIChjb25zb2xlX2NoYW4pOworICAgIH0KKyAgeHl6Ll9fY2hhbiA9IENZR0FDQ19DQUxMX0lGX0NPTlNPTEVfUFJPQ1MgKCk7CiAKLSAgICBDWUdBQ0NfQ0FMTF9JRl9TRVRfQ09OU09MRV9DT01NKGNvbnNvbGVfY2hhbik7Ci0gICAgQ1lHQUNDX0NPTU1fSUZfQ09OVFJPTCgqeHl6Ll9fY2hhbiwgX19DT01NQ1RMX1NFVF9USU1FT1VULCB4eXpNb2RlbV9DSEFSX1RJTUVPVVQpOworICBDWUdBQ0NfQ0FMTF9JRl9TRVRfQ09OU09MRV9DT01NIChjb25zb2xlX2NoYW4pOworICBDWUdBQ0NfQ09NTV9JRl9DT05UUk9MICgqeHl6Ll9fY2hhbiwgX19DT01NQ1RMX1NFVF9USU1FT1VULAorCQkJICB4eXpNb2RlbV9DSEFSX1RJTUVPVVQpOwogI2Vsc2UKIC8qIFRPRE86IENIRUNLICEgKi8KLSAgICBpbnQgZHVtbXk7Ci0gICAgeHl6Ll9fY2hhbj0mZHVtbXk7CisgIGludCBkdW1teTsKKyAgeHl6Ll9fY2hhbiA9ICZkdW1teTsKICNlbmRpZgotICAgIHh5ei5sZW4gPSAwOwotICAgIHh5ei5jcmNfbW9kZSA9IHRydWU7Ci0gICAgeHl6LmF0X2VvZiA9IGZhbHNlOwotICAgIHh5ei50eF9hY2sgPSBmYWxzZTsKLSAgICB4eXoubW9kZSA9IGluZm8tPm1vZGU7Ci0gICAgeHl6LnRvdGFsX3JldHJpZXMgPSAwOwotICAgIHh5ei50b3RhbF9TT0ggPSAwOwotICAgIHh5ei50b3RhbF9TVFggPSAwOwotICAgIHh5ei50b3RhbF9DQU4gPSAwOworICB4eXoubGVuID0gMDsKKyAgeHl6LmNyY19tb2RlID0gdHJ1ZTsKKyAgeHl6LmF0X2VvZiA9IGZhbHNlOworICB4eXoudHhfYWNrID0gZmFsc2U7CisgIHh5ei5tb2RlID0gaW5mby0+bW9kZTsKKyAgeHl6LnRvdGFsX3JldHJpZXMgPSAwOworICB4eXoudG90YWxfU09IID0gMDsKKyAgeHl6LnRvdGFsX1NUWCA9IDA7CisgIHh5ei50b3RhbF9DQU4gPSAwOwogI2lmZGVmIFVTRV9ZTU9ERU1fTEVOR1RICi0gICAgeHl6LnJlYWRfbGVuZ3RoID0gMDsKLSAgICB4eXouZmlsZV9sZW5ndGggPSAwOworICB4eXoucmVhZF9sZW5ndGggPSAwOworICB4eXouZmlsZV9sZW5ndGggPSAwOwogI2VuZGlmCiAKLSAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLCAoeHl6LmNyY19tb2RlID8gJ0MnIDogTkFLKSk7CisgIENZR0FDQ19DT01NX0lGX1BVVEMgKCp4eXouX19jaGFuLCAoeHl6LmNyY19tb2RlID8gJ0MnIDogTkFLKSk7CiAKLSAgICBpZiAoeHl6Lm1vZGUgPT0geHl6TW9kZW1feG1vZGVtKSB7Ci0JICAgIC8qIFgtbW9kZW0gZG9lc24ndCBoYXZlIGFuIGluZm9ybWF0aW9uIGhlYWRlciAtIGV4aXQgaGVyZSAqLwotICAgICAgICAgICAgeHl6Lm5leHRfYmxrID0gMTsKLSAgICAgICAgICAgIHJldHVybiAwOworICBpZiAoeHl6Lm1vZGUgPT0geHl6TW9kZW1feG1vZGVtKQorICAgIHsKKyAgICAgIC8qIFgtbW9kZW0gZG9lc24ndCBoYXZlIGFuIGluZm9ybWF0aW9uIGhlYWRlciAtIGV4aXQgaGVyZSAqLworICAgICAgeHl6Lm5leHRfYmxrID0gMTsKKyAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHdoaWxlIChyZXRyaWVzLS0gPiAwKSB7Ci0gICAgICAgIHN0YXQgPSB4eXpNb2RlbV9nZXRfaGRyKCk7Ci0gICAgICAgIGlmIChzdGF0ID09IDApIHsKLSAgICAgICAgICAgIC8qIFktbW9kZW0gZmlsZSBpbmZvcm1hdGlvbiBoZWFkZXIgKi8KLSAgICAgICAgICAgIGlmICh4eXouYmxrID09IDApIHsKKyAgd2hpbGUgKHJldHJpZXMtLSA+IDApCisgICAgeworICAgICAgc3RhdCA9IHh5ek1vZGVtX2dldF9oZHIgKCk7CisgICAgICBpZiAoc3RhdCA9PSAwKQorCXsKKwkgIC8qIFktbW9kZW0gZmlsZSBpbmZvcm1hdGlvbiBoZWFkZXIgKi8KKwkgIGlmICh4eXouYmxrID09IDApCisJICAgIHsKICNpZmRlZiBVU0VfWU1PREVNX0xFTkdUSAotICAgICAgICAgICAgICAgIC8qIHNraXAgZmlsZW5hbWUgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoKnh5ei5idWZwKyspOwotICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgbGVuZ3RoICovCi0gICAgICAgICAgICAgICAgcGFyc2VfbnVtKChjaGFyICopeHl6LmJ1ZnAsICZ4eXouZmlsZV9sZW5ndGgsIE5VTEwsICIgIik7CisJICAgICAgLyogc2tpcCBmaWxlbmFtZSAqLworCSAgICAgIHdoaWxlICgqeHl6LmJ1ZnArKyk7CisJICAgICAgLyogZ2V0IHRoZSBsZW5ndGggKi8KKwkgICAgICBwYXJzZV9udW0gKChjaGFyICopIHh5ei5idWZwLCAmeHl6LmZpbGVfbGVuZ3RoLCBOVUxMLCAiICIpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgLyogVGhlIHJlc3Qgb2YgdGhlIGZpbGUgbmFtZSBkYXRhIGJsb2NrIHF1aWV0bHkgZGlzY2FyZGVkICovCi0gICAgICAgICAgICAgICAgeHl6LnR4X2FjayA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4eXoubmV4dF9ibGsgPSAxOwotICAgICAgICAgICAgeHl6LmxlbiA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgIGlmIChzdGF0ID09IHh5ek1vZGVtX3RpbWVvdXQpIHsKLSAgICAgICAgICAgIGlmICgtLWNyY19yZXRyaWVzIDw9IDApIHh5ei5jcmNfbW9kZSA9IGZhbHNlOwotICAgICAgICAgICAgQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMoNSoxMDAwMDApOyAgIC8qIEV4dHJhIGRlbGF5IGZvciBzdGFydHVwICovCi0gICAgICAgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLCAoeHl6LmNyY19tb2RlID8gJ0MnIDogTkFLKSk7Ci0gICAgICAgICAgICB4eXoudG90YWxfcmV0cmllcysrOwotICAgICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiTkFLICglZClcbiIsIF9fTElORV9fKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXQgPT0geHl6TW9kZW1fY2FuY2VsKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCSAgICAgIC8qIFRoZSByZXN0IG9mIHRoZSBmaWxlIG5hbWUgZGF0YSBibG9jayBxdWlldGx5IGRpc2NhcmRlZCAqLworCSAgICAgIHh5ei50eF9hY2sgPSB0cnVlOworCSAgICB9CisJICB4eXoubmV4dF9ibGsgPSAxOworCSAgeHl6LmxlbiA9IDA7CisJICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChzdGF0ID09IHh5ek1vZGVtX3RpbWVvdXQpCisJeworCSAgaWYgKC0tY3JjX3JldHJpZXMgPD0gMCkKKwkgICAgeHl6LmNyY19tb2RlID0gZmFsc2U7CisJICBDWUdBQ0NfQ0FMTF9JRl9ERUxBWV9VUyAoNSAqIDEwMDAwMCk7CS8qIEV4dHJhIGRlbGF5IGZvciBzdGFydHVwICovCisJICBDWUdBQ0NfQ09NTV9JRl9QVVRDICgqeHl6Ll9fY2hhbiwgKHh5ei5jcmNfbW9kZSA/ICdDJyA6IE5BSykpOworCSAgeHl6LnRvdGFsX3JldHJpZXMrKzsKKwkgIFpNX0RFQlVHICh6bV9kcHJpbnRmICgiTkFLICglZClcbiIsIF9fTElORV9fKSk7CisJfQorICAgICAgaWYgKHN0YXQgPT0geHl6TW9kZW1fY2FuY2VsKQorCXsKKwkgIGJyZWFrOworCX0KICAgICB9Ci0gICAgKmVyciA9IHN0YXQ7Ci0gICAgWk1fREVCVUcoem1fZmx1c2goKSk7Ci0gICAgcmV0dXJuIC0xOworICAqZXJyID0gc3RhdDsKKyAgWk1fREVCVUcgKHptX2ZsdXNoICgpKTsKKyAgcmV0dXJuIC0xOwogfQogCiBpbnQKLXh5ek1vZGVtX3N0cmVhbV9yZWFkKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGludCAqZXJyKQoreHl6TW9kZW1fc3RyZWFtX3JlYWQgKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGludCAqZXJyKQogewotICAgIGludCBzdGF0LCB0b3RhbCwgbGVuOwotICAgIGludCByZXRyaWVzOworICBpbnQgc3RhdCwgdG90YWwsIGxlbjsKKyAgaW50IHJldHJpZXM7CiAKLSAgICB0b3RhbCA9IDA7Ci0gICAgc3RhdCA9IHh5ek1vZGVtX2NhbmNlbDsKLSAgICAvKiBUcnkgYW5kIGdldCAnc2l6ZScgYnl0ZXMgaW50byB0aGUgYnVmZmVyICovCi0gICAgd2hpbGUgKCF4eXouYXRfZW9mICYmIChzaXplID4gMCkpIHsKLSAgICAgICAgaWYgKHh5ei5sZW4gPT0gMCkgewotICAgICAgICAgICAgcmV0cmllcyA9IHh5ek1vZGVtX01BWF9SRVRSSUVTOwotICAgICAgICAgICAgd2hpbGUgKHJldHJpZXMtLSA+IDApIHsKLSAgICAgICAgICAgICAgICBzdGF0ID0geHl6TW9kZW1fZ2V0X2hkcigpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHh5ei5ibGsgPT0geHl6Lm5leHRfYmxrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4eXoudHhfYWNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFpNX0RFQlVHKHptX2RwcmludGYoIkFDSyBibG9jayAlZCAoJWQpXG4iLCB4eXouYmxrLCBfX0xJTkVfXykpOwotICAgICAgICAgICAgICAgICAgICAgICAgeHl6Lm5leHRfYmxrID0gKHh5ei5uZXh0X2JsayArIDEpICYgMHhGRjsKKyAgdG90YWwgPSAwOworICBzdGF0ID0geHl6TW9kZW1fY2FuY2VsOworICAvKiBUcnkgYW5kIGdldCAnc2l6ZScgYnl0ZXMgaW50byB0aGUgYnVmZmVyICovCisgIHdoaWxlICgheHl6LmF0X2VvZiAmJiAoc2l6ZSA+IDApKQorICAgIHsKKyAgICAgIGlmICh4eXoubGVuID09IDApCisJeworCSAgcmV0cmllcyA9IHh5ek1vZGVtX01BWF9SRVRSSUVTOworCSAgd2hpbGUgKHJldHJpZXMtLSA+IDApCisJICAgIHsKKwkgICAgICBzdGF0ID0geHl6TW9kZW1fZ2V0X2hkciAoKTsKKwkgICAgICBpZiAoc3RhdCA9PSAwKQorCQl7CisJCSAgaWYgKHh5ei5ibGsgPT0geHl6Lm5leHRfYmxrKQorCQkgICAgeworCQkgICAgICB4eXoudHhfYWNrID0gdHJ1ZTsKKwkJICAgICAgWk1fREVCVUcgKHptX2RwcmludGYKKwkJCQkoIkFDSyBibG9jayAlZCAoJWQpXG4iLCB4eXouYmxrLCBfX0xJTkVfXykpOworCQkgICAgICB4eXoubmV4dF9ibGsgPSAoeHl6Lm5leHRfYmxrICsgMSkgJiAweEZGOwogCiAjaWYgZGVmaW5lZCh4eXpNb2RlbV96bW9kZW0pIHx8IGRlZmluZWQoVVNFX1lNT0RFTV9MRU5HVEgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHl6Lm1vZGUgPT0geHl6TW9kZW1feG1vZGVtIHx8IHh5ei5maWxlX2xlbmd0aCA9PSAwKSB7CisJCSAgICAgIGlmICh4eXoubW9kZSA9PSB4eXpNb2RlbV94bW9kZW0gfHwgeHl6LmZpbGVfbGVuZ3RoID09IDApCisJCQl7CiAjZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEpIHsKKwkJICAgICAgaWYgKDEpCisJCQl7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRhIGJsb2NrcyBjYW4gYmUgcGFkZGVkIHdpdGggXlogKEVPRikgY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY29kZSB0cmllcyB0byBkZXRlY3QgYW5kIHJlbW92ZSB0aGVtICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4eXouYnVmcFt4eXoubGVuLTFdID09IEVPRikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHh5ei5idWZwW3h5ei5sZW4tMl0gPT0gRU9GKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeHl6LmJ1ZnBbeHl6Lmxlbi0zXSA9PSBFT0YpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh4eXoubGVuICYmICh4eXouYnVmcFt4eXoubGVuLTFdID09IEVPRikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh5ei5sZW4tLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCSAgLyogRGF0YSBibG9ja3MgY2FuIGJlIHBhZGRlZCB3aXRoIF5aIChFT0YpIGNoYXJhY3RlcnMgKi8KKwkJCSAgLyogVGhpcyBjb2RlIHRyaWVzIHRvIGRldGVjdCBhbmQgcmVtb3ZlIHRoZW0gKi8KKwkJCSAgaWYgKCh4eXouYnVmcFt4eXoubGVuIC0gMV0gPT0gRU9GKSAmJgorCQkJICAgICAgKHh5ei5idWZwW3h5ei5sZW4gLSAyXSA9PSBFT0YpICYmCisJCQkgICAgICAoeHl6LmJ1ZnBbeHl6LmxlbiAtIDNdID09IEVPRikpCisJCQkgICAgeworCQkJICAgICAgd2hpbGUgKHh5ei5sZW4KKwkJCQkgICAgICYmICh4eXouYnVmcFt4eXoubGVuIC0gMV0gPT0gRU9GKSkKKwkJCQl7CisJCQkJICB4eXoubGVuLS07CisJCQkJfQorCQkJICAgIH0KKwkJCX0KIAogI2lmZGVmIFVTRV9ZTU9ERU1fTEVOR1RICi0JCQkvKgotICAgICAgICAgICAgICAgICAgICAgICAgICogU2VlIGlmIGFjY3VtdWxhdGVkIGxlbmd0aCBleGNlZWRzIHRoYXQgb2YgdGhlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiBzbywgcmVkdWNlIHNpemUgKGkuZS4sIGN1dCBvdXQgcGFkIGJ5dGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICogT25seSBkbyB0aGlzIGZvciBZLW1vZGVtIChhbmQgWi1tb2RlbSBzaG91bGQgaXQgZXZlcgotICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgc3VwcG9ydGVkIHNpbmNlIGl0IGNhbiBmYWxsIGJhY2sgdG8gWS1tb2RlbSBtb2RlKS4KLQkJCSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHh5ei5tb2RlICE9IHh5ek1vZGVtX3htb2RlbSAmJiAwICE9IHh5ei5maWxlX2xlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh5ei5yZWFkX2xlbmd0aCArPSB4eXoubGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4eXoucmVhZF9sZW5ndGggPiB4eXouZmlsZV9sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHl6LmxlbiAtPSAoeHl6LnJlYWRfbGVuZ3RoIC0geHl6LmZpbGVfbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisJCSAgICAgIC8qCisJCSAgICAgICAqIFNlZSBpZiBhY2N1bXVsYXRlZCBsZW5ndGggZXhjZWVkcyB0aGF0IG9mIHRoZSBmaWxlLgorCQkgICAgICAgKiBJZiBzbywgcmVkdWNlIHNpemUgKGkuZS4sIGN1dCBvdXQgcGFkIGJ5dGVzKQorCQkgICAgICAgKiBPbmx5IGRvIHRoaXMgZm9yIFktbW9kZW0gKGFuZCBaLW1vZGVtIHNob3VsZCBpdCBldmVyCisJCSAgICAgICAqIGJlIHN1cHBvcnRlZCBzaW5jZSBpdCBjYW4gZmFsbCBiYWNrIHRvIFktbW9kZW0gbW9kZSkuCisJCSAgICAgICAqLworCQkgICAgICBpZiAoeHl6Lm1vZGUgIT0geHl6TW9kZW1feG1vZGVtICYmIDAgIT0geHl6LmZpbGVfbGVuZ3RoKQorCQkJeworCQkJICB4eXoucmVhZF9sZW5ndGggKz0geHl6LmxlbjsKKwkJCSAgaWYgKHh5ei5yZWFkX2xlbmd0aCA+IHh5ei5maWxlX2xlbmd0aCkKKwkJCSAgICB7CisJCQkgICAgICB4eXoubGVuIC09ICh4eXoucmVhZF9sZW5ndGggLSB4eXouZmlsZV9sZW5ndGgpOworCQkJICAgIH0KKwkJCX0KICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeHl6LmJsayA9PSAoKHh5ei5uZXh0X2JsayAtIDEpICYgMHhGRikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEp1c3QgcmUtQUNLIHRoaXMgc28gc2VuZGVyIHdpbGwgZ2V0IG9uIHdpdGggaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIENZR0FDQ19DT01NX0lGX1BVVEMoKnh5ei5fX2NoYW4sIEFDSyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8qIE5lZWQgbmV3IGhlYWRlciAqLwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9IHh5ek1vZGVtX3NlcXVlbmNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0ID09IHh5ek1vZGVtX2NhbmNlbCkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXQgPT0geHl6TW9kZW1fZW9mKSB7Ci0gICAgICAgICAgICAgICAgICAgIENZR0FDQ19DT01NX0lGX1BVVEMoKnh5ei5fX2NoYW4sIEFDSyk7Ci0gICAgICAgICAgICAgICAgICAgIFpNX0RFQlVHKHptX2RwcmludGYoIkFDSyAoJWQpXG4iLCBfX0xJTkVfXykpOwotICAgICAgICAgICAgICAgICAgICBpZiAoeHl6Lm1vZGUgPT0geHl6TW9kZW1feW1vZGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLCAoeHl6LmNyY19tb2RlID8gJ0MnIDogTkFLKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4eXoudG90YWxfcmV0cmllcysrOwotICAgICAgICAgICAgICAgICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiUmVhZGluZyBGaW5hbCBIZWFkZXJcbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQgPSB4eXpNb2RlbV9nZXRfaGRyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLCBBQ0spOwotICAgICAgICAgICAgICAgICAgICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiRklOQUwgQUNLICglZClcbiIsIF9fTElORV9fKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgeHl6LmF0X2VvZiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLCAoeHl6LmNyY19tb2RlID8gJ0MnIDogTkFLKSk7Ci0gICAgICAgICAgICAgICAgeHl6LnRvdGFsX3JldHJpZXMrKzsKLSAgICAgICAgICAgICAgICBaTV9ERUJVRyh6bV9kcHJpbnRmKCJOQUsgKCVkKVxuIiwgX19MSU5FX18pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0IDwgMCkgewotICAgICAgICAgICAgICAgICplcnIgPSBzdGF0OwotICAgICAgICAgICAgICAgIHh5ei5sZW4gPSAtMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyogRG9uJ3QgInJlYWQiIGRhdGEgZnJvbSB0aGUgRU9GIHByb3RvY29sIHBhY2thZ2UgKi8KLSAgICAgICAgaWYgKCF4eXouYXRfZW9mKSB7Ci0gICAgICAgICAgICBsZW4gPSB4eXoubGVuOwotICAgICAgICAgICAgaWYgKHNpemUgPCBsZW4pIGxlbiA9IHNpemU7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCB4eXouYnVmcCwgbGVuKTsKLSAgICAgICAgICAgIHNpemUgLT0gbGVuOwotICAgICAgICAgICAgYnVmICs9IGxlbjsKLSAgICAgICAgICAgIHRvdGFsICs9IGxlbjsKLSAgICAgICAgICAgIHh5ei5sZW4gLT0gbGVuOwotICAgICAgICAgICAgeHl6LmJ1ZnAgKz0gbGVuOwotICAgICAgICB9CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCQkgIGVsc2UgaWYgKHh5ei5ibGsgPT0gKCh4eXoubmV4dF9ibGsgLSAxKSAmIDB4RkYpKQorCQkgICAgeworCQkgICAgICAvKiBKdXN0IHJlLUFDSyB0aGlzIHNvIHNlbmRlciB3aWxsIGdldCBvbiB3aXRoIGl0ICovCisJCSAgICAgIENZR0FDQ19DT01NX0lGX1BVVEMgKCp4eXouX19jaGFuLCBBQ0spOworCQkgICAgICBjb250aW51ZTsJLyogTmVlZCBuZXcgaGVhZGVyICovCisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBzdGF0ID0geHl6TW9kZW1fc2VxdWVuY2U7CisJCSAgICB9CisJCX0KKwkgICAgICBpZiAoc3RhdCA9PSB4eXpNb2RlbV9jYW5jZWwpCisJCXsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIGlmIChzdGF0ID09IHh5ek1vZGVtX2VvZikKKwkJeworCQkgIENZR0FDQ19DT01NX0lGX1BVVEMgKCp4eXouX19jaGFuLCBBQ0spOworCQkgIFpNX0RFQlVHICh6bV9kcHJpbnRmICgiQUNLICglZClcbiIsIF9fTElORV9fKSk7CisJCSAgaWYgKHh5ei5tb2RlID09IHh5ek1vZGVtX3ltb2RlbSkKKwkJICAgIHsKKwkJICAgICAgQ1lHQUNDX0NPTU1fSUZfUFVUQyAoKnh5ei5fX2NoYW4sCisJCQkJCSAgICh4eXouY3JjX21vZGUgPyAnQycgOiBOQUspKTsKKwkJICAgICAgeHl6LnRvdGFsX3JldHJpZXMrKzsKKwkJICAgICAgWk1fREVCVUcgKHptX2RwcmludGYgKCJSZWFkaW5nIEZpbmFsIEhlYWRlclxuIikpOworCQkgICAgICBzdGF0ID0geHl6TW9kZW1fZ2V0X2hkciAoKTsKKwkJICAgICAgQ1lHQUNDX0NPTU1fSUZfUFVUQyAoKnh5ei5fX2NoYW4sIEFDSyk7CisJCSAgICAgIFpNX0RFQlVHICh6bV9kcHJpbnRmICgiRklOQUwgQUNLICglZClcbiIsIF9fTElORV9fKSk7CisJCSAgICB9CisJCSAgeHl6LmF0X2VvZiA9IHRydWU7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICBDWUdBQ0NfQ09NTV9JRl9QVVRDICgqeHl6Ll9fY2hhbiwgKHh5ei5jcmNfbW9kZSA/ICdDJyA6IE5BSykpOworCSAgICAgIHh5ei50b3RhbF9yZXRyaWVzKys7CisJICAgICAgWk1fREVCVUcgKHptX2RwcmludGYgKCJOQUsgKCVkKVxuIiwgX19MSU5FX18pKTsKKwkgICAgfQorCSAgaWYgKHN0YXQgPCAwKQorCSAgICB7CisJICAgICAgKmVyciA9IHN0YXQ7CisJICAgICAgeHl6LmxlbiA9IC0xOworCSAgICAgIHJldHVybiB0b3RhbDsKKwkgICAgfQorCX0KKyAgICAgIC8qIERvbid0ICJyZWFkIiBkYXRhIGZyb20gdGhlIEVPRiBwcm90b2NvbCBwYWNrYWdlICovCisgICAgICBpZiAoIXh5ei5hdF9lb2YpCisJeworCSAgbGVuID0geHl6LmxlbjsKKwkgIGlmIChzaXplIDwgbGVuKQorCSAgICBsZW4gPSBzaXplOworCSAgbWVtY3B5IChidWYsIHh5ei5idWZwLCBsZW4pOworCSAgc2l6ZSAtPSBsZW47CisJICBidWYgKz0gbGVuOworCSAgdG90YWwgKz0gbGVuOworCSAgeHl6LmxlbiAtPSBsZW47CisJICB4eXouYnVmcCArPSBsZW47CisJfQogICAgIH0KLSAgICByZXR1cm4gdG90YWw7CisgIHJldHVybiB0b3RhbDsKIH0KIAogdm9pZAoteHl6TW9kZW1fc3RyZWFtX2Nsb3NlKGludCAqZXJyKQoreHl6TW9kZW1fc3RyZWFtX2Nsb3NlIChpbnQgKmVycikKIHsKLSAgICBkaWFnX3ByaW50ZigieHl6TW9kZW0gLSAlcyBtb2RlLCAlZChTT0gpLyVkKFNUWCkvJWQoQ0FOKSBwYWNrZXRzLCAlZCByZXRyaWVzXG4iLAotICAgICAgICAgICAgICAgIHh5ei5jcmNfbW9kZSA/ICJDUkMiIDogIkNrc3VtIiwKLSAgICAgICAgICAgICAgICB4eXoudG90YWxfU09ILCB4eXoudG90YWxfU1RYLCB4eXoudG90YWxfQ0FOLAotICAgICAgICAgICAgICAgIHh5ei50b3RhbF9yZXRyaWVzKTsKLSAgICBaTV9ERUJVRyh6bV9mbHVzaCgpKTsKKyAgZGlhZ19wcmludGYKKyAgICAoInh5ek1vZGVtIC0gJXMgbW9kZSwgJWQoU09IKS8lZChTVFgpLyVkKENBTikgcGFja2V0cywgJWQgcmV0cmllc1xuIiwKKyAgICAgeHl6LmNyY19tb2RlID8gIkNSQyIgOiAiQ2tzdW0iLCB4eXoudG90YWxfU09ILCB4eXoudG90YWxfU1RYLAorICAgICB4eXoudG90YWxfQ0FOLCB4eXoudG90YWxfcmV0cmllcyk7CisgIFpNX0RFQlVHICh6bV9mbHVzaCAoKSk7CiB9CiAKIC8qIE5lZWQgdG8gYmUgYWJsZSB0byBjbGVhbiBvdXQgdGhlIGlucHV0IGJ1ZmZlciwgc28gaGF2ZSB0byB0YWtlIHRoZSAqLwogLyogZ2V0YyAqLwotdm9pZCB4eXpNb2RlbV9zdHJlYW1fdGVybWluYXRlKGJvb2wgYWJvcnQsIGludCAoKmdldGMpKHZvaWQpKQordm9pZAoreHl6TW9kZW1fc3RyZWFtX3Rlcm1pbmF0ZSAoYm9vbCBhYm9ydCwgaW50ICgqZ2V0YykgKHZvaWQpKQogewogICBpbnQgYzsKIAotICBpZiAoYWJvcnQpIHsKLSAgICAgIFpNX0RFQlVHKHptX2RwcmludGYoIiEhISEgVFJBTlNGRVIgQUJPUlQgISEhIVxuIikpOwotICAgICAgc3dpdGNoICh4eXoubW9kZSkgeworICBpZiAoYWJvcnQpCisgICAgeworICAgICAgWk1fREVCVUcgKHptX2RwcmludGYgKCIhISEhIFRSQU5TRkVSIEFCT1JUICEhISFcbiIpKTsKKyAgICAgIHN3aXRjaCAoeHl6Lm1vZGUpCisJewogCWNhc2UgeHl6TW9kZW1feG1vZGVtOgogCWNhc2UgeHl6TW9kZW1feW1vZGVtOgogCSAgLyogVGhlIFgvWU1PREVNIFNwZWMgc2VlbXMgdG8gc3VnZ2VzdCB0aGF0IG11bHRpcGxlIENBTiBmb2xsb3dlZCBieSBhbiBlcXVhbCAqLwogCSAgLyogbnVtYmVyIG9mIEJhY2tzcGFjZXMgaXMgYSBmcmllbmRseSB3YXkgdG8gZ2V0IHRoZSBvdGhlciBlbmQgdG8gYWJvcnQuICovCi0JICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLENBTik7Ci0JICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLENBTik7Ci0JICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLENBTik7Ci0JICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLENBTik7Ci0JICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLEJTUCk7Ci0JICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLEJTUCk7Ci0JICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLEJTUCk7Ci0JICBDWUdBQ0NfQ09NTV9JRl9QVVRDKCp4eXouX19jaGFuLEJTUCk7CisJICBDWUdBQ0NfQ09NTV9JRl9QVVRDICgqeHl6Ll9fY2hhbiwgQ0FOKTsKKwkgIENZR0FDQ19DT01NX0lGX1BVVEMgKCp4eXouX19jaGFuLCBDQU4pOworCSAgQ1lHQUNDX0NPTU1fSUZfUFVUQyAoKnh5ei5fX2NoYW4sIENBTik7CisJICBDWUdBQ0NfQ09NTV9JRl9QVVRDICgqeHl6Ll9fY2hhbiwgQ0FOKTsKKwkgIENZR0FDQ19DT01NX0lGX1BVVEMgKCp4eXouX19jaGFuLCBCU1ApOworCSAgQ1lHQUNDX0NPTU1fSUZfUFVUQyAoKnh5ei5fX2NoYW4sIEJTUCk7CisJICBDWUdBQ0NfQ09NTV9JRl9QVVRDICgqeHl6Ll9fY2hhbiwgQlNQKTsKKwkgIENZR0FDQ19DT01NX0lGX1BVVEMgKCp4eXouX19jaGFuLCBCU1ApOwogCSAgLyogTm93IGNvbnN1bWUgdGhlIHJlc3Qgb2Ygd2hhdCdzIHdhaXRpbmcgb24gdGhlIGxpbmUuICovCi0JICBaTV9ERUJVRyh6bV9kcHJpbnRmKCJGbHVzaGluZyBzZXJpYWwgbGluZS5cbiIpKTsKLQkgIHh5ek1vZGVtX2ZsdXNoKCk7Ci0gICAgICAgICAgeHl6LmF0X2VvZiA9IHRydWU7Ci0JYnJlYWs7CisJICBaTV9ERUJVRyAoem1fZHByaW50ZiAoIkZsdXNoaW5nIHNlcmlhbCBsaW5lLlxuIikpOworCSAgeHl6TW9kZW1fZmx1c2ggKCk7CisJICB4eXouYXRfZW9mID0gdHJ1ZTsKKwkgIGJyZWFrOwogI2lmZGVmIHh5ek1vZGVtX3ptb2RlbQogCWNhc2UgeHl6TW9kZW1fem1vZGVtOgogCSAgLyogTWlnaHQgc3VwcG9ydCBpdCBzb21lIGRheSBJIHN1cHBvc2UuICovCiAjZW5kaWYKLQlicmVhazsKLSAgICAgIH0KLSAgfSBlbHNlIHsKLSAgICAgIFpNX0RFQlVHKHptX2RwcmludGYoIkVuZ2FnaW5nIGNsZWFudXAgbW9kZS4uLlxuIikpOworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFpNX0RFQlVHICh6bV9kcHJpbnRmICgiRW5nYWdpbmcgY2xlYW51cCBtb2RlLi4uXG4iKSk7CiAgICAgICAvKgogICAgICAgICogQ29uc3VtZSBhbnkgdHJhaWxpbmcgY3JhcCBsZWZ0IGluIHRoZSBpbmJ1ZmZlciBmcm9tCiAgICAgICAgKiBwcmV2aW91cyByZWNpZXZlZCBibG9ja3MuIFNpbmNlIHZlcnkgZmV3IGZpbGVzIGFyZSBhbiBleGFjdCBtdWx0aXBsZQogICAgICAgICogb2YgdGhlIHRyYW5zZmVyIGJsb2NrIHNpemUsIHRoZXJlIHdpbGwgYWxtb3N0IGFsd2F5cyBiZSBzb21lIGd1bmsgaGVyZS4KICAgICAgICAqIElmIHdlIGRvbid0IGVhdCBpdCBub3csIFJlZEJvb3Qgd2lsbCB0aGluayB0aGUgdXNlciB0eXBlZCBpdC4KICAgICAgICAqLwotICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiVHJhaWxpbmcgZ3VuazpcbiIpKTsKLSAgICAgIHdoaWxlICgoYyA9ICgqZ2V0YykoKSkgPiAtMSkgOwotICAgICAgWk1fREVCVUcoem1fZHByaW50ZigiXG4iKSk7CisgICAgICBaTV9ERUJVRyAoem1fZHByaW50ZiAoIlRyYWlsaW5nIGd1bms6XG4iKSk7CisgICAgICB3aGlsZSAoKGMgPSAoKmdldGMpICgpKSA+IC0xKTsKKyAgICAgIFpNX0RFQlVHICh6bV9kcHJpbnRmICgiXG4iKSk7CiAgICAgICAvKgogICAgICAgICogTWFrZSBhIHNtYWxsIGRlbGF5IHRvIGdpdmUgdGVybWluYWwgcHJvZ3JhbXMgbGlrZSBtaW5pY29tCiAgICAgICAgKiB0aW1lIHRvIGdldCBjb250cm9sIGFnYWluIGFmdGVyIHRoZWlyIGZpbGUgdHJhbnNmZXIgcHJvZ3JhbQogICAgICAgICogZXhpdHMuCiAgICAgICAgKi8KLSAgICAgIENZR0FDQ19DQUxMX0lGX0RFTEFZX1VTKChjeWdfaW50MzIpMjUwMDAwKTsKLSAgfQorICAgICAgQ1lHQUNDX0NBTExfSUZfREVMQVlfVVMgKChjeWdfaW50MzIpIDI1MDAwMCk7CisgICAgfQogfQogCiBjaGFyICoKLXh5ek1vZGVtX2Vycm9yKGludCBlcnIpCit4eXpNb2RlbV9lcnJvciAoaW50IGVycikKIHsKLSAgICBzd2l0Y2ggKGVycikgeworICBzd2l0Y2ggKGVycikKKyAgICB7CiAgICAgY2FzZSB4eXpNb2RlbV9hY2Nlc3M6Ci0gICAgICAgIHJldHVybiAiQ2FuJ3QgYWNjZXNzIGZpbGUiOwotICAgICAgICBicmVhazsKKyAgICAgIHJldHVybiAiQ2FuJ3QgYWNjZXNzIGZpbGUiOworICAgICAgYnJlYWs7CiAgICAgY2FzZSB4eXpNb2RlbV9ub1ptb2RlbToKLSAgICAgICAgcmV0dXJuICJTb3JyeSwgek1vZGVtIG5vdCBhdmFpbGFibGUgeWV0IjsKLSAgICAgICAgYnJlYWs7CisgICAgICByZXR1cm4gIlNvcnJ5LCB6TW9kZW0gbm90IGF2YWlsYWJsZSB5ZXQiOworICAgICAgYnJlYWs7CiAgICAgY2FzZSB4eXpNb2RlbV90aW1lb3V0OgotICAgICAgICByZXR1cm4gIlRpbWVkIG91dCI7Ci0gICAgICAgIGJyZWFrOworICAgICAgcmV0dXJuICJUaW1lZCBvdXQiOworICAgICAgYnJlYWs7CiAgICAgY2FzZSB4eXpNb2RlbV9lb2Y6Ci0gICAgICAgIHJldHVybiAiRW5kIG9mIGZpbGUiOwotICAgICAgICBicmVhazsKKyAgICAgIHJldHVybiAiRW5kIG9mIGZpbGUiOworICAgICAgYnJlYWs7CiAgICAgY2FzZSB4eXpNb2RlbV9jYW5jZWw6Ci0gICAgICAgIHJldHVybiAiQ2FuY2VsbGVkIjsKLSAgICAgICAgYnJlYWs7CisgICAgICByZXR1cm4gIkNhbmNlbGxlZCI7CisgICAgICBicmVhazsKICAgICBjYXNlIHh5ek1vZGVtX2ZyYW1lOgotICAgICAgICByZXR1cm4gIkludmFsaWQgZnJhbWluZyI7Ci0gICAgICAgIGJyZWFrOworICAgICAgcmV0dXJuICJJbnZhbGlkIGZyYW1pbmciOworICAgICAgYnJlYWs7CiAgICAgY2FzZSB4eXpNb2RlbV9ja3N1bToKLSAgICAgICAgcmV0dXJuICJDUkMvY2hlY2tzdW0gZXJyb3IiOwotICAgICAgICBicmVhazsKKyAgICAgIHJldHVybiAiQ1JDL2NoZWNrc3VtIGVycm9yIjsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgeHl6TW9kZW1fc2VxdWVuY2U6Ci0gICAgICAgIHJldHVybiAiQmxvY2sgc2VxdWVuY2UgZXJyb3IiOwotICAgICAgICBicmVhazsKKyAgICAgIHJldHVybiAiQmxvY2sgc2VxdWVuY2UgZXJyb3IiOworICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJVbmtub3duIGVycm9yIjsKLSAgICAgICAgYnJlYWs7CisgICAgICByZXR1cm4gIlVua25vd24gZXJyb3IiOworICAgICAgYnJlYWs7CiAgICAgfQogfQogCiAvKgogICogUmVkQm9vdCBpbnRlcmZhY2UKICAqLwotI2lmIDAgLyogU0IgKi8KLUdFVENfSU9fRlVOQ1MoeHl6TW9kZW1faW8sIHh5ek1vZGVtX3N0cmVhbV9vcGVuLCB4eXpNb2RlbV9zdHJlYW1fY2xvc2UsCi0gICAgICAgICAgICAgIHh5ek1vZGVtX3N0cmVhbV90ZXJtaW5hdGUsIHh5ek1vZGVtX3N0cmVhbV9yZWFkLCB4eXpNb2RlbV9lcnJvcik7Ci1SZWRCb290X2xvYWQoeG1vZGVtLCB4eXpNb2RlbV9pbywgZmFsc2UsIGZhbHNlLCB4eXpNb2RlbV94bW9kZW0pOwotUmVkQm9vdF9sb2FkKHltb2RlbSwgeHl6TW9kZW1faW8sIGZhbHNlLCBmYWxzZSwgeHl6TW9kZW1feW1vZGVtKTsKKyNpZiAwCQkJCS8qIFNCICovCitHRVRDX0lPX0ZVTkNTICh4eXpNb2RlbV9pbywgeHl6TW9kZW1fc3RyZWFtX29wZW4sIHh5ek1vZGVtX3N0cmVhbV9jbG9zZSwKKwkgICAgICAgeHl6TW9kZW1fc3RyZWFtX3Rlcm1pbmF0ZSwgeHl6TW9kZW1fc3RyZWFtX3JlYWQsCisJICAgICAgIHh5ek1vZGVtX2Vycm9yKTsKK1JlZEJvb3RfbG9hZCAoeG1vZGVtLCB4eXpNb2RlbV9pbywgZmFsc2UsIGZhbHNlLCB4eXpNb2RlbV94bW9kZW0pOworUmVkQm9vdF9sb2FkICh5bW9kZW0sIHh5ek1vZGVtX2lvLCBmYWxzZSwgZmFsc2UsIHh5ek1vZGVtX3ltb2RlbSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbmZpZy5tayBiL2NvbmZpZy5tawppbmRleCBiNTk2NjdhLi4wZjVkMGY0IDEwMDY0NAotLS0gYS9jb25maWcubWsKKysrIGIvY29uZmlnLm1rCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDYgKzIzLDIyIEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAoraWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKK2lmZXEgKCQoQ1VSRElSKSwkKFNSQ1RSRUUpKQorZGlyIDo9IAorZWxzZQorZGlyIDo9ICQoc3Vic3QgJChTUkNUUkVFKS8sLCQoQ1VSRElSKSkKK2VuZGlmCisKK29iaiA6PSAkKGlmICQoZGlyKSwkKE9CSlRSRUUpLyQoZGlyKS8sJChPQkpUUkVFKS8pCitzcmMgOj0gJChpZiAkKGRpciksJChTUkNUUkVFKS8kKGRpcikvLCQoU1JDVFJFRSkvKQorCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKSkKK2Vsc2UKK29iaiA6PQorc3JjIDo9CitlbmRpZgorCiAjIGNsZWFuIHRoZSBzbGF0ZSAuLi4KIFBMQVRGT1JNX1JFTEZMQUdTID0KIFBMQVRGT1JNX0NQUEZMQUdTID0KQEAgLTExNiwxNyArMTMyLDI2IEBACiBPUFRGTEFHUz0gLU9zICMtZm9taXQtZnJhbWUtcG9pbnRlcgogaWZuZGVmIExEU0NSSVBUCiAjTERTQ1JJUFQgOj0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5sZHMuZGVidWcKK2lmZXEgKCQoQ09ORklHX05BTkRfVV9CT09UKSx5KQorTERTQ1JJUFQgOj0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC1uYW5kLmxkcworZWxzZQogTERTQ1JJUFQgOj0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5sZHMKIGVuZGlmCitlbmRpZgogT0JKQ0ZMQUdTICs9IC0tZ2FwLWZpbGw9MHhmZgogCiBnY2NpbmNkaXIgOj0gJChzaGVsbCAkKENDKSAtcHJpbnQtZmlsZS1uYW1lPWluY2x1ZGUpCiAKIENQUEZMQUdTIDo9ICQoREJHRkxBR1MpICQoT1BURkxBR1MpICQoUkVMRkxBR1MpCQlcCiAJLURfX0tFUk5FTF9fIC1EVEVYVF9CQVNFPSQoVEVYVF9CQVNFKQkJXAotCS1JJChUT1BESVIpL2luY2x1ZGUJCQkJXAotCS1mbm8tYnVpbHRpbiAtZmZyZWVzdGFuZGluZyAtbm9zdGRpbmMgLWlzeXN0ZW0JXAotCSQoZ2NjaW5jZGlyKSAtcGlwZSAkKFBMQVRGT1JNX0NQUEZMQUdTKQorCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorQ1BQRkxBR1MgKz0gLUkkKE9CSlRSRUUpL2luY2x1ZGUyIC1JJChPQkpUUkVFKS9pbmNsdWRlCitlbmRpZgorCitDUFBGTEFHUyArPSAtSSQoVE9QRElSKS9pbmNsdWRlCitDUFBGTEFHUyArPSAtZm5vLWJ1aWx0aW4gLWZmcmVlc3RhbmRpbmcgLW5vc3RkaW5jIAlcCisJLWlzeXN0ZW0gJChnY2NpbmNkaXIpIC1waXBlICQoUExBVEZPUk1fQ1BQRkxBR1MpCiAKIGlmZGVmIEJVSUxEX1RBRwogQ0ZMQUdTIDo9ICQoQ1BQRkxBR1MpIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgXApAQCAtMTkyLDExICsyMTcsMjMgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCitpZm5kZWYgUkVNT1RFX0JVSUxECisKICUuczoJJS5TCi0JJChDUFApICQoQUZMQUdTKSAtbyAkQCAkKENVUkRJUikvJDwKKwkkKENQUCkgJChBRkxBR1MpIC1vICRAICQ8CiAlLm86CSUuUwotCSQoQ0MpICQoQUZMQUdTKSAtYyAtbyAkQCAkKENVUkRJUikvJDwKKwkkKENDKSAkKEFGTEFHUykgLWMgLW8gJEAgJDwKICUubzoJJS5jCiAJJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CiAKK2Vsc2UKKworJChvYmopJS5zOgklLlMKKwkkKENQUCkgJChBRkxBR1MpIC1vICRAICQ8CiskKG9iaiklLm86CSUuUworCSQoQ0MpICQoQUZMQUdTKSAtYyAtbyAkQCAkPAorJChvYmopJS5vOgklLmMKKwkkKENDKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKK2VuZGlmCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS83NHh4Xzd4eC9NYWtlZmlsZSBiL2NwdS83NHh4Xzd4eC9NYWtlZmlsZQppbmRleCAwZTEwZDNhLi5lODJmZmZjIDEwMDY0NAotLS0gYS9jcHUvNzR4eF83eHgvTWFrZWZpbGUKKysrIGIvY3B1Lzc0eHhfN3h4L01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKEMpIENvcHlyaWdodCAyMDAxCiAjIEpvc2ggSHViZXIgPGh1YmVyQG1jbHguY29tPiwgTWlzc2lvbiBDcml0aWNhbCBMaW51eCwgSW5jLgogIwpAQCAtMjMsMjIgKzI2LDI2IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vCi1BU09CSlMJPSBjYWNoZS5vIGtnZGIubyBpby5vCi1PQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gaW50ZXJydXB0cy5vCitTT0JKUwk9IGNhY2hlLm8ga2dkYi5vIGlvLm8KK0NPQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gaW50ZXJydXB0cy5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKEFTT0JKUykgJChMSUIpCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJChBU09CSlMpICQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoQVNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvTWFrZWZpbGUgYi9jcHUvYXJtMTEzNi9NYWtlZmlsZQppbmRleCAyMDMyNzhlLi41ZDJjN2ViIDEwMDY0NAotLS0gYS9jcHUvYXJtMTEzNi9NYWtlZmlsZQorKysgYi9jcHUvYXJtMTEzNi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIxICsyMywyNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubwotT0JKUwk9IGludGVycnVwdHMubyBjcHUubworQ09CSlMJPSBpbnRlcnJ1cHRzLm8gY3B1Lm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykgJChTT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L2FybTcyMHQvTWFrZWZpbGUgYi9jcHUvYXJtNzIwdC9NYWtlZmlsZQppbmRleCBmMjczZDkyLi41MzlhNDhjIDEwMDY0NAotLS0gYS9jcHUvYXJtNzIwdC9NYWtlZmlsZQorKysgYi9jcHUvYXJtNzIwdC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMSArMjMsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLU9CSlMJPSBzZXJpYWwubyBzZXJpYWxfbmV0YXJtLm8gaW50ZXJydXB0cy5vIGNwdS5vCitDT0JKUwk9IHNlcmlhbC5vIHNlcmlhbF9uZXRhcm0ubyBpbnRlcnJ1cHRzLm8gY3B1Lm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykgJChTT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvTWFrZWZpbGUgYi9jcHUvYXJtOTIwdC9NYWtlZmlsZQppbmRleCA4ZjI1NmU5Li4xOTlmZTBjIDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9NYWtlZmlsZQorKysgYi9jcHUvYXJtOTIwdC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMSArMjMsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLU9CSlMJPSBjcHUubyBpbnRlcnJ1cHRzLm8KK0NPQkpTCT0gY3B1Lm8gaW50ZXJydXB0cy5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpICQoU09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvTWFrZWZpbGUgYi9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL01ha2VmaWxlCmluZGV4IGFlYzljYjYuLjI2YjBiOTQgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvTWFrZWZpbGUKKysrIGIvY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDUKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIyICsyMywyNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChTT0MpLmEKK0xJQgk9ICQob2JqKWxpYiQoU09DKS5hCiAKLU9CSlMJPSBiY201MjIxLm8gZG05MTYxLm8gZXRoZXIubyBpMmMubyBpbnRlcnJ1cHRzLm8gXAorQ09CSlMJPSBiY201MjIxLm8gZG05MTYxLm8gZXRoZXIubyBpMmMubyBpbnRlcnJ1cHRzLm8gXAogCSAgbHh0OTcyLm8gc2VyaWFsLm8gdXNiX29oY2kubwogU09CSlMJPSBsb3dsZXZlbF9pbml0Lm8KIAotYWxsOgkuZGVwZW5kICQoTElCKQorU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCithbGw6CSQob2JqKS5kZXBlbmQgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2lteC9NYWtlZmlsZSBiL2NwdS9hcm05MjB0L2lteC9NYWtlZmlsZQppbmRleCA4ODY1ZjgyLi5lMjM4ZmMwIDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9pbXgvTWFrZWZpbGUKKysrIGIvY3B1L2FybTkyMHQvaW14L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIwICsyMywyMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChTT0MpLmEKK0xJQgk9ICQob2JqKWxpYiQoU09DKS5hCiAKLU9CSlMJPSBnZW5lcmljLm8gaW50ZXJydXB0cy5vIHNlcmlhbC5vIHNwZWVkLm8KK0NPQkpTCT0gZ2VuZXJpYy5vIGludGVycnVwdHMubyBzZXJpYWwubyBzcGVlZC5vCiAKLWFsbDoJLmRlcGVuZCAkKExJQikKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChMSUIpCiAKICQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2tzODY5NS9NYWtlZmlsZSBiL2NwdS9hcm05MjB0L2tzODY5NS9NYWtlZmlsZQppbmRleCBhYzQ5MDYwLi42MzQyNDM1IDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9rczg2OTUvTWFrZWZpbGUKKysrIGIvY3B1L2FybTkyMHQva3M4Njk1L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjEgKzIzLDI0IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKFNPQykuYQorTElCCT0gJChvYmopbGliJChTT0MpLmEKIAotT0JKUwk9IGludGVycnVwdHMubyBzZXJpYWwubworQ09CSlMJPSBpbnRlcnJ1cHRzLm8gc2VyaWFsLm8KIFNPQkpTCT0gbG93bGV2ZWxfaW5pdC5vCiAKLWFsbDoJLmRlcGVuZCAkKExJQikKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQorYWxsOgkkKG9iaikuZGVwZW5kICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9zM2MyNHgwL01ha2VmaWxlIGIvY3B1L2FybTkyMHQvczNjMjR4MC9NYWtlZmlsZQppbmRleCBhZjllNGVmLi41NTcyOThlIDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9zM2MyNHgwL01ha2VmaWxlCisrKyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjEgKzIzLDI0IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKFNPQykuYQorTElCCT0gJChvYmopbGliJChTT0MpLmEKIAotT0JKUwk9IGkyYy5vIGludGVycnVwdHMubyBzZXJpYWwubyBzcGVlZC5vIFwKK0NPQkpTCT0gaTJjLm8gaW50ZXJydXB0cy5vIHNlcmlhbC5vIHNwZWVkLm8gXAogCSAgdXNiX29oY2kubwogCi1hbGw6CS5kZXBlbmQgJChMSUIpCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9zM2MyNHgwL2ludGVycnVwdHMuYyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvaW50ZXJydXB0cy5jCmluZGV4IDNlYzliNTQuLjFiMzY0MTIgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjB0L3MzYzI0eDAvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvaW50ZXJydXB0cy5jCkBAIC0xNzYsNyArMTc2LDkgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNREsyNDAwKSB8fCBkZWZpbmVkKENPTkZJR19UUkFCKQogCXRiY2xrID0gdGltZXJfbG9hZF92YWwgKiAxMDA7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TTURLMjQxMCkgfHwgZGVmaW5lZChDT05GSUdfVkNNQTkpCisjZWxpZiBkZWZpbmVkKENPTkZJR19TQkMyNDEwWCkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfU01ESzI0MTApIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX1ZDTUE5KQogCXRiY2xrID0gQ0ZHX0haOwogI2Vsc2UKICMJZXJyb3IgInRiY2xrIG5vdCBjb25maWd1cmVkIgpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNXQvTWFrZWZpbGUgYi9jcHUvYXJtOTI1dC9NYWtlZmlsZQppbmRleCBhMWRiODE4Li4wODZiMWEzIDEwMDY0NAotLS0gYS9jcHUvYXJtOTI1dC9NYWtlZmlsZQorKysgYi9jcHUvYXJtOTI1dC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIxICsyMywyNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubwotT0JKUwk9IGludGVycnVwdHMubyBjcHUubyBvbWFwOTI1Lm8KK0NPQkpTCT0gaW50ZXJydXB0cy5vIGNwdS5vIG9tYXA5MjUubwogCi1hbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvYXJtOTI2ZWpzL01ha2VmaWxlIGIvY3B1L2FybTkyNmVqcy9NYWtlZmlsZQppbmRleCAwNjBmZDIwLi5hNDEwYzJmIDEwMDY0NAotLS0gYS9jcHUvYXJtOTI2ZWpzL01ha2VmaWxlCisrKyBiL2NwdS9hcm05MjZlanMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMSArMjMsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLU9CSlMJPSBpbnRlcnJ1cHRzLm8gY3B1Lm8gY3B1aW5mby5vCitDT0JKUwk9IGludGVycnVwdHMubyBjcHUubyBjcHVpbmZvLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykgJChTT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9vbWFwL01ha2VmaWxlIGIvY3B1L2FybTkyNmVqcy9vbWFwL01ha2VmaWxlCmluZGV4IGY5ZDMzNzguLjdlY2EyZjAgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjZlanMvb21hcC9NYWtlZmlsZQorKysgYi9jcHUvYXJtOTI2ZWpzL29tYXAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA1CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMSArMjMsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoU09DKS5hCitMSUIJPSAkKG9iailsaWIkKFNPQykuYQogCi1PQkpTCT0gdGltZXIubworQ09CSlMJPSB0aW1lci5vCiBTT0JKUwk9IHJlc2V0Lm8KIAotYWxsOgkuZGVwZW5kICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykgJChTT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCithbGw6CSQob2JqKS5kZXBlbmQgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMvdmVyc2F0aWxlL01ha2VmaWxlIGIvY3B1L2FybTkyNmVqcy92ZXJzYXRpbGUvTWFrZWZpbGUKaW5kZXggZjlkMzM3OC4uN2VjYTJmMCAxMDA2NDQKLS0tIGEvY3B1L2FybTkyNmVqcy92ZXJzYXRpbGUvTWFrZWZpbGUKKysrIGIvY3B1L2FybTkyNmVqcy92ZXJzYXRpbGUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA1CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMSArMjMsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoU09DKS5hCitMSUIJPSAkKG9iailsaWIkKFNPQykuYQogCi1PQkpTCT0gdGltZXIubworQ09CSlMJPSB0aW1lci5vCiBTT0JKUwk9IHJlc2V0Lm8KIAotYWxsOgkuZGVwZW5kICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykgJChTT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCithbGw6CSQob2JqKS5kZXBlbmQgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05NDZlcy9NYWtlZmlsZSBiL2NwdS9hcm05NDZlcy9NYWtlZmlsZQppbmRleCAyMDMyNzhlLi41ZDJjN2ViIDEwMDY0NAotLS0gYS9jcHUvYXJtOTQ2ZXMvTWFrZWZpbGUKKysrIGIvY3B1L2FybTk0NmVzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjEgKzIzLDI1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vCi1PQkpTCT0gaW50ZXJydXB0cy5vIGNwdS5vCitDT0JKUwk9IGludGVycnVwdHMubyBjcHUubwogCi1hbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSAkKFNPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvYXJtX2ludGNtL01ha2VmaWxlIGIvY3B1L2FybV9pbnRjbS9NYWtlZmlsZQppbmRleCAyMDMyNzhlLi41ZDJjN2ViIDEwMDY0NAotLS0gYS9jcHUvYXJtX2ludGNtL01ha2VmaWxlCisrKyBiL2NwdS9hcm1faW50Y20vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMSArMjMsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLU9CSlMJPSBpbnRlcnJ1cHRzLm8gY3B1Lm8KK0NPQkpTCT0gaW50ZXJydXB0cy5vIGNwdS5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpICQoU09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9iZjUzMy9NYWtlZmlsZSBiL2NwdS9iZjUzMy9NYWtlZmlsZQppbmRleCBjNjNhOGY2Li5hNWM0OGRjIDEwMDY0NAotLS0gYS9jcHUvYmY1MzMvTWFrZWZpbGUKKysrIGIvY3B1L2JmNTMzL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIwogIyBDb3B5cmlnaHQgKGMpIDIwMDUgYmxhY2tmaW4udWNsaW51eC5vcmcKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI2LDIxICsyNiwyNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubyBzdGFydDEubyBpbnRlcnJ1cHQubyBjYWNoZS5vIGNwbGJoZGxyLm8gY3BsYm1nci5vIGZsdXNoLm8KLU9CSlMJPSBjcHUubyB0cmFwcy5vIGludHMubyBzZXJpYWwubyBpbnRlcnJ1cHRzLm8KK0NPQkpTCT0gY3B1Lm8gdHJhcHMubyBpbnRzLm8gc2VyaWFsLm8gaW50ZXJydXB0cy5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L01ha2VmaWxlIGIvY3B1L2kzODYvTWFrZWZpbGUKaW5kZXggYzQ0NDEyYS4uY2Q0NmRlYSAxMDA2NDQKLS0tIGEvY3B1L2kzODYvTWFrZWZpbGUKKysrIGIvY3B1L2kzODYvTWFrZWZpbGUKQEAgLTEsNCArMSw3IEBACiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIyAKICMgKEMpIENvcHlyaWdodCAyMDAyCiAjIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KICMKQEAgLTIzLDIyICsyNiwyNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubyBzdGFydDE2Lm8gcmVzZXQubwogQ09CSlMJPSBzZXJpYWwubyBpbnRlcnJ1cHRzLm8gY3B1Lm8gdGltZXIubyBzYzUyMC5vCi1BT0JKUwk9IHNjNTIwX2FzbS5vCitTT0JKUwk9IHNjNTIwX2FzbS5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQogCi0kKExJQik6CSQoQ09CSlMpICQoQU9CSlMpCi0JJChBUikgY3J2ICRAICQoQ09CSlMpICQoQU9CSlMpCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChDT0JKUzoubz0uYykgJChBT0JKUzoubz0uUykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoQ09CSlM6Lm89LmMpICQoQU9CSlM6Lm89LlMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvc2M1MjAuYyBiL2NwdS9pMzg2L3NjNTIwLmMKaW5kZXggYzgzZjBiYi4uZDBhNzM0MSAxMDA2NDQKLS0tIGEvY3B1L2kzODYvc2M1MjAuYworKysgYi9jcHUvaTM4Ni9zYzUyMC5jCkBAIC0zMSw3ICszMSw5IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8cGNpLmg+CisjaWZkZWYgQ09ORklHX1NDNTIwX1NTSQogI2luY2x1ZGUgPHNzaS5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pYy9zYzUyMC5oPgpAQCAtMTQzLDcgKzE0NSwxNSBAQAogCiAJdTMyIGRyYW1fcHJlc2VudD0wOwogCXUzMiBkcmFtX2N0cmw7Ci0KKyNpZmRlZiBDRkdfU0RSQU1fRFJDVE1DVEwKKwkvKiB0aGVzZSBtZW1vcnkgY29udHJvbCByZWdpc3RlcnMgYXJlIHNldCB1cCBpbiB0aGUgYXNzZW1iZXIgcGFydCwKKwkgKiBpbiBzYzUyMF9hc20uUywgZHVyaW5nICdtZW1faW5pdCcuICBJZiB3ZSBtdWNrIHdpdGggdGhlbSBoZXJlLAorCSAqIGFmdGVyIHdlIGFyZSBydW5uaW5nIGEgc3RhY2sgaW4gUkFNLCB3ZSBoYXZlIHRyb3VibGVzLiAgQmVzaWRlcywKKwkgKiB0aGVzZSByZWZyZXNoIGFuZCBkZWxheSB2YWx1ZXMgYXJlIGJldHRlciA/IHNpbXBseSBzcGVjaWZpZWQKKwkgKiBvdXRyaWdodCBpbiB0aGUgaW5jbHVkZS9jb25maWdzL3tjZmd9IGZpbGUgc2luY2UgdGhlIEhXIGRlc2lnbmVyCisJICogc2ltcGx5IGRpY3RhdGVzIGl0LgorCSAqLworI2Vsc2UKIAlpbnQgdmFsOwogCiAJaW50IGNhc19wcmVjaGFyZ2VfZGVsYXkgPSBDRkdfU0RSQU1fUFJFQ0hBUkdFX0RFTEFZOwpAQCAtMTYyLDYgKzE3Miw3IEBACiAJfSBlbHNlIHsKIAkJdmFsID0gMzsgIC8qIDYyLjR1cyAqLwogCX0KKwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9EUkNDVEwsIChyZWFkX21tY3JfYnl0ZShTQzUyMF9EUkNDVEwpICYgMHhjZikgfCAodmFsPDw0KSk7CiAKIAl2YWwgPSByZWFkX21tY3JfYnl0ZShTQzUyMF9EUkNUTUNUTCk7CkBAIC0xODEsMTMgKzE5MiwxMiBAQAogCQl2YWwgfD0gMTsKIAl9CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RSQ1RNQ1RMLCB2YWwpOwotCisjZW5kaWYKIAogCS8qIFdlIHJlYWQtYmFjayB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZHJhbQogCSAqIGNvbnRyb2xsZXIgdGhhdCB0aGUgYXNzZW1ibHkgY29kZSB3cm90ZSAqLwogCWRyYW1fY3RybCA9IHJlYWRfbW1jcl9sb25nKFNDNTIwX0RSQ0JFTkRBRFIpOwogCi0KIAliZC0+YmlfZHJhbVswXS5zdGFydCA9IDA7CiAJaWYgKGRyYW1fY3RybCAmIDB4ODApIHsKIAkJLyogYmFuayAwIGVuYWJsZWQgKi8KQEAgLTI3NCw3ICsyODQsNyBAQAogewogCWludCBpOwogCi0jIGlmIDAKKyMgaWYgMQogCXByaW50Zigic2V0X2lycSgpOiBtYXAgSU5UJWMgdG8gSVJRJWRcbiIsIHBjaV9waW4gKyAnQScsIGlycSk7CiAjZW5kaWYKIAlpZiAoaXJxIDwgMCB8fCBpcnEgPiAxNSkgewpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvc2M1MjBfYXNtLlMgYi9jcHUvaTM4Ni9zYzUyMF9hc20uUwppbmRleCA4MDQ2NGZhLi44ZmM3MTNkIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9zYzUyMF9hc20uUworKysgYi9jcHUvaTM4Ni9zYzUyMF9hc20uUwpAQCAtMTEzLDYgKzExMyw3IEBACiAuZXF1ICAgICAgICAgICAgRFJDQ0ZHLCAgICAgMHgwZmZmZWYwMTQgICAvKiBEUkFNIGJhbmsgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwogLmVxdSAgICAgICAgICAgIERSQ0JFTkRBRFIsIDB4MGZmZmVmMDE4ICAgLyogRFJBTSBiYW5rIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICovCiAuZXF1ICAgICAgICAgICAgRUNDQ1RMLCAgICAgMHgwZmZmZWYwMjAgICAvKiBEUkFNIEVDQyBjb250cm9sIHJlZ2lzdGVyICovCisuZXF1ICAgICAgICAgICAgRUNDSU5ULCAgICAgMHgwZmZmZWZkMTggICAvKiBEUkFNIEVDQyBubWktSU5UIG1hcHBpbmcgKi8KIC5lcXUgICAgICAgICAgICBEQkNUTCwgICAgICAweDBmZmZlZjA0MCAgIC8qIERSQU0gYnVmZmVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAogLmVxdSAgICAgICAgICAgIENBQ0hFTElORVNaLCAweDAwMDAwMDEwICAgLyogc2l6ZSBvZiBvdXIgY2FjaGUgbGluZSAocmVhZCBidWZmZXIpICovCkBAIC00NTksNiArNDYwLDEyIEBACiAJaW5jbCAgICAlZWRpCiAJbG9vcCAgICBjbGVhbnVwbHAKIAorI2lmIGRlZmluZWQgQ0ZHX1NEUkFNX0RSQ1RNQ1RMCisJLyoganVzdCBoYXZlIHlvdXIgaGFyZHdhcmUgZGVzaW5nZXIgX0dJVkVfIHlvdSB3aGF0IHlvdSBuZWVkIGhlcmUhICovCisJbW92bCAgICAkRFJDVE1DVEwsICVlZGkKKwltb3ZiICAgICRDRkdfU0RSQU1fRFJDVE1DVEwsJWFsCisJbW92YiAgICAoJWVkaSksICVhbAorI2Vsc2UKICNpZiBkZWZpbmVkKENGR19TRFJBTV9DQVNfTEFURU5DWV8yVCkgfHwgZGVmaW5lZChDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QpCiAJLyogc2V0IHRoZSBDQVMgbGF0ZW5jeSBub3cgc2luY2UgaXQgaXMgaGFyZCB0byBkbwogCSAqIHdoZW4gd2UgcnVuIGZyb20gdGhlIFJBTSAqLwpAQCAtNDcyLDYgKzQ3OSw3IEBACiAjZW5kaWYKIAltb3ZiICAgICVhbCwgKCVlZGkpCiAjZW5kaWYKKyNlbmRpZgogCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIERSQU0gQ29udHJvbCByZWdpc3RlciAqLwogCW1vdmIgICAgJDB4MywlYWwgICAgICAgICAgICAgICAgIC8qIExvYWQgbW9kZSByZWdpc3RlciBjbWQgKi8KIAltb3ZiICAgICAlYWwsICglZWRpKQpAQCAtNTI4LDkgKzUzNiw0OSBAQAogCXNobGwJJDIyLCAlZWF4CiAJbW92bAklZWF4LCAlZWJ4CiAKLWRvbmU6CW1vdmwJJWVieCwgJWVheAogCitkb25lOgorCW1vdmwJJWVieCwgJWVheAorCisjaWYgQ0ZHX1NEUkFNX0VDQ19FTkFCTEUKKwkvKiBBIG5vbWluYWwgbWVtb3J5IHRlc3Q6IGp1c3QgYSBieXRlIGF0IGVhY2ggYWRkcmVzcyBsaW5lICovCisJbW92bCAgICAlZWF4LCAlZWN4CisJc2hybCAgICAkMHgxLCAlZWN4CisJbW92bAkkMHgxLCAlZWRpCittZW10ZXN0MDoKKwltb3ZiCSQweGE1LCAoJWVkaSkKKwljbXBiICAgICQweGE1LCAoJWVkaSkKKwlqbmUJb3V0CisJc2hybAkkMSwgJWVjeAorCWFuZGwJJWVjeCwlZWN4CisJanoJc2V0X2VjYworCXNobGwJJDEsICVlZGkKKwlqbXAJbWVtdGVzdDAKKworc2V0X2VjYzoKKwkvKiBjbGVhciBhbGwgcmFtIHdpdGggYSBtZW1zZXQgKi8KKwltb3ZsCSVlYXgsICVlY3gKKwl4b3JsCSVlc2ksICVlc2kKKwl4b3JsCSVlZGksICVlZGkKKwl4b3JsCSVlYXgsICVlYXgKKwlzaHJsCSQyLCAlZWN4CisJY2xkCisJcmVwIAlzdG9zbAorCQkJLyogZW5hYmxlIHJlYWQsIHdyaXRlIGJ1ZmZlcnMgKi8KKwltb3ZiICAgICQweDExLCAlYWwKKwltb3ZsICAgICREQkNUTCwgJWVkaQorCW1vdmIgICAgJWFsLCAoJWVkaSkKKwkJCS8qIGVuYWJsZSBOTUkgbWFwcGluZyBmb3IgRUNDICovCisJbW92bCAgICAkRUNDSU5ULCAlZWRpCisJbW92CSQweDEwLCAlYWwKKwltb3ZiICAgICVhbCwgKCVlZGkpCisJCQkvKiBUdXJuIG9uIEVDQyAqLworCW1vdmwgICAgJEVDQ0NUTCwgJWVkaQorCW1vdgkkMHgwNSwgJWFsCisJbW92YiAgICAlYWwsICglZWRpKQorI2VuZGlmCitvdXQ6CisJbW92bAklZWJ4LCAlZWF4CiAJam1wCSolZWJwCiAKLQogI2VuZGlmIC8qIENPTkZJR19TQzUyMCAqLwpkaWZmIC0tZ2l0IGEvY3B1L2l4cC9NYWtlZmlsZSBiL2NwdS9peHAvTWFrZWZpbGUKaW5kZXggYmEyZTU4OS4uMjg2NzI3MCAxMDA2NDQKLS0tIGEvY3B1L2l4cC9NYWtlZmlsZQorKysgYi9jcHUvaXhwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIxICsyMywyNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubwotT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubyB0aW1lci5vIHBjaS5vCitDT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubyB0aW1lci5vIHBjaS5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9peHAvbnBlL01ha2VmaWxlIGIvY3B1L2l4cC9ucGUvTWFrZWZpbGUKaW5kZXggOTM3ZGU5ZC4uNDEyYjQxOCAxMDA2NDQKLS0tIGEvY3B1L2l4cC9ucGUvTWFrZWZpbGUKKysrIGIvY3B1L2l4cC9ucGUvTWFrZWZpbGUKQEAgLTIzLDExICsyMywxMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCIDo9IGxpYm5wZS5hCitMSUIgOj0gJChvYmopbGlibnBlLmEKIAotQ0ZMQUdTICArPSAtSSQoVE9QRElSKS9jcHUvaXhwL25wZS9pbmNsdWRlIC1EQ09ORklHX0lYUDQyNV9DT01QT05FTlRfRVRIREIKK0xPQ0FMX0NGTEFHUyAgKz0gLUkkKFRPUERJUikvY3B1L2l4cC9ucGUvaW5jbHVkZSAtRENPTkZJR19JWFA0MjVfQ09NUE9ORU5UX0VUSERCCitDRkxBR1MgICs9ICQoTE9DQUxfQ0ZMQUdTKQorSE9TVF9DRkxBR1MgICs9ICQoTE9DQUxfQ0ZMQUdTKQogCi1PQkpTIDo9IG5wZS5vIFwKK0NPQkpTIDo9IG5wZS5vIFwKIAltaWlwaHkubyBcCiAJSXhPc2FsQnVmZmVyTWd0Lm8gXAogCUl4T3NhbElvTWVtLm8gXApAQCAtNzgsMTQgKzgwLDIxIEBACiAJSXhOcGVNaFNvbGljaXRlZENiTWdyLm8gXAogCUl4TnBlTWhVbnNvbGljaXRlZENiTWdyLm8KIAorCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKwogYWxsOgkkKExJQikKIAotJChMSUIpOgkkKE9CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9saDdhNDB4L01ha2VmaWxlIGIvY3B1L2xoN2E0MHgvTWFrZWZpbGUKaW5kZXggYjQ1YmQ2YS4uMmZjYWZiMCAxMDA2NDQKLS0tIGEvY3B1L2xoN2E0MHgvTWFrZWZpbGUKKysrIGIvY3B1L2xoN2E0MHgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMSwgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjEgKzIzLDI1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vCi1PQkpTCT0gY3B1Lm8gc3BlZWQubyBpbnRlcnJ1cHRzLm8gc2VyaWFsLm8KK0NPQkpTCT0gY3B1Lm8gc3BlZWQubyBpbnRlcnJ1cHRzLm8gc2VyaWFsLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L21jZjUyeDIvTWFrZWZpbGUgYi9jcHUvbWNmNTJ4Mi9NYWtlZmlsZQppbmRleCA4NzlkZWI3Li5hMDVhODAzIDEwMDY0NAotLS0gYS9jcHUvbWNmNTJ4Mi9NYWtlZmlsZQorKysgYi9jcHUvbWNmNTJ4Mi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI1LDIxICsyNSwyNSBAQAogCiAjIENGTEFHUyArPSAtREVUX0RFQlVHCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9Ci1PQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vIHNwZWVkLm8gY3B1X2luaXQubyBmZWMubworQ09CSlMJPSBzZXJpYWwubyBpbnRlcnJ1cHRzLm8gY3B1Lm8gc3BlZWQubyBjcHVfaW5pdC5vIGZlYy5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9tY2Y1MngyL2ZlYy5jIGIvY3B1L21jZjUyeDIvZmVjLmMKaW5kZXggNmRiNjIxNC4uYjY1NDBiNSAxMDA2NDQKLS0tIGEvY3B1L21jZjUyeDIvZmVjLmMKKysrIGIvY3B1L21jZjUyeDIvZmVjLmMKQEAgLTI2Nyw2ICsyNjcsNyBAQAogCWZlY3AtPmZlY19oYXNoX3RhYmxlX2hpZ2ggPSAwOwogCWZlY3AtPmZlY19oYXNoX3RhYmxlX2xvdyA9IDA7CiAjZW5kaWYKKyNlbmRpZgogCiAJLyogU2V0IG1heGltdW0gcmVjZWl2ZSBidWZmZXIgc2l6ZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2NwdS9tY2Y1MngyL3N0YXJ0LlMgYi9jcHUvbWNmNTJ4Mi9zdGFydC5TCmluZGV4IDhhODNjYTUuLmYxZjQwNzcgMTAwNjQ0Ci0tLSBhL2NwdS9tY2Y1MngyL3N0YXJ0LlMKKysrIGIvY3B1L21jZjUyeDIvc3RhcnQuUwpAQCAtMTQwLDYgKzE0MCw3IEBACiAJbW92ZS5sCSMoQ0ZHX01CQVIgKyAxKSwgJWQwCQkvKiBzZXQgSVBTQkFSIGFkZHJlc3MgKyB2YWxpZCBmbGFnICovCiAJbW92ZS5sCSVkMCwgMHg0MDAwMDAwMAogCisjaWYgZGVmaW5lZChDT05GSUdfTTUyODIpCiAJLyogSW5pdGlhbGl6ZSBSQU1CQVIxOiBsb2NhdGUgU1JBTSBhbmQgdmFsaWRhdGUgaXQgKi8KIAltb3ZlLmwJIyhDRkdfSU5JVF9SQU1fQUREUiArIDB4MjEpLCAlZDAKIAltb3ZlYwklZDAsICVSQU1CQVIxCkBAIC0xNzEsNiArMTcyLDcgQEAKICNlbmRpZiAvKiAoVEVYVF9CQVNFID09IENGR19JTlRfRkxBU0hfQkFTRSkgKi8KIAogI2VuZGlmCisjZW5kaWYKIAkvKiBpZiB3ZSBjb21lIGZyb20gYSBwcmUtbG9hZGVyIHdlIGhhdmUgbm8gZXhjZXB0aW9uIHRhYmxlIGFuZAogCSAqIHRoZXJlZm9yZSBubyBWQlIgdG8gc2V0CiAJICovCmRpZmYgLS1naXQgYS9jcHUvbWljcm9ibGF6ZS9NYWtlZmlsZSBiL2NwdS9taWNyb2JsYXplL01ha2VmaWxlCmluZGV4IDYxMDA0M2UuLjA3ZWQ2Y2UgMTAwNjQ0Ci0tLSBhL2NwdS9taWNyb2JsYXplL01ha2VmaWxlCisrKyBiL2NwdS9taWNyb2JsYXplL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIxICsyMywyNSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubwotT0JKUwk9IGNwdS5vIGludGVycnVwdHMubworQ09CSlMJPSBjcHUubyBpbnRlcnJ1cHRzLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOiBNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpICQoQU9CSlM6Lm89LlMpCi0JJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgJChBT0JKUzoubz0uUykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9NYWtlZmlsZSBiL2NwdS9taXBzL01ha2VmaWxlCmluZGV4IGM4YjMwYzcuLmY5YTQ5ZGYgMTAwNjQ0Ci0tLSBhL2NwdS9taXBzL01ha2VmaWxlCisrKyBiL2NwdS9taXBzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIzICsyMywyNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubwotT0JKUwk9IGFzY19zZXJpYWwubyBhdTF4MDBfc2VyaWFsLm8gYXUxeDAwX2V0aC5vIGF1MXgwMF91c2Jfb2hjaS5vIFwKK0NPQkpTCT0gYXNjX3NlcmlhbC5vIGF1MXgwMF9zZXJpYWwubyBhdTF4MDBfZXRoLm8gYXUxeDAwX3VzYl9vaGNpLm8gXAogCSAgY3B1Lm8gaW50ZXJydXB0cy5vIGluY2FpcF9jbG9jay5vCiBTT0JKUwk9IGluY2FpcF93ZHQubyBjYWNoZS5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQogCi0kKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQorYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9jb25maWcubWsgYi9jcHUvbWlwcy9jb25maWcubWsKaW5kZXggYzM1NzYxNS4uYjI5OTg2ZSAxMDA2NDQKLS0tIGEvY3B1L21pcHMvY29uZmlnLm1rCisrKyBiL2NwdS9taXBzL2NvbmZpZy5tawpAQCAtMjEsNyArMjEsNyBAQAogIyBNQSAwMjExMS0xMzA3IFVTQQogIwogdj0kKHNoZWxsIFwKLW1pcHMtbGludXgtYXMgLS12ZXJzaW9ufGdyZXAgIkdOVSBhc3NlbWJsZXIifGF3ayAne3ByaW50ICQkM30nfGF3ayAtRiAuICd7cHJpbnQgJCQyfScpCiskKENST1NTX0NPTVBJTEUpYXMgLS12ZXJzaW9ufGdyZXAgIkdOVSBhc3NlbWJsZXIifGF3ayAne3ByaW50ICQkM30nfGF3ayAtRiAuICd7cHJpbnQgJCQyfScpCiBNSVBTRkxBR1M9JChzaGVsbCBcCiBpZiBbICIkdiIgLWx0ICIxNCIgXTsgdGhlbiBcCiAJZWNobyAiLW1jcHU9NGtjIjsgXApkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9NYWtlZmlsZSBiL2NwdS9tcGM1eHgvTWFrZWZpbGUKaW5kZXggYjc4N2I2MS4uZDY5NmU3OSAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9NYWtlZmlsZQorKysgYi9jcHUvbXBjNXh4L01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKEMpIENvcHlyaWdodCAyMDAzCiAjIE1hcnRpbiBXaW5pc3RvZXJmZXIsIG1hcnRpbndpbmlzdG9lcmZlckBnbXguY2guCiAjCkBAIC0zMiwyMSArMzUsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCi1TVEFSVAk9IHN0YXJ0LlMKLU9CSlMJPSBzZXJpYWwubyBjcHUubyBjcHVfaW5pdC5vIGludGVycnVwdHMubyB0cmFwcy5vIHNwZWVkLm8gc3BpLm8KK1NUQVJUCT0gc3RhcnQubworQ09CSlMJPSBzZXJpYWwubyBjcHUubyBjcHVfaW5pdC5vIGludGVycnVwdHMubyB0cmFwcy5vIHNwZWVkLm8gc3BpLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHh4L01ha2VmaWxlIGIvY3B1L21wYzV4eHgvTWFrZWZpbGUKaW5kZXggYTk3YjYyNS4uNjgzZGVkOCAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eHgvTWFrZWZpbGUKKysrIGIvY3B1L21wYzV4eHgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjMgKzIzLDI3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vCi1BU09CSlMJPSBpby5vIGZpcm13YXJlX3NjX3Rhc2tfYmVzdGNvbW0uaW1wbC5vIGZpcm13YXJlX3NjX3Rhc2suaW1wbC5vCi1PQkpTCT0gaTJjLm8gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIGZlYy5vIGlkZS5vIGludGVycnVwdHMubyBcCitTT0JKUwk9IGlvLm8gZmlybXdhcmVfc2NfdGFza19iZXN0Y29tbS5pbXBsLm8gZmlybXdhcmVfc2NfdGFzay5pbXBsLm8KK0NPQkpTCT0gaTJjLm8gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIGZlYy5vIGlkZS5vIGludGVycnVwdHMubyBcCiAJICBsb2FkdGFzay5vIHBjaV9tcGM1MjAwLm8gc2VyaWFsLm8gc3BlZWQubyB1c2Jfb2hjaS5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKEFTT0JKUykgJChMSUIpCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJChBU09CSlMpICQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoQVNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eHgvaW50ZXJydXB0cy5jIGIvY3B1L21wYzV4eHgvaW50ZXJydXB0cy5jCmluZGV4IDdiYWNlY2QuLjdiNWNiOGIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHh4L2ludGVycnVwdHMuYworKysgYi9jcHUvbXBjNXh4eC9pbnRlcnJ1cHRzLmMKQEAgLTEsNCArMSw3IEBACiAvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBEZXRsZXYgWnVuZGVsLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBkenVAZGVueC5kZQorICoKICAqIChDKSBDb3B5cmlnaHQgLTIwMDMKICAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAgKgpAQCAtMjQsMTggKzI3LDIxMiBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0vKgotICogaW50ZXJydXB0cy5jIC0ganVzdCBlbm91Z2ggc3VwcG9ydCBmb3IgdGhlIGRlY3JlbWVudGVyL3RpbWVyCisvKiB0aGlzIHNlY3Rpb24gd2FzIHJpcHBlZCBvdXQgb2YgYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfcGljLmMgaW4gdGhlCisgKiBMaW51eCAyLjYgc291cmNlIHdpdGggdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuCisgKgorICogQmFzZWQgb24gKHdlbGwsIG1vc3RseSBjb3BpZWQgZnJvbSkgdGhlIGNvZGUgZnJvbSB0aGUgMi40IGtlcm5lbCBieQorICogRGFsZSBGYXJuc3dvcnRoIDxkZmFybnN3b3J0aEBtdmlzdGEuY29tPiBhbmQgS2VudCBCb3JnLgorICogCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3lsdmFpbiBNdW5hdXQgPHRudEAyNDZ0TnQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1vbnRhdmlzdGEgU29mdHdhcmUsIEluYwogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogCi1pbnQgaW50ZXJydXB0X2luaXRfY3B1ICh1bG9uZyAqZGVjcmVtZW50ZXJfY291bnQpCitzdHJ1Y3QgaXJxX2FjdGlvbiB7CisJaW50ZXJydXB0X2hhbmRsZXJfdCAqaGFuZGxlcjsKKwl2b2lkICphcmc7CisJdWxvbmcgY291bnQ7Cit9OworCitzdGF0aWMgc3RydWN0IGlycV9hY3Rpb24gaXJxX2hhbmRsZXJzW05SX0lSUVNdOworCitzdGF0aWMgc3RydWN0IG1wYzV4eHhfaW50ciAqaW50cjsKK3N0YXRpYyBzdHJ1Y3QgbXBjNXh4eF9zZG1hICpzZG1hOworCitzdGF0aWMgdm9pZCBtcGM1eHh4X2ljX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgdmFsOworCisJaWYgKGlycSA9PSBNUEM1WFhYX0lSUTApIHsKKwkJdmFsID0gaW5fYmUzMigmaW50ci0+Y3RybCk7CisJCXZhbCAmPSB+KDEgPDwgMTEpOworCQlvdXRfYmUzMigmaW50ci0+Y3RybCwgdmFsKTsKKwl9IGVsc2UgaWYgKGlycSA8IE1QQzVYWFhfSVJRMSkgeworCQlCVUcoKTsKKwl9IGVsc2UgaWYgKGlycSA8PSBNUEM1WFhYX0lSUTMpIHsKKwkJdmFsID0gaW5fYmUzMigmaW50ci0+Y3RybCk7CisJCXZhbCAmPSB+KDEgPDwgKDEwIC0gKGlycSAtIE1QQzVYWFhfSVJRMSkpKTsKKwkJb3V0X2JlMzIoJmludHItPmN0cmwsIHZhbCk7CisJfSBlbHNlIGlmIChpcnEgPCBNUEM1WFhYX1NETUFfSVJRX0JBU0UpIHsKKwkJdmFsID0gaW5fYmUzMigmaW50ci0+bWFpbl9tYXNrKTsKKwkJdmFsIHw9IDEgPDwgKDE2IC0gKGlycSAtIE1QQzVYWFhfTUFJTl9JUlFfQkFTRSkpOworCQlvdXRfYmUzMigmaW50ci0+bWFpbl9tYXNrLCB2YWwpOworCX0gZWxzZSBpZiAoaXJxIDwgTVBDNVhYWF9QRVJQX0lSUV9CQVNFKSB7CisJCXZhbCA9IGluX2JlMzIoJnNkbWEtPkludE1hc2spOworCQl2YWwgfD0gMSA8PCAoaXJxIC0gTVBDNVhYWF9TRE1BX0lSUV9CQVNFKTsKKwkJb3V0X2JlMzIoJnNkbWEtPkludE1hc2ssIHZhbCk7CisJfSBlbHNlIHsKKwkJdmFsID0gaW5fYmUzMigmaW50ci0+cGVyX21hc2spOworCQl2YWwgfD0gMSA8PCAoMzEgLSAoaXJxIC0gTVBDNVhYWF9QRVJQX0lSUV9CQVNFKSk7CisJCW91dF9iZTMyKCZpbnRyLT5wZXJfbWFzaywgdmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1wYzV4eHhfaWNfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIHZhbDsKKworCWlmIChpcnEgPT0gTVBDNVhYWF9JUlEwKSB7CisJCXZhbCA9IGluX2JlMzIoJmludHItPmN0cmwpOworCQl2YWwgfD0gMSA8PCAxMTsKKwkJb3V0X2JlMzIoJmludHItPmN0cmwsIHZhbCk7CisJfSBlbHNlIGlmIChpcnEgPCBNUEM1WFhYX0lSUTEpIHsKKwkJQlVHKCk7CisJfSBlbHNlIGlmIChpcnEgPD0gTVBDNVhYWF9JUlEzKSB7CisJCXZhbCA9IGluX2JlMzIoJmludHItPmN0cmwpOworCQl2YWwgfD0gMSA8PCAoMTAgLSAoaXJxIC0gTVBDNVhYWF9JUlExKSk7CisJCW91dF9iZTMyKCZpbnRyLT5jdHJsLCB2YWwpOworCX0gZWxzZSBpZiAoaXJxIDwgTVBDNVhYWF9TRE1BX0lSUV9CQVNFKSB7CisJCXZhbCA9IGluX2JlMzIoJmludHItPm1haW5fbWFzayk7CisJCXZhbCAmPSB+KDEgPDwgKDE2IC0gKGlycSAtIE1QQzVYWFhfTUFJTl9JUlFfQkFTRSkpKTsKKwkJb3V0X2JlMzIoJmludHItPm1haW5fbWFzaywgdmFsKTsKKwl9IGVsc2UgaWYgKGlycSA8IE1QQzVYWFhfUEVSUF9JUlFfQkFTRSkgeworCQl2YWwgPSBpbl9iZTMyKCZzZG1hLT5JbnRNYXNrKTsKKwkJdmFsICY9IH4oMSA8PCAoaXJxIC0gTVBDNVhYWF9TRE1BX0lSUV9CQVNFKSk7CisJCW91dF9iZTMyKCZzZG1hLT5JbnRNYXNrLCB2YWwpOworCX0gZWxzZSB7CisJCXZhbCA9IGluX2JlMzIoJmludHItPnBlcl9tYXNrKTsKKwkJdmFsICY9IH4oMSA8PCAoMzEgLSAoaXJxIC0gTVBDNVhYWF9QRVJQX0lSUV9CQVNFKSkpOworCQlvdXRfYmUzMigmaW50ci0+cGVyX21hc2ssIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtcGM1eHh4X2ljX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiB2YWw7CisKKwkvKgorCSAqIE9ubHkgc29tZSBpcnFzIGFyZSByZXNldCBoZXJlLCBvdGhlcnMgaW4gaW50ZXJydXB0aW5nIGhhcmR3YXJlLgorCSAqLworCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIE1QQzVYWFhfSVJRMDoKKwkJdmFsID0gaW5fYmUzMigmaW50ci0+Y3RybCk7CisJCXZhbCB8PSAweDA4MDAwMDAwOworCQlvdXRfYmUzMigmaW50ci0+Y3RybCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBNUEM1WFhYX0NDU19JUlE6CisJCXZhbCA9IGluX2JlMzIoJmludHItPmVuY19zdGF0dXMpOworCQl2YWwgfD0gMHgwMDAwMDQwMDsKKwkJb3V0X2JlMzIoJmludHItPmVuY19zdGF0dXMsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgTVBDNVhYWF9JUlExOgorCQl2YWwgPSBpbl9iZTMyKCZpbnRyLT5jdHJsKTsKKwkJdmFsIHw9IDB4MDQwMDAwMDA7CisJCW91dF9iZTMyKCZpbnRyLT5jdHJsLCB2YWwpOworCQlicmVhazsKKwljYXNlIE1QQzVYWFhfSVJRMjoKKwkJdmFsID0gaW5fYmUzMigmaW50ci0+Y3RybCk7CisJCXZhbCB8PSAweDAyMDAwMDAwOworCQlvdXRfYmUzMigmaW50ci0+Y3RybCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBNUEM1WFhYX0lSUTM6CisJCXZhbCA9IGluX2JlMzIoJmludHItPmN0cmwpOworCQl2YWwgfD0gMHgwMTAwMDAwMDsKKwkJb3V0X2JlMzIoJmludHItPmN0cmwsIHZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChpcnEgPj0gTVBDNVhYWF9TRE1BX0lSUV9CQVNFCisJCSAgICAmJiBpcnEgPCAoTVBDNVhYWF9TRE1BX0lSUV9CQVNFICsgTVBDNVhYWF9TRE1BX0lSUV9OVU0pKSB7CisJCQlvdXRfYmUzMigmc2RtYS0+SW50UGVuZCwKKwkJCQkgMSA8PCAoaXJxIC0gTVBDNVhYWF9TRE1BX0lSUV9CQVNFKSk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBtcGM1eHh4X2ljX2Rpc2FibGVfYW5kX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCW1wYzV4eHhfaWNfZGlzYWJsZShpcnEpOworCW1wYzV4eHhfaWNfYWNrKGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzV4eHhfaWNfZW5kKHVuc2lnbmVkIGludCBpcnEpCit7CisJbXBjNXh4eF9pY19lbmFibGUoaXJxKTsKK30KKwordm9pZCBtcGM1eHh4X2luaXRfaXJxKHZvaWQpCit7CisJdTMyIGludHJfY3RybDsKKworCS8qIFJlbWFwIHRoZSBuZWNlc3Nhcnkgem9uZXMgKi8KKwlpbnRyID0gKHN0cnVjdCBtcGM1eHh4X2ludHIgKikoTVBDNVhYWF9JQ1RMKTsKKwlzZG1hID0gKHN0cnVjdCBtcGM1eHh4X3NkbWEgKikoTVBDNVhYWF9TRE1BKTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdCBzb3VyY2VzLiAqLworCW91dF9iZTMyKCZzZG1hLT5JbnRQZW5kLCAweGZmZmZmZmZmKTsJLyogMSBtZWFucyBjbGVhciBwZW5kaW5nICovCisJb3V0X2JlMzIoJnNkbWEtPkludE1hc2ssIDB4ZmZmZmZmZmYpOwkvKiAxIG1lYW5zIGRpc2FibGVkICovCisJb3V0X2JlMzIoJmludHItPnBlcl9tYXNrLCAweDdmZmZmYzAwKTsJLyogMSBtZWFucyBkaXNhYmxlZCAqLworCW91dF9iZTMyKCZpbnRyLT5tYWluX21hc2ssIDB4MDAwMTBmZmYpOwkvKiAxIG1lYW5zIGRpc2FibGVkICovCisJaW50cl9jdHJsID0gaW5fYmUzMigmaW50ci0+Y3RybCk7CisJaW50cl9jdHJsIHw9IDB4MGYwMDAwMDAgfAkvKiBjbGVhciBJUlEgMC0zICovCisJICAgIDB4MDBmZjAwMDAgfAkvKiBJUlEgMC0zIGxldmVsIHNlbnNpdGl2ZSBsb3cgYWN0aXZlICovCisJICAgIDB4MDAwMDEwMDAgfAkvKiBNRUUgbWFzdGVyIGV4dGVybmFsIGVuYWJsZSAqLworCSAgICAweDAwMDAwMDAwIHwJLyogMCBtZWFucyBkaXNhYmxlIElSUSAwLTMgKi8KKwkgICAgMHgwMDAwMDAwMTsJCS8qIENFYiByb3V0ZSBjcml0aWNhbCBub3JtYWxseSAqLworCW91dF9iZTMyKCZpbnRyLT5jdHJsLCBpbnRyX2N0cmwpOworCisJLyogWmVybyBhIGJ1bmNoIG9mIHRoZSBwcmlvcml0eSBzZXR0aW5ncy4gICovCisJb3V0X2JlMzIoJmludHItPnBlcl9wcmkxLCAwKTsKKwlvdXRfYmUzMigmaW50ci0+cGVyX3ByaTIsIDApOworCW91dF9iZTMyKCZpbnRyLT5wZXJfcHJpMywgMCk7CisJb3V0X2JlMzIoJmludHItPm1haW5fcHJpMSwgMCk7CisJb3V0X2JlMzIoJmludHItPm1haW5fcHJpMiwgMCk7Cit9CisKK2ludCBtcGM1eHh4X2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIHN0YXR1czsKKwlpbnQgaXJxID0gLTE7CisKKwlzdGF0dXMgPSBpbl9iZTMyKCZpbnRyLT5lbmNfc3RhdHVzKTsKKworCWlmIChzdGF0dXMgJiAweDAwMDAwNDAwKSB7CS8qIGNyaXRpY2FsICovCisJCWlycSA9IChzdGF0dXMgPj4gOCkgJiAweDM7CisJCWlmIChpcnEgPT0gMikJLyogaGlnaCBwcmlvcml0eSBwZXJpcGhlcmFsICovCisJCQlnb3RvIHBlcmlwaGVyYWw7CisJCWlycSArPSBNUEM1WFhYX0NSSVRfSVJRX0JBU0U7CisJfSBlbHNlIGlmIChzdGF0dXMgJiAweDAwMjAwMDAwKSB7CS8qIG1haW4gKi8KKwkJaXJxID0gKHN0YXR1cyA+PiAxNikgJiAweDFmOworCQlpZiAoaXJxID09IDQpCS8qIGxvdyBwcmlvcml0eSBwZXJpcGhlcmFsICovCisJCQlnb3RvIHBlcmlwaGVyYWw7CisJCWlycSArPSBNUEM1WFhYX01BSU5fSVJRX0JBU0U7CisJfSBlbHNlIGlmIChzdGF0dXMgJiAweDIwMDAwMDAwKSB7CS8qIHBlcmlwaGVyYWwgKi8KKwkgICAgICBwZXJpcGhlcmFsOgorCQlpcnEgPSAoc3RhdHVzID4+IDI0KSAmIDB4MWY7CisJCWlmIChpcnEgPT0gMCkgewkvKiBiZXN0Y29tbSAqLworCQkJc3RhdHVzID0gaW5fYmUzMigmc2RtYS0+SW50UGVuZCk7CisJCQlpcnEgPSBmZnMoc3RhdHVzKSArIE1QQzVYWFhfU0RNQV9JUlFfQkFTRSAtIDE7CisJCX0gZWxzZQorCQkJaXJxICs9IE1QQzVYWFhfUEVSUF9JUlFfQkFTRTsKKwl9CisKKwlyZXR1cm4gaXJxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGludGVycnVwdF9pbml0X2NwdSh1bG9uZyAqIGRlY3JlbWVudGVyX2NvdW50KQogewogCSpkZWNyZW1lbnRlcl9jb3VudCA9IGdldF90YmNsaygpIC8gQ0ZHX0haOwogCisJbXBjNXh4eF9pbml0X2lycSgpOworCiAJcmV0dXJuICgwKTsKIH0KIApAQCAtNDQsMTQgKzI0MSwzMiBAQAogLyoKICAqIEhhbmRsZSBleHRlcm5hbCBpbnRlcnJ1cHRzCiAgKi8KLXZvaWQKLWV4dGVybmFsX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgZXh0ZXJuYWxfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXB1dHMoImV4dGVybmFsX2ludGVycnVwdCAob29wcyEpXG4iKTsKKwlpbnQgaXJxLCB1bm1hc2sgPSAxOworCisJaXJxID0gbXBjNXh4eF9nZXRfaXJxKHJlZ3MpOworCisJbXBjNXh4eF9pY19kaXNhYmxlX2FuZF9hY2soaXJxKTsKKworCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwlpZiAoaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciAhPSBOVUxMKQorCQkoKmlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIpIChpcnFfaGFuZGxlcnNbaXJxXS5hcmcpOworCWVsc2UgeworCQlwcmludGYoIlxuQm9ndXMgRXh0ZXJuYWwgSW50ZXJydXB0IElSUSAlZFxuIiwgaXJxKTsKKwkJLyoKKwkJICogdHVybiBvZmYgdGhlIGJvZ3VzIGludGVycnVwdCwgb3RoZXJ3aXNlIGl0CisJCSAqIG1pZ2h0IHJlcGVhdCBmb3JldmVyCisJCSAqLworCQl1bm1hc2sgPSAwOworCX0KKworCWlmICh1bm1hc2spCisJCW1wYzV4eHhfaWNfZW5kKGlycSk7CiB9CiAKLXZvaWQKLXRpbWVyX2ludGVycnVwdF9jcHUgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCB0aW1lcl9pbnRlcnJ1cHRfY3B1KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLwogCXJldHVybjsKQEAgLTYzLDIyICsyNzgsNjkgQEAKICAqIEluc3RhbGwgYW5kIGZyZWUgYSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqLwogCi12b2lkCi1pcnFfaW5zdGFsbF9oYW5kbGVyKGludCB2ZWMsIGludGVycnVwdF9oYW5kbGVyX3QgKmhhbmRsZXIsIHZvaWQgKmFyZykKK3ZvaWQgaXJxX2luc3RhbGxfaGFuZGxlcihpbnQgaXJxLCBpbnRlcnJ1cHRfaGFuZGxlcl90ICogaGFuZGxlciwgdm9pZCAqYXJnKQogeworCWlmIChpcnEgPCAwIHx8IGlycSA+PSBOUl9JUlFTKSB7CisJCXByaW50ZigiaXJxX2luc3RhbGxfaGFuZGxlcjogYmFkIGlycSBudW1iZXIgJWRcbiIsIGlycSk7CisJCXJldHVybjsKKwl9CiAKKwlpZiAoaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciAhPSBOVUxMKQorCQlwcmludGYoImlycV9pbnN0YWxsX2hhbmRsZXI6IDB4JTA4bHggcmVwbGFjaW5nIDB4JTA4bHhcbiIsCisJCSAgICAgICAodWxvbmcpIGhhbmRsZXIsICh1bG9uZykgaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlcik7CisKKwlpcnFfaGFuZGxlcnNbaXJxXS5oYW5kbGVyID0gaGFuZGxlcjsKKwlpcnFfaGFuZGxlcnNbaXJxXS5hcmcgPSBhcmc7CisKKwltcGM1eHh4X2ljX2VuYWJsZShpcnEpOwogfQogCi12b2lkCi1pcnFfZnJlZV9oYW5kbGVyKGludCB2ZWMpCit2b2lkIGlycV9mcmVlX2hhbmRsZXIoaW50IGlycSkKIHsKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gTlJfSVJRUykgeworCQlwcmludGYoImlycV9mcmVlX2hhbmRsZXI6IGJhZCBpcnEgbnVtYmVyICVkXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQogCisJbXBjNXh4eF9pY19kaXNhYmxlKGlycSk7CisKKwlpcnFfaGFuZGxlcnNbaXJxXS5oYW5kbGVyID0gTlVMTDsKKwlpcnFfaGFuZGxlcnNbaXJxXS5hcmcgPSBOVUxMOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZAotZG9faXJxaW5mbyhjbWRfdGJsX3QgKmNtZHRwLCBiZF90ICpiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSVJRKQordm9pZCBkb19pcnFpbmZvKGNtZF90YmxfdCAqIGNtZHRwLCBiZF90ICogYmQsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCXB1dHMoIklSUSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgdW5pbXBsZW1lbnRlZCBjdXJyZW50bHkuXG4iKTsKKwlpbnQgaXJxLCByZV9lbmFibGU7CisJdTMyIGludHJfY3RybDsKKwljaGFyICppcnFfY29uZmlnW10gPSB7ICJsZXZlbCBzZW5zaXRpdmUsIGFjdGl2ZSBoaWdoIiwKKwkJImVkZ2Ugc2Vuc2l0aXZlLCByaXNpbmcgYWN0aXZlIGVkZ2UiLAorCQkiZWRnZSBzZW5zaXRpdmUsIGZhbGxpbmcgYWN0aXZlIGVkZ2UiLAorCQkibGV2ZWwgc2Vuc2l0aXZlLCBhY3RpdmUgbG93IgorCX07CisKKwlyZV9lbmFibGUgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKworCWludHJfY3RybCA9IGluX2JlMzIoJmludHItPmN0cmwpOworCXByaW50ZigiSW50ZXJydXB0IGNvbmZpZ3VyYXRpb246XG4iKTsKKworCWZvciAoaXJxID0gMDsgaXJxIDw9IDM7IGlycSsrKSB7CisJCXByaW50ZigiSVJRJWQ6ICVzXG4iLCBpcnEsCisJCSAgICAgICBpcnFfY29uZmlnWyhpbnRyX2N0cmwgPj4gKDIyIC0gMiAqIGlycSkpICYgMHgzXSk7CisJfQorCisJcHV0cygiXG5JbnRlcnJ1cHQtSW5mb3JtYXRpb246XG4iICJOciAgUm91dGluZSAgIEFyZyAgICAgICBDb3VudFxuIik7CisKKwlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKQorCQlpZiAoaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciAhPSBOVUxMKQorCQkJcHJpbnRmKCIlMDJkICAlMDhseCAgJTA4bHggICVsZFxuIiwgaXJxLAorCQkJICAgICAgICh1bG9uZykgaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciwKKwkJCSAgICAgICAodWxvbmcpIGlycV9oYW5kbGVyc1tpcnFdLmFyZywKKwkJCSAgICAgICBpcnFfaGFuZGxlcnNbaXJxXS5jb3VudCk7CisKKwlpZiAocmVfZW5hYmxlKQorCQllbmFibGVfaW50ZXJydXB0cygpOwogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4eC9zZXJpYWwuYyBiL2NwdS9tcGM1eHh4L3NlcmlhbC5jCmluZGV4IDZjYjUyM2QuLjQzMGQ2M2YgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHh4L3NlcmlhbC5jCisrKyBiL2NwdS9tcGM1eHh4L3NlcmlhbC5jCkBAIC0xNjYsNiArMTY2LDI1IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCit2b2lkIHNlcmlhbF9wdXRjX3Jhd19kZXYodW5zaWduZWQgbG9uZyBkZXZfYmFzZSwgY29uc3QgY2hhciBjKQorI2Vsc2UKK3ZvaWQgc2VyaWFsX3B1dGNfcmF3KGNvbnN0IGNoYXIgYykKKyNlbmRpZgoreworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKKwl2b2xhdGlsZSBzdHJ1Y3QgbXBjNXh4eF9wc2MgKnBzYyA9IChzdHJ1Y3QgbXBjNXh4eF9wc2MgKilkZXZfYmFzZTsKKyNlbHNlCisJdm9sYXRpbGUgc3RydWN0IG1wYzV4eHhfcHNjICpwc2MgPSAoc3RydWN0IG1wYzV4eHhfcHNjICopUFNDX0JBU0U7CisjZW5kaWYKKwkvKiBXYWl0IGZvciBsYXN0IGNoYXJhY3RlciB0byBnby4gKi8KKwl3aGlsZSAoIShwc2MtPnBzY19zdGF0dXMgJiBQU0NfU1JfVFhFTVApKQorCQk7CisKKwlwc2MtPnBzY19idWZmZXJfOCA9IGM7Cit9CisKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKIHZvaWQgc2VyaWFsX3B1dHNfZGV2ICh1bnNpZ25lZCBsb25nIGRldl9iYXNlLCBjb25zdCBjaGFyICpzKQogI2Vsc2UKIHZvaWQgc2VyaWFsX3B1dHMgKGNvbnN0IGNoYXIgKnMpCkBAIC0yNDAsNiArMjU5LDQzIEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCit2b2lkIHNlcmlhbF9zZXRydHNfZGV2ICh1bnNpZ25lZCBsb25nIGRldl9iYXNlLCBpbnQgcykKKyNlbHNlCit2b2lkIHNlcmlhbF9zZXRydHMoaW50IHMpCisjZW5kaWYKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCisJdm9sYXRpbGUgc3RydWN0IG1wYzV4eHhfcHNjICpwc2MgPSAoc3RydWN0IG1wYzV4eHhfcHNjICopZGV2X2Jhc2U7CisjZWxzZQorCXZvbGF0aWxlIHN0cnVjdCBtcGM1eHh4X3BzYyAqcHNjID0gKHN0cnVjdCBtcGM1eHh4X3BzYyAqKVBTQ19CQVNFOworI2VuZGlmCisKKwlpZiAocykgeworCQkvKiBBc3NlcnQgUlRTIChiZWNvbWUgTE9XKSAqLworCQlwc2MtPm9wMSA9IDB4MTsKKwl9CisJZWxzZSB7CisJCS8qIE5lZ2F0ZSBSVFMgKGJlY29tZSBISUdIKSAqLworCQlwc2MtPm9wMCA9IDB4MTsKKwl9Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCitpbnQgc2VyaWFsX2dldGN0c19kZXYgKHVuc2lnbmVkIGxvbmcgZGV2X2Jhc2UpCisjZWxzZQoraW50IHNlcmlhbF9nZXRjdHModm9pZCkKKyNlbmRpZgoreworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKKwl2b2xhdGlsZSBzdHJ1Y3QgbXBjNXh4eF9wc2MgKnBzYyA9IChzdHJ1Y3QgbXBjNXh4eF9wc2MgKilkZXZfYmFzZTsKKyNlbHNlCisJdm9sYXRpbGUgc3RydWN0IG1wYzV4eHhfcHNjICpwc2MgPSAoc3RydWN0IG1wYzV4eHhfcHNjICopUFNDX0JBU0U7CisjZW5kaWYKKworCXJldHVybiAocHNjLT5pcCAmIDB4MSkgPyAwIDogMTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKIGludCBzZXJpYWwwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gKHNlcmlhbF9pbml0X2RldihQU0NfQkFTRSkpOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyMjAvTWFrZWZpbGUgYi9jcHUvbXBjODIyMC9NYWtlZmlsZQppbmRleCA3YzliNmM5Li4xZjJlOTMxIDEwMDY0NAotLS0gYS9jcHUvbXBjODIyMC9NYWtlZmlsZQorKysgYi9jcHUvbXBjODIyMC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzCisjIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyNCArMjMsMjggQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLUFTT0JKUwk9IGlvLm8gZmVjX2RtYV90YXNrcy5vCi1PQkpTCT0gY3B1Lm8gY3B1X2luaXQubyBkcmFtU2V0dXAubyBmZWMubyBpMmMubyBcCitTT0JKUwk9IGlvLm8gZmVjX2RtYV90YXNrcy5vCitDT0JKUwk9IGNwdS5vIGNwdV9pbml0Lm8gZHJhbVNldHVwLm8gZmVjLm8gaTJjLm8gXAogCSAgaW50ZXJydXB0cy5vIGxvYWR0YXNrLm8gc3BlZWQubyBcCiAJICB0cmFwcy5vIHVhcnQubyBwY2kubwogCi1hbGw6CS5kZXBlbmQgJChTVEFSVCkgJChBU09CSlMpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCi0JJChBUikgY3J2ICRAICQoQVNPQkpTKSAkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKEFTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjIwL3BjaS5jIGIvY3B1L21wYzgyMjAvcGNpLmMKaW5kZXggY2E0YTA0ZC4uNGVmMjE0ZSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyMjAvcGNpLmMKKysrIGIvY3B1L21wYzgyMjAvcGNpLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCWhvc2UtPnJlZ2lvbl9jb3VudCA9IDM7CiAKIAlob3NlLT5jZmdfYWRkciA9ICYoeGNwY2ktPmNmZ19hZHIpOwotCWhvc2UtPmNmZ19kYXRhID0gQ09ORklHX1BDSV9DRkdfQlVTOworCWhvc2UtPmNmZ19kYXRhID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDT05GSUdfUENJX0NGR19CVVM7CiAKIAlwY2lfc2V0X29wcyhob3NlLAogCQltcGM4MjIwX3BjaV9yZWFkX2NvbmZpZ19ieXRlLApkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvTWFrZWZpbGUgYi9jcHUvbXBjODI0eC9NYWtlZmlsZQppbmRleCBkZjBkNjRlLi5kOWZkOWJmIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9NYWtlZmlsZQorKysgYi9jcHUvbXBjODI0eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwyNiArMjIsMzUgQEAKICMKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iailkcml2ZXJzL2VwaWMpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKWRyaXZlcnMvaTJjKQorZW5kaWYKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKLVNUQVJUCT0gc3RhcnQuUwotT0JKUwk9IHRyYXBzLm8gY3B1Lm8gY3B1X2luaXQubyBpbnRlcnJ1cHRzLm8gc3BlZWQubyBcCi0JICBkcml2ZXJzL2VwaWMvZXBpYzEubyBkcml2ZXJzL2kyYy9pMmMubyBwY2kubyBiZWRidWdfNjAzZS5vCitTVEFSVAk9IHN0YXJ0Lm8KK0NPQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIGludGVycnVwdHMubyBzcGVlZC5vIFwKKwkgIGRyaXZlcnMvZXBpYy9lcGljMS5vIGRyaXZlcnMvaTJjL2kyYy5vIHBjaS5vCitDT0JKU19MTiA9IGJlZGJ1Z182MDNlLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKU19MTjoubz0uYykpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSAkKENPQkpTX0xOKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCi1iZWRidWdfNjAzZS5jOgotCWxuIC1zIC4uL21wYzgyNjAvYmVkYnVnXzYwM2UuYyBiZWRidWdfNjAzZS5jCiskKG9iailiZWRidWdfNjAzZS5jOgorCWxuIC1zICQoc3JjKS4uL21wYzgyNjAvYmVkYnVnXzYwM2UuYyAkKG9iailiZWRidWdfNjAzZS5jCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWUyZmFjLi4wMDAwMDAwCi0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgICAgICAgQ29weXJpZ2h0IE1vdG9yb2xhLCBJbmMuIDE5OTcKLSMgICAgICAgQUxMIFJJR0hUUyBSRVNFUlZFRAotIwotIyAgICAgICBZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZAotIyAgICAgICBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRSBzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZAotIyAgICAgICB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vciByZWRpc3RyaWJ1dGVkIHZlcnNpb25zLAotIyAgICAgICBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KLSMgICAgICAgTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlcgotIyAgICAgICBhbnkgcGF0ZW50cyBvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCi0jCi0jICAgICAgIFRoZSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgotIyAgICAgICBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBNT1RPUk9MQSBESVNDTEFJTVMKLSMgICAgICAgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBJTVBMSUVECi0jICAgICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyAgICAgICBQVVJQT1NFIEFORCBBTlkgV0FSUkFOVFkgQUdBSU5TVCBJTkZSSU5HRU1FTlQgV0lUSAotIyAgICAgICBSRUdBUkQgVE8gVEhFIFNPRlRXQVJFIChJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TCi0jICAgICAgIFRIRVJFT0YpIEFORCBBTlkgQUNDT01QQU5ZSU5HIFdSSVRURU4gTUFURVJJQUxTLgotIwotIyAgICAgICBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBJTiBOTyBFVkVOVCBTSEFMTAotIyAgICAgICBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKLSMgICAgICAgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YKLSMgICAgICAgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTCi0jICAgICAgIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykgQVJJU0lORyBPRiBUSEUgVVNFIE9SCi0jICAgICAgIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotVEFSR0VUID0gbGliZG1hLmEKLQotREVCVUcgICA9IC1ERE1BREJHCi1MU1QgICAgID0gLUhhbm5vIC1TCi1PUFRJTSAgID0KLUNDICAgICAgPSAvcmlzYy90b29scy9wa2dzL21ldGF3YXJlL2Jpbi9oY3BwYwotQ0ZMQUdTICA9IC1Ibm9jb3B5ciAtYyAtSHNkcyAtSG9uPUNoYXJfZGVmYXVsdF91bnNpZ25lZCAtSG9uPUNoYXJfaXNfcmVwIC1JLi4vaW5jIC1JL3Jpc2MvdG9vbHMvcGtncy9tZXRhd2FyZS9pbmMKLUNDb2JqICAgPSAkKENDKSAkKENGTEFHUykgJChERUJVRykgJChPUFRJTSkKLVBSRVAgICAgPSAkKENDKSAkKENGTEFHUykgLVAKLQotIyBBc3NlbWJsZXIgdXNlZCB0byBidWlsZCB0aGUgLnMgZmlsZXMgKGZvciB0aGUgYm9hcmQgdmVyc2lvbikKLQotQVNPUFQgICA9IC1iaWdfc2kgLWMKLUFTREVCVUcgPSAtbCAtZm0KLUFTICAgICAgPSAvcmlzYy90b29scy9wa2dzL21ldGF3YXJlL2Jpbi9hc3BwYwotCi0jIExpbmtlciB0byBicmluZyAubyBmaWxlcyB0b2dldGhlciBpbnRvIGFuIGV4ZWN1dGFibGUuCi0KLUxLT1BUCT0gIC1CYmFzZT0wIC1xIC1yIC1RbgotTEtDTUQgICA9Ci1MSU5LICAgID0gIC9yaXNjL3Rvb2xzL3BrZ3MvbWV0YXdhcmUvYmluL2xkcHBjICQoTEtDTUQpICQoTEtPUFQpCi0KLSMgRE9TIFV0aWxpdGllcwotCi1ERUwgICAgID0gcm0KLUNPUFkgICAgPSBjcAotTElTVCAgICA9IGxzCi0KLU9CSkVDVFMgPSBkbWExLm8gZG1hMi5vCi0KLWFsbDogJChUQVJHRVQpCi0KLSQoVEFSR0VUKTogJChPQkpFQ1RTKQotCSQoTElOSykgJChPQkpFQ1RTKSAtbyAkQAotCi1vYmplY3RzOiBkbWExLm8KLQotY2xlYW46Ci0JJChERUwpIC1mICoubyAqLmkgKi5tYXAgKi5sc3QgJChUQVJHRVQpICQoT0JKRUNUUykKLQotLnMubzoKLQkkKERFTCkgLWYgJCouaQotCSQoUFJFUCkgLUhhc21jcHAgJDwKLQkkKEFTKSAkKEFTT1BUKSAkKi5pCi0jCSQoQVMpICQoQVNPUFQpICQoQVNERUJVRykgJCouaSA+ICQqLmxzdAotCi0uYy5vOgotCSQoQ0NvYmopICQ8Ci0KLS5jLnM6Ci0JJChDQ29iaikgJChMU1QpICQ8Ci0KLWRtYTEubzogZG1hX2V4cG9ydC5oIGRtYS5oIGRtYTEuYwotCi1kbWEyLm86IGRtYS5oIGRtYTIucwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvTWFrZWZpbGVfcGMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9NYWtlZmlsZV9wYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRmMmEzYy4uMDAwMDAwMAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9NYWtlZmlsZV9wYworKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgbWFrZWZpbGVfcGMgIGZvciB1c2Ugd2l0aCBta3NudCB0b29scyAgIGRyaXZlcnMvZG1hCi0jCi0jICAgICAgIENvcHlyaWdodCBNb3Rvcm9sYSwgSW5jLiAxOTk3Ci0jICAgICAgIEFMTCBSSUdIVFMgUkVTRVJWRUQKLSMKLSMgICAgICAgWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQKLSMgICAgICAgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUgc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQKLSMgICAgICAgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IgcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywKLSMgICAgICAgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCi0jICAgICAgIE5vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIKLSMgICAgICAgYW55IHBhdGVudHMgb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgotIwotIyAgICAgICBUaGUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KLSMgICAgICAgVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgTU9UT1JPTEEgRElTQ0xBSU1TCi0jICAgICAgIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgSU1QTElFRAotIyAgICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgICAgICAgUFVSUE9TRSBBTkQgQU5ZIFdBUlJBTlRZIEFHQUlOU1QgSU5GUklOR0VNRU5UIFdJVEgKLSMgICAgICAgUkVHQVJEIFRPIFRIRSBTT0ZUV0FSRSAoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUwotIyAgICAgICBUSEVSRU9GKSBBTkQgQU5ZIEFDQ09NUEFOWUlORyBXUklUVEVOIE1BVEVSSUFMUy4KLSMKLSMgICAgICAgVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgSU4gTk8gRVZFTlQgU0hBTEwKLSMgICAgICAgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCi0jICAgICAgIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GCi0jICAgICAgIEJVU0lORVNTIFBST0ZJVFMsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUwotIyAgICAgICBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpIEFSSVNJTkcgT0YgVEhFIFVTRSBPUgotIyAgICAgICBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVRBUkdFVCA9IGxpYmRtYS5hCi0KLURFQlVHICAgPSAtRERNQURCRwotTFNUICAgICA9IC1IYW5ubyAtUwotT1BUSU0gICA9Ci1DQyAgICAgID0gbTovb2xkX3Rvb2xzL3Rvb2xzL2hjcHBjL2Jpbi9oY3BwYwotQ0ZMQUdTICA9IC1Ibm9jb3B5ciAtYyAtSHNkcyAtSG9uPUNoYXJfZGVmYXVsdF91bnNpZ25lZCAtSG9uPUNoYXJfaXNfcmVwIC1JLi4vaW5jIC1JL3Jpc2MvdG9vbHMvcGtncy9tZXRhd2FyZS9pbmMKLUNDb2JqICAgPSAkKENDKSAkKENGTEFHUykgJChERUJVRykgJChPUFRJTSkKLVBSRVAgICAgPSAkKENDKSAkKENGTEFHUykgLVAKLQotIyBBc3NlbWJsZXIgdXNlZCB0byBidWlsZCB0aGUgLnMgZmlsZXMgKGZvciB0aGUgYm9hcmQgdmVyc2lvbikKLQotQVNPUFQgICA9IC1iaWdfc2kgLWMKLUFTREVCVUcgPSAtbCAtZm0KLUFTICAgICAgPSBtOi9vbGRfdG9vbHMvdG9vbHMvaGNwcGMvYmluL2FzcHBjCi0KLSMgTGlua2VyIHRvIGJyaW5nIC5vIGZpbGVzIHRvZ2V0aGVyIGludG8gYW4gZXhlY3V0YWJsZS4KLQotTEtPUFQJPSAgLUJiYXNlPTAgLXEgLXIgLVFuCi1MS0NNRCAgID0KLUxJTksgICAgPSBtOi9vbGRfdG9vbHMvdG9vbHMvaGNwcGMvYmluL2xkcHBjICQoTEtDTUQpICQoTEtPUFQpCi0KLSMgRE9TIFV0aWxpdGllcwotCi1ERUwgICAgID0gcm0KLUNPUFkgICAgPSBjcAotTElTVCAgICA9IGxzCi0KLU9CSkVDVFMgPSBkbWExLm8gZG1hMi5vCi0KLWFsbDogJChUQVJHRVQpCi0KLSQoVEFSR0VUKTogJChPQkpFQ1RTKQotCSQoTElOSykgJChPQkpFQ1RTKSAtbyAkQAotCi1vYmplY3RzOiBkbWExLm8KLQotY2xlYW46Ci0JJChERUwpIC1mICoubyAqLmkgKi5tYXAgKi5sc3QgJChUQVJHRVQpICQoT0JKRUNUUykKLQotLnMubzoKLQkkKERFTCkgLWYgJCouaQotCSQoUFJFUCkgLUhhc21jcHAgJDwKLQkkKEFTKSAkKEFTT1BUKSAkKi5pCi0jCSQoQVMpICQoQVNPUFQpICQoQVNERUJVRykgJCouaSA+ICQqLmxzdAotCi0uYy5vOgotCSQoQ0NvYmopICQ8Ci0KLS5jLnM6Ci0JJChDQ29iaikgJChMU1QpICQ8Ci0KLWRtYTEubzogZG1hX2V4cG9ydC5oIGRtYS5oIGRtYTEuYwotCSQoQ0NvYmopICQ8Ci0KLWRtYTIubzogZG1hLmggZG1hMi5zCi0JJChERUwpIC1mICQqLmkKLQkkKFBSRVApIC1IYXNtY3BwICQ8Ci0JJChBUykgJChBU09QVCkgJCouaQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvUkVBRE1FIGIvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmY0YmMwLi4wMDAwMDAwCi0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1DT05URU5UOgotCi0gICBkbWEuaAotICAgZG1hMS5jCi0gICBkbWEyLnMKLQotV0hBVCBBUkUgVEhFU0UgRklMRVM6Ci0KLVRoZXNlIGZpbGVzIGNvbnRhaW4gTVBDODI0MCAoS2FobHVhKSBETUEgY29udHJvbGxlcgotZHJpdmVyIHJvdXRpbmVzLiBUaGUgZHJpdmVyIHJvdXRpbmVzIGFyZSBub3QKLXdyaXR0ZW4gZm9yIGFueSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtLgotVGhleSBzZXJ2ZXMgdGhlIHB1cnBvc2Ugb2YgY29kZSBzYW1wbGUsIGFuZAotanVtcC1zdGFydCBmb3IgdXNpbmcgdGhlIE1QQzgyNDAgRE1BIGNvbnRyb2xsZXIuCi0KLUZvciB0aGUgcmVhc29uIG9mIGNvcnJlY3RuZXNzIG9mIEMgbGFuZ3VhZ2UKLXN5bnRheCwgdGhlc2UgZmlsZXMgYXJlIGNvbXBpbGVkIGJ5IE1ldGF3YXJlCi1DIGNvbXBpbGVyIGFuZCBhc3NlbWJsZXIuCi0KLUVORElBTiBOT1RBVElPTjoKLQotVGhlIGFsZ29yaXRobSBpcyBkZXNpZ25lZCBmb3IgYmlnLWVuZGlhbiBtb2RlLAotc29mdHdhcmUgaXMgcmVzcG9uc2libGUgZm9yIGJ5dGUgc3dhcHBpbmcuCi0KLVVTQUdFOgotCi0xLiBUaGUgaG9zdCBzeXN0ZW0gdGhhdCBpcyBydW5uaW5nIG9uIE1QQzgyNDAKLSAgIG9yIHVzaW5nIE1QQzgyNDAgYXMgSS9PIGRldmljZSBzaGFsbCBsaW5rCi0gICB0aGUgZmlsZXMgbGlzdGVkIGhlcmUuIFRoZSBtZW1vcnkgbG9jYXRpb24KLSAgIG9mIGRyaXZlciByb3V0aW5lcyBzaGFsbCB0YWtlIGludG8gYWNjb3VudCBvZgotICAgdGhhdCBkcml2ZXIgcm91dGluZXMgbmVlZCB0byBydW4gaW4gc3VwZXJ2aXNvcgotICAgbW9kZSBhbmQgdGhleSBwcm9jZXNzIERNQSBjb250cm9sbGVyIGludGVycnVwdC4KLQotMi4gVGhlIGhvc3Qgc3lzdGVtIGlzIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZwotICAgdGhlIE1QQzgyNDAgaW5jbHVkaW5nIEVtYmVkZGVkIFV0aWxpdGllcyBNZW1vcnkKLSAgIEJsb2NrLiBTaW5jZSB0aGUgRE1BIGNvbnRyb2xsZXIgb24gTVBDODI0MCBjYW4KLSAgIGJlIGFjY2Vzc2VkIGJ5IGVpdGhlciBsb2NhbCA2MDNlIGNvcmUgb3IgdGhlIGhvc3QKLSAgIHRoYXQgTVBDODI0MCBzZXJ2ZXMgYXMgSS9PIHByb2Nlc3NvciB0aHJvdWdoIGhvc3QKLSAgIFBDSSBjb25maWd1cmF0aW9uLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgbG9jYWwKLSAgIHByb2Nlc3NvciB1c2VzIEVVTUJCQVIgdG8gYWNjZXNzIGl0cyBsb2NhbCBETUEKLSAgIGNvbnRyb2xsZXIgd2hpbGUgdGhlIFBDSSBtYXN0ZXIgdXNlcyBJL08KLSAgIHByb2Nlc3NvcidzIFBDU1JCQVIgdG8gYWNjZXNzIHRoZSBETUEgY29udHJvbGxlcgotICAgb24gSS9PIGRldmljZS4KLQotICAgVG8gcXVhbGlmeSB3aGV0aGVyIGlzIEVVTUJCQVIgb3IgUENTUkJBUiwgb25lCi0gICBhZGRpdGlvbmFsIHBhcmFtZXRlciBpcyByZXF1aWVkIGZyb20gdGhlIGhvc3QKLSAgIHN5c3RlbSwgTE9DQUwgb3IgUkVNT1RFIHNvIHRoYXQgdGhlIGJhc2UgdmFsdWUKLSAgIGNhbiBiZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQuCi0KLTMuIElmIHRoZSBob3N0IHN5c3RlbSBpcyBhbHNvIHVzaW5nIHRoZSBFUElDIHVuaXQKLSAgIG9uIE1QQzgyNDAsIHRoZSBzeXN0ZW0gY2FuIHJlZ2lzdGVyIHRoZQotICAgRE1BX0lTUiB3aXRoIHRoZSBFUElDIGluY2x1ZGluZyBvdGhlcgotICAgZGVzaXJlZCByZXNvdXJjZXMuCi0KLSAgIElmIHRoZSBob3N0IHN5c3RlbSBkb2VzIG5vdCB1c2luZyB0aGUgRVBJQyB1bml0Ci0gICBvbiBNUEM4MjQwLCBETUFfSVNSIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZm9yCi0gICBlYWNoIGRlc2lyZWQgdGltZSBpbnRlcnZhbC4KLQotICAgSW4gYm90aCBjYXNlcywgdGhlIGhvc3Qgc3lzdGVtIGlzIGZyZWUgdG8KLSAgIHByb3ZpZGUgaXRzIG93biBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgotCi00LiBUbyBzdGFydCBhIGRpcmVjdCBtb2RlIERNQSB0cmFuc2FjdGlvbiwKLSAgIHVzZSBETUFfQmxkX0N1cnIgd2l0aCB0aGUgc3RhcnQgcGFyYW1ldGVyCi0gICBzZXQgdG8gMS4KLQotICAgVG8gc3RhcnQgYSBjaGFpbmluZyBtb2RlIERNQSB0cmFuc2FjdGlvbiwKLSAgIHRoZSBhcHBsaWNhdGlvbiBzaGFsbCBidWlsZCBkZXNjcmlwdG9ycwotICAgaW4gbWVtb3J5IGZpcnN0LCBuZXh0LCB1c2UgRE1BX0JsZF9EZXNwCi0gICB3aXRoIHRoZSBzdGFydCBwYXJhbWV0ZXIgc2V0IHRvIDEuCi0KLTUuIERNQV9TdGFydCBmdW5jdGlvbiBjbGVhcnMsIHRoZW4gc2V0cyB0aGUgQ1MKLSAgIGJpdCBvZiBETUEgbW9kZSByZWdpc3Rlci4KLQotICAgRE1BX0hhbHQgZnVuY3Rpb24gY2xlYXJzIHRoZSBDUyBiaXQgb2YgRE1BCi0gICBtb2RlIHJlZ2lzdGVyLgotCi0gICBUaGVzZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8gc3RhcnQgYW5kCi0gICBoYWx0IHRoZSBETUEgdHJhbnNhY3Rpb24uCi0KLSAgIElmIHRoZSBjaGFpbmluZyBkZXNjcmlwdG9ycyBoYXMgYmVlbgotICAgbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgdGltZSBhIERNQQotICAgdHJhbnNhY3Rpb24gc3RhcnRlZCwgdXNlIERNQV9DaG5fQ250Ci0gICBmdW5jdGlvbiB0byBsZXQgRE1BIGNvbnRyb2xsZXIgcHJvY2VzcwotICAgdGhlIG1vZGlmaWVkIGRlc2NyaXB0b3IgY2hhaW4gd2l0aG91dAotICAgc3RvcHBpbmcgb3IgZGlzdHVyYmluZyB0aGUgY3VycmVudCBETUEKLSAgIHRyYW5zYWN0aW9uLgotCi0gICBJdCBpcyB0aGUgaG9zdCBzeXN0ZW0ncyByZXNwb25zaWJpbGl0eSBvZgotICAgc2V0dGluZyB1cCB0aGUgY29ycmVjdCBETUEgdHJhbnNmZXIgbW9kZQotICAgYW5kIHBhc3MgdGhlIGNvcnJlY3QgbWVtb3J5IGFkZHJlc3MgcGFyYW1ldGVycy4KLQotNi4gSXQgaXMgdGhlIGhvc3Qgc3lzdGVtJ3MgcmVzcG9uc2liaWxpdHkgb2YKLSAgIHF1ZXVlaW5nIHRoZSBETUEgSS9PIHJlcXVlc3QuIFRoZSBob3N0Ci0gICBzeXN0ZW0gY2FuIGNhbGwgdGhlIERNQV9JU1Igd2l0aCBpdHMgb3duCi0gICBkZXNpcmVkIGludGVycnVwdCBzZXJ2aWNlIHN1YnJvdXRpbmVzIHRvCi0gICBoYW5kbGUgZWFjaCBpbmRpdmlkdWFsIGludGVycnVwdCBhbmQgcXVldWVkCi0gICBETUEgSS9PIHJlcXVlc3RzLgotCi03LiBUaGUgRE1BIGRyaXZlciByb3V0aW5lcyBjb250YWlucyBhIHNldAotICAgb2YgdXRpbGl0aWVzLCBTZXQgYW5kIEdldCwgZm9yIGhvc3Qgc3lzdGVtCi0gICB0byBxdWVyeSBhbmQgbW9kaWZ5IHRoZSBkZXNpcmVkIERNQSByZWdpc3RlcnMuCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWEuaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjFiZTc0Li4wMDAwMDAwCi0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLSNpZm5kZWYgRE1BX0gKLSNkZWZpbmUgRE1BX0gKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogY29weXJpZ2h0IEAgTW90b3JvbGEgMTk5OQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBOVU1fRE1BX1JFRyAgIDcKLSNkZWZpbmUgRE1BX01SX1JFRyAgICAwCi0jZGVmaW5lIERNQV9TUl9SRUcgICAgMQotI2RlZmluZSBETUFfQ0RBUl9SRUcgIDIKLSNkZWZpbmUgRE1BX1NBUl9SRUcgICAzCi0jZGVmaW5lIERNQV9EQVJfUkVHICAgNAotI2RlZmluZSBETUFfQkNSX1JFRyAgIDUKLSNkZWZpbmUgRE1BX05EQVJfUkVHICA2Ci0KLXR5cGVkZWYgZW51bSBfZG1hc3RhdHVzCi17Ci0JRE1BU1VDQ0VTUyA9IDB4MTAwMCwKLQlETUFMTUVSUk9SLAotCURNQVBFUlJPUiwKLQlETUFDSE5CVVNZLAotCURNQUVPU0lOVCwKLQlETUFFT0NBSU5ULAotCURNQUlOVkFMSUQsCi0JRE1BTk9FVkVOVCwKLX0gRE1BU3RhdHVzOwotCi10eXBlZGVmIGVudW0gX2xvY2F0aW9uCi17Ci0JTE9DQUwgPSAwLCAgICAgLyogbG9jYWwgcHJvY2Vzc29yIGFjY2Vzc2VzIG9uIGJvYXJkIERNQSwKLQkJCSAgICAgICAgICBsb2NhbCBwcm9jZXNzb3IncyBldW1iYmFyIGlzIHJlcXVpcmVkICovCi0JUkVNT1RFID0gMSwgICAgLyogUENJIG1hc3RlciBhY2Nlc3NlcyBETUEgb24gSS9PIGJvYXJkLAotCQkJICAgICAgICAgIEkvTyBwcm9jZXNzb3IncyBwY3NyYmFyIGlzIHJlcXVpcmVkICovCi19IExPQ0FUSU9OOwotCi10eXBlZGVmIGVudW0gZG1hX21yX2JpdAotewotCUlSUVMgICAgPSAweDAwMDgwMDAwLAotICAgIFBERSAgICAgPSAweDAwMDQwMDAwLAotCURBSFRTICAgPSAweDAwMDMwMDAwLAotCVNBSFRTICAgPSAweDAwMDBjMDAwLAotCURBSEUgICAgPSAweDAwMDAyMDAwLAotCVNBSEUgICAgPSAweDAwMDAxMDAwLAotCVBSQyAgICAgPSAweDAwMDAwYzAwLAotCUVJRSAgICAgPSAweDAwMDAwMDgwLAotCUVPVElFICAgPSAweDAwMDAwMDQwLAotCURMICAgICAgPSAweDAwMDAwMDA4LAotCUNUTSAgICAgPSAweDAwMDAwMDA0LAotCUNDICAgICAgPSAweDAwMDAwMDAyLAotCUNTICAgICAgPSAweDAwMDAwMDAxLAotfSBETUFfTVJfQklUOwotCi10eXBlZGVmIGVudW0gZG1hX3NyX2JpdAotewotCUxNRSAgICAgPSAweDAwMDAwMDgwLAotCVBFICAgICAgPSAweDAwMDAwMDEwLAotCUNCICAgICAgPSAweDAwMDAwMDA0LAotCUVPU0kgICAgPSAweDAwMDAwMDAyLAotCUVPQ0FJICAgPSAweDAwMDAwMDAxLAotfSBETUFfU1JfQklUOwotCi0vKiBzdHJ1Y3R1cmUgZm9yIERNQSBNb2RlIFJlZ2lzdGVyICovCi10eXBlZGVmIHN0cnVjdCBfZG1hX21yCi17Ci0JdW5zaWduZWQgaW50ICByZXNlcnZlZDAgOiAxMjsKLQl1bnNpZ25lZCBpbnQgIGlycXMgICAgICA6IDE7Ci0JdW5zaWduZWQgaW50ICBwZGUgICAgICAgOiAxOwotCXVuc2lnbmVkIGludCAgZGFodHMgICAgIDogMjsKLSAgICB1bnNpZ25lZCBpbnQgIHNhaHRzICAgICA6IDI7Ci0JdW5zaWduZWQgaW50ICBkYWhlICAgICAgOiAxOwotCXVuc2lnbmVkIGludCAgc2FoZSAgICAgIDogMTsKLQl1bnNpZ25lZCBpbnQgIHByYyAgICAgICA6IDI7Ci0JdW5zaWduZWQgaW50ICByZXNlcnZlZDEgOiAxOwotCXVuc2lnbmVkIGludCAgZWllICAgICAgIDogMTsKLQl1bnNpZ25lZCBpbnQgIGVvdGllICAgICA6IDE7Ci0JdW5zaWduZWQgaW50ICByZXNlcnZlZDIgOiAzOwotCXVuc2lnbmVkIGludCAgZGwgICAgICAgIDogMTsKLQl1bnNpZ25lZCBpbnQgIGN0bSAgICAgICA6IDE7Ci0JLyogaWYgY2hhaW5pbmcgbW9kZSBpcyBlbmFibGVkLCBhbnkgdGltZSwgdXNlciBjYW4gbW9kaWZ5IHRoZQotCSAqIGRlc2NyaXB0b3IgYW5kIGRvZXMgbm90IG5lZWQgdG8gaGFsdCB0aGUgY3VycmVudCBETUEgdHJhbnNhY3Rpb24uCi0JICogU2V0IENDIGJpdCwgZW5hYmxlIERNQSB0byBwcm9jZXNzIHRoZSBtb2RpZmllZCBkZXNjcmlwdG9ycwotCSAqIEhhcmR3YXJlIHdpbGwgY2xlYXIgdGhpcyBiaXQgZWFjaCB0aW1lLCBETUEgc3RhcnRzLgotCSAqLwotCXVuc2lnbmVkIGludCAgY2MgICAgICAgIDogMTsKLQkvKiBjcyBiaXQgaGFzIGR1YSByb2xlLCBoYWx0IHRoZSBjdXJyZW50IERNQSB0cmFuc2FjdGlvbiBhbmQKLQkgKiAocmUpc3RhcnQgRE1BIHRyYW5zYWN0aW9uLiBJbiBjaGFpbmluZyBtb2RlLCBpZiB0aGUgZGVzY3JpcHRvcgotCSAqIG5lZWRzIG1vZGlmaWNhdGlvbiwgY3MgYml0IHNoYWxsIGJlIHVzZWQgbm90IHRoZSBjYyBiaXQuCi0JICogSGFyZHdhcmUgd2lsbCBub3Qgc2V0L2NsZWFyIHRoaXMgYml0IGVhY2ggdGltZSBETUEgdHJhbnNhY3Rpb24KLQkgKiBzdG9wcyBvciBzdGFydHMuIFNvZnR3YXJlIHNoYWxsIGRvIGl0LgotCSAqCi0JICogY3MgYml0IHNoYWxsIG5vdCBiZSB1c2VkIHRvIGhhbHQgY2hhaW5pbmcgRE1BIHRyYW5zYWN0aW9uIGZvcgotCSAqIG1vZGlmeWluZyB0aGUgZGVzY3JpcHRvci4gVGhhdCBpcyB0aGUgcm9sZSBvZiBDQyBiaXQuCi0JICovCi0JdW5zaWduZWQgaW50ICBjcyAgICAgICAgOiAxOwotfSBETUFfTVI7Ci0KLS8qIHN0cnVjdHVyZSBmb3IgRE1BIFN0YXR1cyByZWdpc3RlciAqLwotdHlwZWRlZiBzdHJ1Y3QgX2RtYV9zcgotewotCXVuc2lnbmVkIGludCAgcmVzZXJ2ZWQwIDogMjQ7Ci0JdW5zaWduZWQgaW50ICBsbWUgICAgICAgOiAxOwotCXVuc2lnbmVkIGludCAgcmVzZXJ2ZWQxIDogMjsKLQl1bnNpZ25lZCBpbnQgIHBlICAgICAgICA6IDE7Ci0JdW5zaWduZWQgaW50ICByZXNlcnZlZDIgOiAxOwotCXVuc2lnbmVkIGludCAgY2IgICAgICAgIDogMTsKLQl1bnNpZ25lZCBpbnQgIGVvc2kgICAgICA6IDE7Ci0JdW5zaWduZWQgaW50ICBlb2NhaSAgICAgOiAxOwotfSBETUFfU1I7Ci0KLS8qIHN0cnVjdHVyZSBmb3IgRE1BIGN1cnJlbnQgZGVzY3JpcHRvciBhZGRyZXNzIHJlZ2lzdGVyICovCi10eXBlZGVmIHN0cnVjdCBfZG1hX2NkYXIKLXsKLQl1bnNpZ25lZCBpbnQgIGNkYSAgICA6IDI3OwotCXVuc2lnbmVkIGludCBzbmVuICAgIDogMTsKLQl1bnNpZ25lZCBpbnQgZW9zaWUgICA6IDE7Ci0JdW5zaWduZWQgaW50IGN0dCAgICAgOiAyOwotCXVuc2lnbmVkIGludCBlb3RkICAgIDogMTsKLX0gRE1BX0NEQVI7Ci0KLS8qIHN0cnVjdHVyZSBmb3IgRE1BIGJ5dGUgY291bnQgcmVnaXN0ZXIgKi8KLXR5cGVkZWYgc3RydWN0IF9kbWFfYmNyCi17Ci0JdW5zaWduZWQgaW50IHJlc2VydmVkIDogNjsKLQl1bnNpZ25lZCBpbnQgIGJjciAgICAgIDogMjY7Ci19IERNQV9CQ1I7Ci0KLS8qIHN0cnVjdHVyZSBmb3IgRE1BIE5leHQgRGVzY3JpcHRvciBBZGRyZXNzIHJlZ2lzdGVyICovCi10eXBlZGVmIHN0cnVjdCBfZG1hX25kYXIKLXsKLQl1bnNpZ25lZCBpbnQgbmRhICAgIDogMjc7Ci0JdW5zaWduZWQgaW50IG5kc25lbiA6IDE7Ci0JdW5zaWduZWQgaW50IG5kZW9zaWU6IDE7Ci0JdW5zaWduZWQgaW50IG5kY3R0ICA6IDI7Ci0JdW5zaWduZWQgaW50IGVvdGQgICA6IDE7Ci19IERNQV9OREFSOwotCi0vKiBzdHJ1Y3R1cmUgZm9yIERNQSBjdXJyZW50IHRyYW5zYWN0aW9uIGluZm8gKi8KLXR5cGVkZWYgc3RydWN0IF9kbWFfY3VycgotewotCXVuc2lnbmVkIGludCBzcmNfYWRkcjsKLQl1bnNpZ25lZCBpbnQgZGVzdF9hZGRyOwotCXVuc2lnbmVkIGludCBieXRlX2NudDsKLX0gRE1BX0NVUlI7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqIEtlcm5lbCBBUEkqKioqKioqKioqKioqKioqKioqKgotICogS2VybmVsIEFQSXMgYXJlIHVzZWQgdG8gaW50ZXJmYWNlIHdpdGggTy5TLiBrZXJuZWwuCi0gKiBUaGV5IGFyZSB0aGUgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IE8uUy4ga2VybmVsIHRvCi0gKiBwcm92aWRlIEkvTyBzZXJ2aWNlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKipETUEgRGV2aWNlIENvbnRyb2wgRnVuY3Rpb25zICoqKioqKioqLwotCi0vKioKLSAqIE5vdGU6Ci0gKgotICogSW4gYWxsIGZvbGxvd2luZyBmdW5jdGlvbnMsIHRoZSBob3N0IChLQUhMVUEpIHByb2Nlc3NvciBoYXMgYQotICogY2hvaWNlIG9mIGFjY2Vzc2luZyBvbiBib2FyZCBsb2NhbCBETUEgKExPQ0FMKSwKLSAqIG9yIERNQSBvbiBhIGRpc3RyaWJ1dGVkIEtBSExVQSAoUkVNT1RFKS4gSW4gZWl0aGVyIGNhc2UsCi0gKiB0aGUgY2FsbGVyIHNoYWxsIHBhc3MgdGhlIGNvbmZpZ3VyZWQgZW1iZWRkZWQgdXRpbGl0eSBtZW1vcnkKLSAqIGJsb2NrIGJhc2UgYWRkcmVzcyByZWxhdGl2ZSB0byB0aGUgRE1BLiBJZiBMT0NBTCBETUEgaXMgdXNlZCwKLSAqIHRoaXMgcGFyYW1ldGVyIHNoYWxsIGJlIEVVTUJCQVIsIGlmIFJFTU9URSBpcyB1c2VkLCB0aGUKLSAqIHBhcmFtZXRlciBzaGFsbCBiZSB0aGUgY29ycmVzcG9uZGluZyBQQ1NSQkFSLgotICoqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfR2V0X1N0YXQKLSAqCi0gKiBkZXNjcmlwdGlvbjogcmV0dXJuIHRoZSBjb250ZW50IG9mIHN0YXR1cyByZWdpc3RlciBvZgotICogICAgICAgICAgICAgIHRoZSBnaXZlbiBETUEgY2hhbm5lbAotICogICAgICAgICAgICAgIGlmIGVycm9yLCByZXR1cm4gRE1BSU5WQUxJRC4gT3RoZXJ3aXNlIHJldHVybgotICogICAgICAgICAgICAgIERNQVNVQ0NFU1MuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIERNQVN0YXR1cyBETUFfR2V0X1N0YXQoIExPQ0FUSU9OLCB1bnNpZ25lZCBpbnQgZXVtYmJhciwgdW5zaWduZWQgaW50IGNoYW5uZWwsIERNQV9TUiAqICk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9HZXRfTW9kZQotICoKLSAqIGRlc2NyaXB0aW9uOiByZXR1cm4gdGhlIGNvbnRlbnQgb2YgbW9kZSByZWdpc3RlciBvZiB0aGUKLSAqICAgICAgICAgICAgICBnaXZlbiBETUEgY2hhbm5lbAotICogICAgICAgICAgICAgIGlmIGVycm9yLCByZXR1cm4gRE1BSU5WQUxJRC4gT3RoZXJ3aXNlIHJldHVybiBETUFTVUNDRVNTLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBETUFTdGF0dXMgRE1BX0dldF9Nb2RlKCBMT0NBVElPTiwgdW5zaWduZWQgaW50IGV1bWJiYXIsIHVuc2lnbmVkIGludCBjaGFubmVsLCBETUFfTVIgKiApOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfU2V0X01vZGUKLSAqCi0gKiBkZXNjcmlwdGlvbjogU2V0IGEgbmV3IG1vZGUgdG8gYSBnaXZlbiBETUEgY2hhbm5lbAotICogICAgICAgICAgICAgIHJldHVybiBETUFTVUNDRVNTIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSByZXR1cm4gRE1BQ0hOSU5WQUxJRAotICoKLSAqIG5vdGU6IEl0IGlzIG5vdCBhIGdvb2QgaWRlYSBvZiBjaGFuZ2luZyB0aGUgRE1BIG1vZGUgZHVyaW5nCi0gKiAgICAgICB0aGUgbWlkZGxlIG9mIGEgdHJhbnNhY3Rpb24uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgRE1BU3RhdHVzIERNQV9TZXRfTW9kZSggTE9DQVRJT04sIHVuc2lnbmVkIGludCBldW1iYmFyLCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgRE1BX01SIG1vZGUgKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfSVNSCi0gKgotICogZGVzY3JpcHRpb246IERNQSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCi0gKiAgICAgICAgICAgICAgcmV0dXJuIERNQVN0YXR1cyBiYXNlZCBvbiB0aGUgc3RhdHVzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgRE1BU3RhdHVzICAgIERNQV9JU1IoIHVuc2lnbmVkIGludCBldW1iYmFyLAotCQkJCQkJCSB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKLQkJCQkJCSAgICAgRE1BU3RhdHVzICgqbG1lX2Z1bmMpKCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgRE1BU3RhdHVzICksCi0JCQkJCSAgICAgICAgIERNQVN0YXR1cyAoKnBlX2Z1bmMpICggdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIERNQVN0YXR1cyApLAotCQkJCQkgICAgICAgICBETUFTdGF0dXMgKCplb3NpX2Z1bmMpKCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgRE1BU3RhdHVzICksCi0JCQkJCSAgICAgICAgIERNQVN0YXR1cyAoKmVvY2FpX2Z1bmMpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBETUFTdGF0dXMgKSk7Ci0KLXN0YXRpYyBETUFTdGF0dXMgZG1hX2Vycm9yX2Z1bmMoIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBETUFTdGF0dXMgKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKiBETUEgSS9PIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogRE1BX1N0YXJ0Ci0gKgotICogZGVzY3JpcHRpb246IHN0YXJ0IGEgZ2l2ZW4gRE1BIGNoYW5uZWwgdHJhbnNhY3Rpb24KLSAqICAgICAgICAgICAgICByZXR1cm4gRE1BU1VDQ0VTUyBpZiBzdWNjZXNzLCBvdGhlcndpc2UgcmV0dXJuIERNQUNITklOVkFMSUQKLSAqCi0gKiBub3RlOiB0aGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgRE1BX01SKENDKSBmaXJzdCwgdGhlbgotICogICAgICAgc2V0IERNQV9NUihDQykuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgRE1BU3RhdHVzIERNQV9TdGFydCggTE9DQVRJT04sIHVuc2lnbmVkIGludCBldW1iYmFyLHVuc2lnbmVkIGludCBjaGFubmVsICk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9IYWx0Ci0gKgotICogZGVzY3JpcHRpb246IGhhbHQgdGhlIGN1cnJlbnQgZG1hIHRyYW5zYWN0aW9uIG9uIHRoZSBzcGVjaWZpZWQKLSAqICAgICAgICAgICAgICBjaGFubmVsLgotICogICAgICAgICAgICAgIHJldHVybiBETUFTVUNDRVNTIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSByZXR1cm4gRE1BQ0hOSU5WQUxJRAotICoKLSAqIG5vdGU6IGlmIHRoZSBzcGVjaWZpZWQgRE1BIGNoYW5uZWwgaXMgaWRsZSwgbm90aGluZyBoYXBwZW5zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBETUFTdGF0dXMgRE1BX0hhbHQoIExPQ0FUSU9OLCB1bnNpZ25lZCBpbnQgZXVtYmJhcix1bnNpZ25lZCBpbnQgY2hhbm5lbCApOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9DaG5fQ250Ci0gKgotICogZGVzY3JpcHRpb246IHNldCB0aGUgRE1BX01SKENDKSBiaXQgZm9yIGEgZ2l2ZW4gY2hhbm5lbAotICogICAgICAgICAgICAgIHRoYXQgaXMgaW4gY2hhaW5pbmcgbW9kZS4KLSAqICAgICAgICAgICAgICByZXR1cm4gRE1BU1VDQ0VTUyBpZiBzdWNjZXNzZnVsZSwgb3RoZXJ3aXNlIHJldHVybiBETUFDSE5JTlZBTElECi0gKgotICogbm90ZTogaWYgdGhlIGdpdmVuIGNoYW5uZWwgaXMgbm90IGluIGNoYWluaW5nIG1vZGUsIG5vdGhpbmcKLSAqICAgICAgIGhhcHBlbi4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBETUFTdGF0dXMgRE1BX0Nobl9DbnQoIExPQ0FUSU9OLCB1bnNpZ25lZCBpbnQgZXVtYmJhcix1bnNpZ25lZCBpbnQgY2hhbm5lbCApOwotCi0vKioqKioqKioqKioqKioqKioqKioqKiogQXBwLiBBUEkgKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBBcHAuIEFQSSBhcmUgdGhlIEFQSXMgS2VybmVsIHByb3ZpZGVzIGZvciB0aGUgYXBwbGljYXRpb24KLSAqIGxldmVsIHByb2dyYW0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfQmxkX0N1cnIKLSAqCi0gKiBkZXNjcmlwdGlvbjogc2V0IGN1cnJlbnQgc3JjLCBkZXN0LCBieXRlIGNvdW50IHJlZ2lzdGVycwotICogICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgZGVzcCBmb3IgYSBnaXZlbiBjaGFubmVsCi0gKgotICogICAgICAgICAgICAgIGlmIHRoZSBnaXZlbiBjaGFubmVsIGlzIGJ1c3ksICBubyBjaGFuZ2UgbWFkZSwKLSAqICAgICAgICAgICAgICByZXR1cm4gRE1BQ0hOQlVTWS4KLSAqCi0gKiAgICAgICAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBETUFTVUNDRVNTLgotICoKLSAqIG5vdGU6Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgRE1BU3RhdHVzIERNQV9CbGRfQ3VyciggTE9DQVRJT04sCi0JCQkJCQkJCSAgdW5zaWduZWQgaW50IGV1bWJiYXIsCi0JCQkJCQkJCSAgdW5zaWduZWQgaW50IGNoYW5uZWwsCi0JCQkJCQkJICAgICAgRE1BX0NVUlIgICAgIGRlc3AgKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogRE1BX1Bva2VfQ3VycgotICoKLSAqIGRlc2NyaXB0aW9uOiBwb2tlIHRoZSBjdXJyZW50IHNyYywgZGVzdCwgYnl0ZSBjb3VudCByZWdpc3RlcnMKLSAqICAgICAgICAgICAgICBmb3IgYSBnaXZlbiBjaGFubmVsLgotICoKLSAqICAgICAgICAgICAgICByZXR1cm4gRE1BU1VDQ0VTUyBpZiBubyBlcnJvciBvdGhlcndpc2UgcmV0dXJuIERNQUNITkVSUk9SCi0gKgotICogbm90ZTogICAgICAgIER1ZSB0byB0aGUgdW5kZXRlcm1pbmlzdGljIHBhcmFsbGVsaXNtLCBpbiBjaGFpbmluZwotICogICAgICAgICAgICAgIG1vZGUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHNoYWxsCi0gKiAgICAgICAgICAgICAgYmUgdGFrZW4gYXMgcmVmZXJlbmNlIHdoZW4gdGhlIHF1ZXJ5IGlzIG1hZGUgcmF0aGVyCi0gKiAgICAgICAgICAgICAgdGhhbiB0aGUgYWJzb2x1dGUgc25hcHNob3Qgd2hlbiB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgRE1BU3RhdHVzIERNQV9Qb2tlX0N1cnIoIExPQ0FUSU9OLAotCQkJCQkJCSAgIHVuc2lnbmVkIGludCBldW1iYmFyLAotCQkJCQkJCSAgIHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJCQkJICAgICAgIERNQV9DVVJSKiAgICBkZXNwICk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9CbGRfRGVzcAotICoKLSAqIGRlc2NyaXB0aW9uOiBzZXQgY3VycmVudCBkZXNjcmlwdG9yIGFkZHJlc3MgcmVnaXN0ZXIKLSAqICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGRlc3AgZm9yIGEgZ2l2ZW4gY2hhbm5lbAotICoKLSAqICAgICAgICAgICAgICBpZiB0aGUgZ2l2ZW4gY2hhbm5lbCBpcyBidXN5IHJldHVybiBETUFDSE5CVVNZCi0gKiAgICAgICAgICAgICAgYW5kIG5vIGNoYW5nZSBtYWRlLCBvdGhlcndpc2UgcmV0dXJuIERNQVNVQ0NFU1MuCi0gKgotICogbm90ZToKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBETUFTdGF0dXMgRE1BX0JsZF9EZXNwKCBMT0NBVElPTiBob3N0LAotCQkJCQkgICAgICAgICAgdW5zaWduZWQgaW50IGV1bWJiYXIsCi0JCQkJCSAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKLQkJCQkJICAgICAgICAgIERNQV9DREFSICAgICBkZXNwICk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9Qb2tlX0Rlc3AKLSAqCi0gKiBkZXNjcmlwdGlvbjogcG9rZSB0aGUgY3VycmVudCBkZXNjcmlwdG9yIGFkZHJlc3MgcmVnaXN0ZXIKLSAqICAgICAgICAgICAgICBmb3IgYSBnaXZlbiBjaGFubmVsCi0gKgotICogICAgICAgICAgICAgIHJldHVybiBETUFTVUNDRVNTIGlmIG5vIGVycm9yIG90aGVyd2lzZSByZXR1cm4KLSAqICAgICAgICAgICAgICBETUFJTlZBTElECi0gKgotICogbm90ZTogRHVlIHRvIHRoZSB1bmRldGVybWluaXN0aWMgcGFyYWxsZWxsaXNtIG9mIERNQSBvcGVyYXRpb24sCi0gKiAgICAgICB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBzaGFsbCBiZSB0YWtlbiBhcwotICogICAgICAgdGhlIG1vc3QgcmVjZW50bHkgdXNlZCBkZXNjcmlwdG9yIHdoZW4gdGhlIGxhc3QgdGltZQotICogICAgICAgRE1BIHN0YXJ0cyBhIGNoYWluaW5nIG1vZGUgb3BlcmF0aW9uLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIERNQVN0YXR1cyBETUFfUG9rZV9EZXNwKCBMT0NBVElPTiwKLQkJCQkJCQkgICB1bnNpZ25lZCBpbnQgZXVtYmJhciwKLQkJCQkJCQkgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKLQkJCQkJCSAgICAgICBETUFfQ0RBUiAgICAgKmRlc3AgKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWExLmMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWExLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODUyNjcuLjAwMDAwMDAKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hMS5jCisrKyAvZGV2L251bGwKQEAgLTEsODAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBjb3B5cmlnaHQgQCBNb3Rvcm9sYSwgMTk5OQotICoKLSAqIEFwcC4gQVBJCi0gKgotICogQXBwLiBBUEkgYXJlIHRoZSBBUElzIEtlcm5lbCBwcm92aWRlcyBmb3IgdGhlIGFwcGxpY2F0aW9uCi0gKiBsZXZlbCBwcm9ncmFtCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJkbWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiZG1hLmgiCi0KLS8qIERlZmluZSBhIG1hY3JvIHRvIHVzZSBhbiBvcHRpb25hbCBhcHBsaWNhdGlvbi1sYXllciBwcmludCBmdW5jdGlvbiwgaWYKLSAqIG9uZSB3YXMgcGFzc2VkIHRvIHRoZSBsaWJyYXJ5IGR1cmluZyBpbml0aWFsaXphdGlvbi4gIElmIHRoZXJlIHdhcyBubwotICogZnVuY3Rpb24gcG9pbnRlciBwYXNzZWQsIHRoaXMgcHJvdGVjdHMgYWdhaW5zdCByZWZlcmVuY2luZyBhIE5VTEwgcG9pbnRlci4KLSAqIEFsc28gZGVmaW5lIFRoZSBnbG9iYWwgdmFyaWFibGUgdGhhdCBob2xkcyB0aGUgcGFzc2VkIHBvaW50ZXIuCi0gKi8KLSNkZWZpbmUgUFJJTlQgaWYgKCBhcHBfcHJpbnQgKSBhcHBfcHJpbnQKLXN0YXRpYyBpbnQgKCphcHBfcHJpbnQpKGNoYXIgKiwuLi4pOwotCi0vKiBTZXQgYnkgY2FsbCB0byBnZXRfZXVtYmJhciBkdXJpbmcgRE1BX0luaXRpYWxpemUuCi0gKiBUaGlzIGNvdWxkIGJlIGdsb2JhbGx5IGF2YWlsYWJsZSB0byB0aGUgbGlicmFyeSwgYnV0IHRoZXJlIGlzCi0gKiBhbiBhZHZhbnRhZ2UgdG8gcGFzc2luZyBpdCBhcyBhIHBhcmFtZXRlcjogaXQgaXMgYWxyZWFkeSBpbiBhIHJlZ2lzdGVyCi0gKiBhbmQgZG9lc24ndCBoYXZlIHRvIGJlIGxvYWRlZCBmcm9tIG1lbW9yeS4gIEFsc28sIHRoYXQgaXMgdGhlIHdheSB0aGUKLSAqIGxpYnJhcnkgd2FzIGFscmVhZHkgaW1wbGVtZW50ZWQgYW5kIEkgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgaXQgd2l0aG91dAotICogYSBtb3JlIGRldGFpbGVkIGFuYWx5c2lzLgotICogSXQgaXMgYmVpbmcgc2V0IGFzIGEgZ2xvYmFsIHZhcmlhYmxlIGR1cmluZyBpbml0aWFsaXphdGlvbiB0byBoaWRlIGl0IGZyb20KLSAqIHRoZSBESU5LIGFwcGxpY2F0aW9uIGxheWVyLCBiZWNhdXNlIGl0IGlzIEthaGx1YS1zcGVjaWZpYy4gIEkgdGhpbmsgdGhhdAotICogZ2V0X2V1bWJiYXIsIGxvYWRfcnVudGltZV9yZWcsIGFuZCBzdG9yZV9ydW50aW1lX3JlZyBzaG91bGQgYmUgZGVmaW5lZCBpbgotICogYSBLYWhsdWEtc3BlY2lmaWMgbGlicmFyeSBkZWFsaW5nIHdpdGggdGhlIGVtYmVkZGVkIHV0aWxpdGllcyBtZW1vcnkgYmxvY2suCi0gKiBSaWdodCBub3csIGdldF9ldW1iYmFyIGlzIGRlZmluZWQgaW4gZGluazMyL2thaGx1YS5zLiAgVGhlIG90aGVyIHR3byBhcmUKLSAqIGRlZmluZWQgaW4gZGluazMyL2RyaXZlcnMvaTJjL2kyYzIucywgZHJpdmVycy9kbWEvZG1hMi5zLCBldGMuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgR2xvYmFsX2V1bWJiYXIgPSAwOwotZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfZXVtYmJhcigpOwotCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgbG9hZF9ydW50aW1lX3JlZyggdW5zaWduZWQgaW50IGV1bWJiYXIsIHVuc2lnbmVkIGludCByZWcgKTsKLSNwcmFnbWEgQWxpYXMoIGxvYWRfcnVudGltZV9yZWcsICJsb2FkX3J1bnRpbWVfcmVnIiApOwotCi1leHRlcm4gdm9pZCBzdG9yZV9ydW50aW1lX3JlZyggdW5zaWduZWQgaW50IGV1bWJiYXIsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwgKTsKLSNwcmFnbWEgQWxpYXMoIHN0b3JlX3J1bnRpbWVfcmVnLCAic3RvcmVfcnVudGltZV9yZWciICk7Ci0KLXVuc2lnbmVkIGludCBkbWFfcmVnX3RiW11bMTRdID0gewotCS8qIGxvY2FsIERNQSByZWdpc3RlcnMgKi8KLQl7Ci0gICAgICAvKiBETUFfMF9NUiAgICovICAweDAwMDAxMTAwLAotICAgICAgLyogRE1BXzBfU1IgICAqLyAgMHgwMDAwMTEwNCwKLSAgICAgIC8qIERNQV8wX0NEQVIgKi8gIDB4MDAwMDExMDgsCi0gICAgICAvKiBETUFfMF9TQVIgICovICAweDAwMDAxMTEwLAotICAgICAgLyogRE1BXzBfREFSICAqLyAgMHgwMDAwMTExOCwKLSAgICAgIC8qIERNQV8wX0JDUiAgKi8gIDB4MDAwMDExMjAsCi0gICAgICAvKiBETUFfMF9OREFSICovICAweDAwMDAxMTI0LAotICAgICAgLyogRE1BXzFfTVIgICAqLyAgMHgwMDAwMTIwMCwKLSAgICAgIC8qIERNQV8xX1NSICAgKi8gIDB4MDAwMDEyMDQsCi0gICAgICAvKiBETUFfMV9DREFSICovICAweDAwMDAxMjA4LAotICAgICAgLyogRE1BXzFfU0FSICAqLyAgMHgwMDAwMTIxMCwKLSAgICAgIC8qIERNQV8xX0RBUiAgKi8gIDB4MDAwMDEyMTgsCi0gICAgICAvKiBETUFfMV9CQ1IgICovICAweDAwMDAxMjIwLAotICAgICAgLyogRE1BXzFfTkRBUiAqLyAgMHgwMDAwMTIyNCwKLQl9LAotCS8qIHJlbW90ZSBETUEgcmVnaXN0ZXJzICovCi0JewotICAgICAgLyogRE1BXzBfTVIgICAqLyAgMHgwMDAwMDEwMCwKLSAgICAgIC8qIERNQV8wX1NSICAgKi8gIDB4MDAwMDAxMDQsCi0gICAgICAvKiBETUFfMF9DREFSICovICAweDAwMDAwMTA4LAotICAgICAgLyogRE1BXzBfU0FSICAqLyAgMHgwMDAwMDExMCwKLSAgICAgIC8qIERNQV8wX0RBUiAgKi8gIDB4MDAwMDAxMTgsCi0gICAgICAvKiBETUFfMF9CQ1IgICovICAweDAwMDAwMTIwLAotICAgICAgLyogRE1BXzBfTkRBUiAqLyAgMHgwMDAwMDEyNCwKLSAgICAgIC8qIERNQV8xX01SICAgKi8gIDB4MDAwMDAyMDAsCi0gICAgICAvKiBETUFfMV9TUiAgICovICAweDAwMDAwMjA0LAotICAgICAgLyogRE1BXzFfQ0RBUiAqLyAgMHgwMDAwMDIwOCwKLSAgICAgIC8qIERNQV8xX1NBUiAgKi8gIDB4MDAwMDAyMTAsCi0gICAgICAvKiBETUFfMV9EQVIgICovICAweDAwMDAwMjE4LAotICAgICAgLyogRE1BXzFfQkNSICAqLyAgMHgwMDAwMDIyMCwKLSAgICAgIC8qIERNQV8xX05EQVIgKi8gIDB4MDAwMDAyMjQsCi0JfSwKLX07Ci0KLS8qIEFQSSBmdW5jdGlvbnMgKi8KLQotLyogIEluaXRpYWxpemUgRE1BIHVuaXQgd2l0aCB0aGUgZm9sbG93aW5nOgotICogIG9wdGlvbmFsIHBvaW50ZXIgdG8gYXBwbGljYXRpb24gbGF5ZXIgcHJpbnQgZnVuY3Rpb24KLSAqCi0gKiAgVGhlc2UgcGFyYW1ldGVycyBtYXkgYmUgYWRkZWQ6Ci0gKiAgPz8/Ci0gKiAgSW50ZXJydXB0IGVuYWJsZXMsIG1vZGVzLCBldGMuIGFyZSBzZXQgZm9yIGVhY2ggdHJhbnNmZXIuCi0gKgotICogIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIERNQSB1bml0IGNhbiBiZSB1c2VkLgotICovCi1leHRlcm4KLURNQV9TdGF0dXMgRE1BX0luaXRpYWxpemUoIGludCAoKnApKGNoYXIgKiwuLi4pKQotewotICBETUFTdGF0dXMgc3RhdHVzOwotICAvKiBlc3RhYmxpc2ggdGhlIHBvaW50ZXIsIGlmIHRoZXJlIGlzIG9uZSwgdG8gdGhlIGFwcGxpY2F0aW9uJ3MgInByaW50ZiIgKi8KLSAgYXBwX3ByaW50ID0gcDsKLQotICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBnZXQgdGhlIGVtYmVkZGVkIHV0aWxpdGllcyBtZW1vcnkgYmxvY2sKLSAgICogYmFzZSBhZGRyZXNzLiAgSSdtIG5vdCBzdXJlIHdoYXQgdG8gZG8gYWJvdXQgZXJyb3IgaGFuZGxpbmcgaGVyZToKLSAgICogaWYgYSBub24temVybyB2YWx1ZSBpcyByZXR1cm5lZCwgYWNjZXB0IGl0LgotICAgKi8KLSAgaWYgKCBHbG9iYWxfZXVtYmJhciA9PSAwKQotICAgICBHbG9iYWxfZXVtYmJhciA9IGdldF9ldW1iYmFyKCk7Ci0gIGlmICggR2xvYmFsX2V1bWJiYXIgPT0gMCkKLSAgewotICAgIFBSSU5UKCAiRE1BX0luaXRpYWxpemU6IGNhbid0IGZpbmQgRVVNQkJBUlxuIiApOwotICAgIHJldHVybiBETUFfRVJST1I7Ci0gIH0KLQotICByZXR1cm4gRE1BX1NVQ0NFU1M7Ci19Ci0KLQotLyogUGVyZm9ybSB0aGUgRE1BIHRyYW5zZmVyLCBvbmx5IGRpcmVjdCBtb2RlIGlzIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KLSAqIEF0IHRoaXMgcG9pbnQsIEkgdGhpbmsgaXQgd291bGQgYmUgYmV0dGVyIHRvIGRlZmluZSBhIGRpZmZlcmVudAotICogZnVuY3Rpb24gZm9yIGNoYWluaW5nIG1vZGUuCi0gKiBBbHNvLCBJJ20gbm90IHN1cmUgaWYgaXQgaXMgYXBwcm9wcmlhdGUgdG8gaGF2ZSB0aGUgImdlbmVyaWMiIEFQSQotICogYWNjZXB0IHNub29wIGFuZCBpbnRfc3RlZXIgcGFyYW1ldGVycy4gIFRoZSBESU5LIHVzZXIgaW50ZXJmYWNlIGFsbG93cwotICogdGhlbSwgc28gZm9yIG5vdyBJJ2xsIGxlYXZlIHRoZW0uCi0gKgotICogaW50X3N0ZWVyIGNvbnRyb2xzIERNQSBpbnRlcnJ1cHQgc3RlZXJpbmcgdG8gUENJIG9yIGxvY2FsIHByb2Nlc3NvcgotICogdHlwZSBpcyB0aGUgdHlwZSBvZiB0cmFuc2ZlcjogTTJNLCBNMlAsIFAyTSwgUDJQCi0gKiBzb3VyY2UgaXMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSBkYXRhCi0gKiBkZXN0IGlzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBkYXRhCi0gKiBsZW4gaXMgdGhlIGxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyCi0gKiBjaGFubmVsIGlzIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yIHRoZSB0cmFuc2ZlcgotICogc25vb3AgaXMgdGhlIHNub29wIGVuYWJsZSBjb250cm9sCi0gKi8KLWV4dGVybiBETUFfU3RhdHVzIERNQV9kaXJlY3RfdHJhbnNmZXIoIERNQV9JTlRFUlJVUFRfU1RFRVIgaW50X3N0ZWVyLAotCQkJCSAgICAgICBETUFfVFJBTlNGRVJfVFlQRSB0eXBlLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVzdCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKLQkJCQkgICAgICAgRE1BX0NIQU5ORUwgY2hhbm5lbCwKLQkJCQkgICAgICAgRE1BX1NOT09QX01PREUgc25vb3ApCi17Ci0gICAgRE1BX01SIG1kOwotICAgIERNQV9DREFSIGNkYXI7Ci0gICAgLyogaXQncyBpbmFwcHJvcHJpYXRlIGZvciBjdXJyIHRvIGJlIGEgc3RydWN0LCBidXQgSSdsbCBsZWF2ZSBpdCAqLwotICAgIERNQV9DVVJSIGN1cnI7Ci0KLSAgICBETUFTdGF0dXMgc3RhdDsKLQotCS8qIFRoZSByZXN0IG9mIHRoaXMgY29kZSB3YXMgbW92ZWQgZnJvbSBkZXZpY2UuYyB0ZXN0X2RtYSB0byBoZXJlLgotCSAqIEl0IG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgYW5kIHZhbGlkYXRlZCwgYnV0IGF0IGxlYXN0IGl0IGlzIHJlbW92ZWQKLQkgKiBmcm9tIHRoZSBhcHBsaWNhdGlvbiBhbmQgQVBJLiAgTW9zdCBvZiB0aGUgbW9kZSBpcyBsZWZ0IGhhcmQgY29kZWQuCi0JICogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCBhZnRlciB0aGUgZmluYWwgQVBJIGlzIGRlZmluZWQgYW5kIHRoZSB1c2VyCi0JICogYXBwbGljYXRpb24gaGFzIGEgd2F5IHRvIGNvbnRyb2wgdGhlIHRyYW5zZmVyLgotCSAqCi0JICovCi0KLQlpZiAoIERNQV9HZXRfTW9kZSggTE9DQUwsIEdsb2JhbF9ldW1iYmFyLCBjaGFubmVsLCAmbWQgKSAhPSBETUFTVUNDRVNTICkKLQl7Ci0JCXJldHVybiBETUFfRVJST1I7Ci0JfQotCi0JbWQuaXJxcyA9IGludF9zdGVlcjsKLQltZC5wZGUgPSAwOwotCW1kLmRhaHRzID0gMzsgLyogOCAtIGJ5dGUgKi8KLQltZC5zYWh0cyA9IDM7IC8qIDggLSBieXRlICovCi0JbWQuZGFoZSA9IDA7Ci0JbWQuc2FoZSA9IDA7Ci0JbWQucHJjID0gMDsKLQkvKiBpZiBzdGVlcmluZyBpbnRlcnJ1cHRzIHRvIGxvY2FsIHByb2Nlc3NvciwgdXNlIHBvbGxpbmcgbW9kZSAqLwotCWlmICggaW50X3N0ZWVyID09IERNQV9JTlRfU1RFRVJfUENJICkKLQl7Ci0JCW1kLmVpZSA9IDE7Ci0JCW1kLmVvdGllID0gMTsKLQl9IGVsc2UgewotCQltZC5laWUgPSAwOwotCQltZC5lb3RpZSA9IDA7Ci0JfQotCW1kLmRsID0gMDsKLQltZC5jdG0gPSAxOyAgIC8qIGRpcmVjdCBtb2RlICovCi0gICAgbWQuY2MgPSAwOwotCi0JLyogdmFsaWRhdGUgdGhlIGxlbmd0aCByYW5nZSAqLwotCWlmIChsZW4gPiAweDNmZmZmZmYgKQotCXsKLQkJUFJJTlQoICJkZXYgRE1BOiBsZW5ndGggb2YgdHJhbnNmZXIgdG9vIGxhcmdlOiAlZFxuIiwgbGVuICk7Ci0JCXJldHVybiBETUFfRVJST1I7Ci0JfQotCi0JLyogaW5hcHByb3ByaWF0ZSB0byB1c2UgYSBzdHJ1Y3QsIGJ1dCBsZWF2ZSBhcyBpcyBmb3Igbm93ICovCi0JY3Vyci5zcmNfYWRkciA9IHNvdXJjZTsKLQljdXJyLmRlc3RfYWRkciA9IGRlc3Q7Ci0JY3Vyci5ieXRlX2NudCA9IGxlbjsKLQotCSh2b2lkKURNQV9Qb2tlX0Rlc3AoIExPQ0FMLCBHbG9iYWxfZXVtYmJhciwgY2hhbm5lbCwgJmNkYXIgKTsKLQljZGFyLnNuZW4gPSBzbm9vcDsKLQljZGFyLmN0dCA9IHR5cGU7Ci0KLQlpZiAoICggc3RhdCA9IERNQV9CbGRfRGVzcCggTE9DQUwsIEdsb2JhbF9ldW1iYmFyLCBjaGFubmVsLCBjZGFyICkpCi0JCQkhPSBETUFTVUNDRVNTIHx8Ci0JCSAoIHN0YXQgPSBETUFfQmxkX0N1cnIoIExPQ0FMLCBHbG9iYWxfZXVtYmJhciwgY2hhbm5lbCwgY3VyciApKQotCQkJIT0gRE1BU1VDQ0VTUyB8fAotCSAgICAgKCBzdGF0ID0gRE1BX1NldF9Nb2RlKCBMT0NBTCwgR2xvYmFsX2V1bWJiYXIsIGNoYW5uZWwsIG1kICkpCi0JCQkhPSBETUFTVUNDRVNTIHx8Ci0JCSAoIHN0YXQgPSBETUFfU3RhcnQoIExPQ0FMLCBHbG9iYWxfZXVtYmJhciwgY2hhbm5lbCApKQotCQkJIT0gRE1BU1VDQ0VTUyApCi0JewotCQlpZiAoIHN0YXQgPT0gRE1BQ0hOQlVTWSApCi0JCXsKLQkJCVBSSU5UKCAiZGV2IERNQTogY2hhbm5lbCAlZCBidXN5LlxuIiwgY2hhbm5lbCApOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJUFJJTlQoICJkZXYgRE1BOiBpbnZhbGlkIGNoYW5uZWwgcmVxdWVzdC5cbiIsIGNoYW5uZWwgKTsKLQkJfQotCi0JCXJldHVybiBETUFfRVJST1I7Ci0JfQotCi0vKiBTaW5jZSB3ZSBhcmUgaW50ZXJlc3RlZCBhdCB0aGUgRE1BIHBlcmZvcm1hY2UgcmlnaHQgbm93LAotICAgd2UgYXJlIGdvaW5nIHRvIGRvIGFzIGxlc3MgYXMgcG9zc2libGUgdG8gYnVyZGVuIHRoZQotICAgNjAzZSBjb3JlLgotCi0gICBpZiB5b3UgaGF2ZSBlcGljIGVuYWJsZWQgb3IgZG9uJ3QgY2FyZSB0aGUgcmV0dXJuIGZyb20KLSAgIERNQSBvcGVyYXRpb24sIHlvdSBjYW4ganVzdCByZXR1cm4gU1VDQ0VTUy4KLQotICAgaWYgeW91IGRvbid0IGhhdmUgZXBpYyBlbmFibGVkIGFuZCBjYXJlIHRoZSBETUEgcmVzdWx0LAotICAgeW91IGNhbiB1c2UgdGhlIHBvbGxpbmcgbWV0aG9kIGJlbG93LgotCi0gICBOb3RlOiBJJ2xsIGF0dGVtcHQgdG8gYWN0aXZhdGUgdGhlIGNvZGUgZm9yIGhhbmRsaW5nIHBvbGxpbmcuCi0gKi8KLQotI2lmIDAKLQkvKiBpZiBzdGVlcmluZyBpbnRlcnJ1cHQgdG8gbG9jYWwgcHJvY2Vzc29yLCBsZXQgaXQgaGFuZGxlIHJlc3VsdHMgKi8KLQlpZiAoIGludF9zdGVlciA9PSBETUFfSU5UX1NURUVSX0xPQ0FMICkKLQl7Ci0JICAgIHJldHVybiBETUFfU1VDQ0VTUzsKLQl9Ci0KLQkvKiBwb2xsaW5nIHNpbmNlIGludGVycnVwdCBnb2VzIHRvIFBDSSAqLwotCWRvCi0JewotCQlzdGF0ID0gRE1BX0lTUiggR2xvYmFsX2V1bWJiYXIsIGNoYW5uZWwsIGRtYV9lcnJvcl9mdW5jLAotCQkJZG1hX2Vycm9yX2Z1bmMsIGRtYV9lcnJvcl9mdW5jLCBkbWFfZXJyb3JfZnVuYyApOwotCX0KLQl3aGlsZSAoIHN0YXQgPT0gRE1BTk9FVkVOVCApOwotI2VuZGlmCi0KLSAgICByZXR1cm4gRE1BX1NVQ0NFU1M7Ci19Ci0KLS8qIERNQSBsaWJyYXJ5IGludGVybmFsIGZ1bmN0aW9ucyAqLwotCi0vKioKLSAqIE5vdGU6Ci0gKgotICogSW4gYWxsIGZvbGxvd2luZyBmdW5jdGlvbnMsIHRoZSBob3N0IChLQUhMVUEpIHByb2Nlc3NvciBoYXMgYQotICogY2hvaWNlIG9mIGFjY2Vzc2luZyBvbiBib2FyZCBsb2NhbCBETUEgKExPQ0FMKSwKLSAqIG9yIERNQSBvbiBhIGRpc3RyaWJ1dGVkIEtBSExVQSAoUkVNT1RFKS4gSW4gZWl0aGVyIGNhc2UsCi0gKiB0aGUgY2FsbGVyIHNoYWxsIHBhc3MgdGhlIGNvbmZpZ3VyZWQgZW1iZWRkZWQgdXRpbGl0eSBtZW1vcnkKLSAqIGJsb2NrIGJhc2UgYWRkcmVzcyByZWxhdGl2ZSB0byB0aGUgRE1BLiBJZiBMT0NBTCBETUEgaXMgdXNlZCwKLSAqIHRoaXMgcGFyYW1ldGVyIHNoYWxsIGJlIEVVTUJCQVIsIGlmIFJFTU9URSBpcyB1c2VkLCB0aGUKLSAqIHBhcmFtZXRlciBzaGFsbCBiZSB0aGUgY29ycmVzcG9uZGluZyBQQ1NSQkFSLgotICoqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfR2V0X1N0YXQKLSAqCi0gKiBkZXNjcmlwdGlvbjogcmV0dXJuIHRoZSBjb250ZW50IG9mIHN0YXR1cyByZWdpc3RlciBvZgotICogICAgICAgICAgICAgIHRoZSBnaXZlbiBETUEgY2hhbm5lbAotICoKLSAqICAgICAgICAgICAgICBpZiBlcnJvciwgcmVzZXJ2ZWQwIGZpZWxkIGFsbCAxcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYwotRE1BU3RhdHVzIERNQV9HZXRfU3RhdCggTE9DQVRJT04gaG9zdCwgdW5zaWduZWQgaW50IGV1bWJiYXIsIHVuc2lnbmVkIGludCBjaGFubmVsLCBETUFfU1IgKnN0YXQgKQotewotICAgIHVuc2lnbmVkIGludCB0bXA7Ci0KLSAgIGlmICggY2hhbm5lbCAhPSAwICYmIGNoYW5uZWwgIT0gMSB8fCBzdGF0ID09IDAgKQotICAgewotICAgICAgIHJldHVybiBETUFJTlZBTElEOwotICAgfQotCi0gICAgdG1wID0gbG9hZF9ydW50aW1lX3JlZyggZXVtYmJhciwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHK0RNQV9TUl9SRUddICk7Ci0jaWZkZWYgRE1BREJHMAotICAgUFJJTlQoICIlcyglZCk6ICVzIERNQSAlZCAoMHglMDh4KSBzdGF0ID0gMHglMDh4XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgKCBob3N0ID09IExPQ0FMID8gImxvY2FsIiA6ICJyZW1vdGUiICksIGNoYW5uZWwsIGRtYV9yZWdfdGJbaG9zdF1bY2hhbm5lbCpOVU1fRE1BX1JFRytETUFfU1JfUkVHXSwgdG1wICk7Ci0jZW5kaWYKLQotCSBzdGF0LT5yZXNlcnZlZDAgPSAoIHRtcCAmIDB4ZmZmZmZmMDAgKSA+PiA4OwotCSBzdGF0LT5sbWUgICAgICAgPSAoIHRtcCAmIDB4MDAwMDAwODAgKSA+PiA3OwotCSBzdGF0LT5yZXNlcnZlZDEgPSAoIHRtcCAmIDB4MDAwMDAwNjAgKSA+PiA1OwotCSBzdGF0LT5wZSAgICAgICAgPSAoIHRtcCAmIDB4MDAwMDAwMTAgKSA+PiA0OwotCSBzdGF0LT5yZXNlcnZlZDIgPSAoIHRtcCAmIDB4MDAwMDAwMDggKSA+PiAzOwotCSBzdGF0LT5jYiAgICAgICAgPSAoIHRtcCAmIDB4MDAwMDAwMDQgKSA+PiAyOwotCSBzdGF0LT5lb3NpICAgICAgPSAoIHRtcCAmIDB4MDAwMDAwMDIgKSA+PiAxOwotCSBzdGF0LT5lb2NhaSAgICAgPSAoIHRtcCAmIDB4MDAwMDAwMDEgKTsKLQotICAgcmV0dXJuIERNQVNVQ0NFU1M7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9HZXRfTW9kZQotICoKLSAqIGRlc2NyaXB0aW9uOiByZXR1cm4gdGhlIGNvbnRlbnQgb2YgbW9kZSByZWdpc3RlciBvZiB0aGUKLSAqICAgICAgICAgICAgICBnaXZlbiBETUEgY2hhbm5lbAotICoKLSAqICAgICAgICAgICAgICBpZiBlcnJvciwgcmV0dXJuIERNQUlOVkFMSUQsIG90aGVyd2lzZSByZXR1cm4KLSAqICAgICAgICAgICAgICBETUFTVUNDRVNTCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMKLURNQVN0YXR1cyBETUFfR2V0X01vZGUoIExPQ0FUSU9OIGhvc3QsIHVuc2lnbmVkIGV1bWJiYXIsIHVuc2lnbmVkIGludCBjaGFubmVsLCBETUFfTVIgKm1vZGUgKQotewotICAgIHVuc2lnbmVkIGludCB0bXA7Ci0gICBpZiAoIGNoYW5uZWwgIT0gMCAmJiBjaGFubmVsICE9IDEgfHwgbW9kZSA9PSAwICkKLSAgIHsKLSAgICAgcmV0dXJuIERNQUlOVkFMSUQ7Ci0gICB9Ci0KLSAgICB0bXAgPSBsb2FkX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcrRE1BX01SX1JFR10gKTsKLQotI2lmZGVmIERNQURCRzAKLSAgIFBSSU5UKCAiJXMoJWQpOiAlcyBETUEgJWQgKDB4JTA4eCkgbW9kZSA9IDB4JTA4eFxuIiwgX19GSUxFX18sIF9fTElORV9fLAotCQkgICggaG9zdCA9PSBMT0NBTCA/ICJsb2NhbCIgOiAicmVtb3RlIiApLCBjaGFubmVsLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcrRE1BX01SX1JFR10sIHRtcCApOwotI2VuZGlmCi0KLQkgbW9kZS0+cmVzZXJ2ZWQwID0gKHRtcCAmIDB4ZmZmMDAwMDApID4+IDIwOwotCSBtb2RlLT5pcnFzICAgICAgPSAodG1wICYgMHgwMDA4MDAwMCkgPj4gMTk7Ci0JIG1vZGUtPnBkZSAgICAgICA9ICh0bXAgJiAweDAwMDQwMDAwKSA+PiAxODsKLQkgbW9kZS0+ZGFodHMgICAgID0gKHRtcCAmIDB4MDAwMzAwMDApID4+IDE2OwotICAgICBtb2RlLT5zYWh0cyAgICAgPSAodG1wICYgMHgwMDAwYzAwMCkgPj4gMTQ7Ci0JIG1vZGUtPmRhaGUgICAgICA9ICh0bXAgJiAweDAwMDAyMDAwKSA+PiAxMzsKLQkgbW9kZS0+c2FoZSAgICAgID0gKHRtcCAmIDB4MDAwMDEwMDApID4+IDEyOwotCSBtb2RlLT5wcmMgICAgICAgPSAodG1wICYgMHgwMDAwMGMwMCkgPj4gMTA7Ci0JIG1vZGUtPnJlc2VydmVkMSA9ICh0bXAgJiAweDAwMDAwMjAwKSA+PiA5OwotCSBtb2RlLT5laWUgICAgICAgPSAodG1wICYgMHgwMDAwMDEwMCkgPj4gODsKLQkgbW9kZS0+ZW90aWUgICAgID0gKHRtcCAmIDB4MDAwMDAwODApID4+IDc7Ci0JIG1vZGUtPnJlc2VydmVkMiA9ICh0bXAgJiAweDAwMDAwMDcwKSA+PiA0OwotCSBtb2RlLT5kbCAgICAgICAgPSAodG1wICYgMHgwMDAwMDAwOCkgPj4gMzsKLQkgbW9kZS0+Y3RtICAgICAgID0gKHRtcCAmIDB4MDAwMDAwMDQpID4+IDI7Ci0JIG1vZGUtPmNjICAgICAgICA9ICh0bXAgJiAweDAwMDAwMDAyKSA+PiAxOwotCSBtb2RlLT5jcyAgICAgICAgPSAodG1wICYgMHgwMDAwMDAwMSk7Ci0KLSAgIHJldHVybiBETUFTVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfU2V0X01vZGUKLSAqCi0gKiBkZXNjcmlwdGlvbjogU2V0IGEgbmV3IG1vZGUgdG8gYSBnaXZlbiBETUEgY2hhbm5lbAotICoKLSAqIG5vdGU6IEl0IGlzIG5vdCBhIGdvb2QgaWRlYSBvZiBjaGFuZ2luZyB0aGUgRE1BIG1vZGUgZHVyaW5nCi0gKiAgICAgICB0aGUgbWlkZGxlIG9mIGEgdHJhbnNhY3Rpb24uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMKLURNQVN0YXR1cyBETUFfU2V0X01vZGUoIExPQ0FUSU9OIGhvc3QsIHVuc2lnbmVkIGV1bWJiYXIsIHVuc2lnbmVkIGludCBjaGFubmVsLCBETUFfTVIgbW9kZSApCi17Ci0gICAgdW5zaWduZWQgaW50IHRtcDsKLSAgIGlmICggY2hhbm5lbCAhPSAwICYmIGNoYW5uZWwgIT0gMSApCi0gICB7Ci0JICAgcmV0dXJuIERNQUlOVkFMSUQ7Ci0gICB9Ci0KLSAgIHRtcCA9ICggbW9kZS5yZXNlcnZlZDAgJiAweGZmZiApIDw8IDIwOwotICAgdG1wIHw9ICggKCBtb2RlLmlycXMgICYgMHgxICkgPDwgMTkpOwotICAgdG1wIHw9ICggKCBtb2RlLnBkZSAgICYgMHgxICkgPDwgMTggKTsKLSAgIHRtcCB8PSAoICggbW9kZS5kYWh0cyAmIDB4MyApIDw8IDE2ICk7Ci0gICB0bXAgfD0gKCAoIG1vZGUuc2FodHMgJiAweDMgKSA8PCAxNCApOwotICAgdG1wIHw9ICggKCBtb2RlLmRhaGUgICYgMHgxICkgPDwgMTMgKTsKLSAgIHRtcCB8PSAoICggbW9kZS5zYWhlICAmIDB4MSApIDw8IDEyICk7Ci0gICB0bXAgfD0gKCAoIG1vZGUucHJjICAgJiAweDMgKSA8PCAxMCApOwotICAgdG1wIHw9ICggKCBtb2RlLnJlc2VydmVkMSAmIDB4MSApIDw8IDkgKTsKLSAgIHRtcCB8PSAoICggbW9kZS5laWUgICAmIDB4MSApIDw8IDggKTsKLSAgIHRtcCB8PSAoICggbW9kZS5lb3RpZSAmIDB4MSApIDw8IDcgKTsKLSAgIHRtcCB8PSAoICggbW9kZS5yZXNlcnZlZDIgJiAweDcgKSA8PCA0ICk7Ci0gICB0bXAgfD0gKCAoIG1vZGUuZGwgICAgJiAweDEgKSA8PCAzICk7Ci0gICB0bXAgfD0gKCAoIG1vZGUuY3RtICAgJiAweDEgKSA8PCAyICk7Ci0gICB0bXAgfD0gKCAoIG1vZGUuY2MgICAgJiAweDEgKSA8PCAxICkgOwotICAgdG1wIHw9ICggbW9kZS5jcyAgICAmIDB4MSApOwotCi0gICBzdG9yZV9ydW50aW1lX3JlZyggZXVtYmJhciwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHICsgRE1BX01SX1JFR10sIHRtcCApOwotICAgcmV0dXJuIERNQVNVQ0NFU1M7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfU3RhcnQKLSAqCi0gKiBkZXNjcmlwdGlvbjogc3RhcnQgYSBnaXZlbiBETUEgY2hhbm5lbCB0cmFuc2FjdGlvbgotICogICAgICAgICAgICAgIHJldHVybiBETUFTVUNDRVNTIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIHJldHVybgotICogICAgICAgICAgICAgIERNQVN0YXR1cyB2YWx1ZQotICoKLSAqIG5vdGU6IHRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciBETUFfTVIoQ0MpIGZpcnN0LCB0aGVuCi0gKiAgICAgICBzZXQgRE1BX01SKENDKS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYwotRE1BU3RhdHVzIERNQV9TdGFydCggTE9DQVRJT04gaG9zdCwgdW5zaWduZWQgaW50IGV1bWJiYXIsIHVuc2lnbmVkIGludCBjaGFubmVsICkKLXsKLSAgIERNQV9TUiBzdGF0OwotICAgdW5zaWduZWQgaW50IG1vZGU7Ci0KLSAgIGlmICggY2hhbm5lbCAhPSAwICYmIGNoYW5uZWwgIT0gMSApCi0gICB7Ci0JICAgcmV0dXJuIERNQUlOVkFMSUQ7Ci0gICB9Ci0KLSAgIGlmICggRE1BX0dldF9TdGF0KCBob3N0LCBldW1iYmFyLCBjaGFubmVsLCAmc3RhdCApICE9IERNQVNVQ0NFU1MgKQotICAgewotCQkgICByZXR1cm4gRE1BSU5WQUxJRDsKLSAgIH0KLQotICAgaWYgKCBzdGF0LmNiID09IDEgKQotICAgewotCSAgIC8qIERNQSBpcyBub3QgZnJlZSAqLwotCSAgIHJldHVybiBETUFDSE5CVVNZOwotICAgfQotCi0gICBtb2RlID0gbG9hZF9ydW50aW1lX3JlZyggZXVtYmJhciwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHICsgRE1BX01SX1JFR10gKTsKLSAgIC8qIGNsZWFyIERNQV9NUihDUykgKi8KLSAgIG1vZGUgJj0gMHhmZmZmZmZmZTsKLSAgIHN0b3JlX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcgKyBETUFfTVJfUkVHXSwgbW9kZSApOwotCi0gICAvKiBzZXQgRE1BX01SKENTKSAqLwotICAgbW9kZSB8PSBDUzsKLSAgIHN0b3JlX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcgKyBETUFfTVJfUkVHXSwgbW9kZSApOwotICAgcmV0dXJuIERNQVNVQ0NFU1M7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9IYWx0Ci0gKgotICogZGVzY3JpcHRpb246IGhhbHQgdGhlIGN1cnJlbnQgZG1hIHRyYW5zYWN0aW9uIG9uIHRoZSBzcGVjaWZpZWQKLSAqICAgICAgICAgICAgICBjaGFubmVsLgotICogICAgICAgICAgICAgIHJldHVybiBETUFTVUNDRVNTIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIHJldHVybiBETUFJTlZBTElECi0gKgotICogbm90ZTogaWYgdGhlIHNwZWNpZmllZCBETUEgY2hhbm5lbCBpcyBpZGxlLCBub3RoaW5nIGhhcHBlbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljCi1ETUFTdGF0dXMgRE1BX0hhbHQoIExPQ0FUSU9OIGhvc3QsIHVuc2lnbmVkIGludCBldW1iYmFyLCB1bnNpZ25lZCBpbnQgY2hhbm5lbCApCi17Ci0gICB1bnNpZ25lZCBpbnQgbW9kZTsKLSAgIGlmICggY2hhbm5lbCAhPSAwICYmIGNoYW5uZWwgIT0gMSApCi0gICB7Ci0JICAgcmV0dXJuIERNQUlOVkFMSUQ7Ci0gICB9Ci0KLSAgIG1vZGUgPSBsb2FkX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcgKyBETUFfTVJfUkVHXSk7Ci0KLSAgIC8qIGNsZWFyIERNQV9NUihDUykgKi8KLSAgIG1vZGUgJj0gMHhmZmZmZmZmZTsKLSAgIHN0b3JlX3J1bnRpbWVfcmVnKGV1bWJiYXIsIGRtYV9yZWdfdGJbaG9zdF1bY2hhbm5lbCpOVU1fRE1BX1JFRyArIERNQV9NUl9SRUddLCBtb2RlICk7Ci0gICByZXR1cm4gRE1BU1VDQ0VTUzsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfQ2huX0NudAotICoKLSAqIGRlc2NyaXB0aW9uOiBzZXQgdGhlIERNQV9NUihDQykgYml0IGZvciBhIGdpdmVuIGNoYW5uZWwKLSAqICAgICAgICAgICAgICB0aGF0IGlzIGluIGNoYWluaW5nIG1vZGUuCi0gKiAgICAgICAgICAgICAgcmV0dXJuIERNQVNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bGUsIG90aGVyd2lzZSByZXR1cm4KLSAqICAgICAgICAgICAgICBETUFJTlZBTElELgotICoKLSAqIG5vdGU6IGlmIHRoZSBnaXZlbiBjaGFubmVsIGlzIG5vdCBpbiBjaGFpbmluZyBtb2RlLCBub3RoaW5nCi0gKiAgICAgICBoYXBwZW4uCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMKLURNQVN0YXR1cyBETUFfQ2huX0NudCggTE9DQVRJT04gaG9zdCwgdW5zaWduZWQgaW50IGV1bWJiYXIsIHVuc2lnbmVkIGludCBjaGFubmVsICkKLXsKLQlETUFfTVIgbW9kZTsKLQlpZiAoIGNoYW5uZWwgIT0gMCAmJiBjaGFubmVsICE9IDEgKQotCXsKLQkJcmV0dXJuIERNQUlOVkFMSUQ7Ci0JfQotCi0JaWYgKCBETUFfR2V0X01vZGUoIGhvc3QsIGV1bWJiYXIsIGNoYW5uZWwsICZtb2RlICkgIT0gRE1BU1VDQ0VTUyApCi0JewotCQkJcmV0dXJuIERNQUlOVkFMSUQ7Ci0JfQotCi0JaWYgKCBtb2RlLmN0bSA9PSAwICkKLQl7Ci0JCS8qIGVpdGhlciBpbGxlZ2FsIG1vZGUgb3Igbm90IGNoYWluaW5nIG1vZGUgKi8KLQkJcmV0dXJuIERNQUlOVkFMSUQ7Ci0JfQotCi0JbW9kZS5jYyA9IDE7Ci0JcmV0dXJuIERNQV9TZXRfTW9kZSggaG9zdCwgZXVtYmJhciwgY2hhbm5lbCwgbW9kZSApOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBETUFfQmxkX0Rlc3AKLSAqCi0gKiBkZXNjcmlwdGlvbjogc2V0IGN1cnJlbnQgZGVzY3JpcHRvciBhZGRyZXNzIHJlZ2lzdGVyCi0gKiAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBkZXNwIGZvciBhIGdpdmVuIGNoYW5uZWwKLSAqCi0gKiAgICAgICAgICAgICAgaWYgdGhlIGdpdmVuIGNoYW5uZWwgaXMgYnVzeSByZXR1cm4gRE1BQ0hOQlVTWQotICogICAgICAgICAgICAgIGFuZCBubyBjaGFuZ2UgbWFkZSwgb3RoZXJ3aXNlIHJldHVybiBETUFTVUNDRVNTLgotICoKLSAqIG5vdGU6Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMKLURNQVN0YXR1cyBETUFfQmxkX0Rlc3AoIExPQ0FUSU9OIGhvc3QsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgZXVtYmJhciwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJCQkJICAgRE1BX0NEQVIgICAgIGRlc3AgKQotewotCURNQV9TUiBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IHRlbXA7Ci0KLQlpZiAoIGNoYW5uZWwgIT0gMCAmJiBjaGFubmVsICE9IDEgKQotCXsKLQkJLyogY2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICovCi0JCXJldHVybiBETUFJTlZBTElEOwotCX0KLQotCWlmICggRE1BX0dldF9TdGF0KCBob3N0LCBldW1iYmFyLCBjaGFubmVsLCAmc3RhdHVzICkgIT0gRE1BU1VDQ0VTUyApCi0JewotCQkJcmV0dXJuIERNQUlOVkFMSUQ7Ci0JfQotCi0JaWYgKCBzdGF0dXMuY2IgPT0gMSApCi0JewotCQkvKiBjaGFubmVsIGJ1c3kgKi8KLQkJcmV0dXJuIERNQUNITkJVU1k7Ci0JfQotCi0JdGVtcCA9ICggZGVzcC5jZGEgJiAweDdmZmZmZmYgKSA8PCA1OwotCXRlbXAgfD0gKCggZGVzcC5zbmVuICYgMHgxICkgPDwgNCApOwotCXRlbXAgfD0gKCggZGVzcC5lb3NpZSAmIDB4MSApIDw8IDMgKTsKLQl0ZW1wIHw9ICgoIGRlc3AuY3R0ICAgJiAweDMgKSA8PCAxICk7Ci0gICAgdGVtcCB8PSAoIGRlc3AuZW90ZCAgJiAweDEgKTsKLQotICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcrRE1BX0NEQVJfUkVHXSwgdGVtcCApOwotCi0jaWZkZWYgRE1BREJHMAotICAgUFJJTlQoICIlcyglZCk6ICVzIERNQSAlZCAoMHglMDh4KSBjZGFyIDo9IDB4JTA4eFxuIiwgX19GSUxFX18sIF9fTElORV9fLAotCQkgICggaG9zdCA9PSBMT0NBTCA/ICJsb2NhbCIgOiAicmVtb3RlIiApLCBjaGFubmVsLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcrRE1BX0NEQVJfUkVHXSwgdGVtcCApOwotI2VuZGlmCi0KLQlyZXR1cm4gRE1BU1VDQ0VTUzsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogRE1BX1Bva2VfRGVzcAotICoKLSAqIGRlc2NyaXB0aW9uOiBwb2tlIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgYWRkcmVzcyByZWdpc3RlcgotICogICAgICAgICAgICAgIGZvciBhIGdpdmVuIGNoYW5uZWwKLSAqCi0gKiAgICAgICAgICAgICAgcmV0dXJuIERNQVNVQ0NFU1MgaWYgbm8gZXJyb3IKLSAqCi0gKiBub3RlOiBEdWUgdG8gdGhlIHVuZGV0ZXJtaW5pc3RpYyBwYXJhbGxlbGxpc20gb2YgRE1BIG9wZXJhdGlvbiwKLSAqICAgICAgIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHNoYWxsIGJlIHRha2VuIGFzCi0gKiAgICAgICB0aGUgbW9zdCByZWNlbnRseSB1c2VkIGRlc2NyaXB0b3Igd2hlbiB0aGUgbGFzdCB0aW1lCi0gKiAgICAgICBETUEgc3RhcnRzIGEgY2hhaW5pbmcgbW9kZSBvcGVyYXRpb24uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMKLURNQVN0YXR1cyBETUFfUG9rZV9EZXNwKCBMT0NBVElPTiBob3N0LAotCQkJCQkJICAgIHVuc2lnbmVkIGludCBldW1iYmFyLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJCQkJICAgIERNQV9DREFSICAgICAqZGVzcCApCi17Ci0JdW5zaWduZWQgaW50IGNkYXI7Ci0JaWYgKCBjaGFubmVsICE9IDAgJiYgY2hhbm5lbCAhPSAxIHx8IGRlc3AgPT0gMCApCi0JewotCQkJcmV0dXJuIERNQUlOVkFMSUQ7Ci0JfQotCi0gICAgY2RhciA9IGxvYWRfcnVudGltZV9yZWcoIGV1bWJiYXIsIGRtYV9yZWdfdGJbaG9zdF1bY2hhbm5lbCpOVU1fRE1BX1JFRytETUFfQ0RBUl9SRUddICk7Ci0KLSNpZmRlZiBETUFEQkcwCi0gICBQUklOVCggIiVzKCVkKTogJXMgRE1BICVkICgweCUwOHgpIGNkYXIgOiAweCUwOHhcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAoIGhvc3QgPT0gTE9DQUwgPyAibG9jYWwiIDogInJlbW90ZSIgKSwgY2hhbm5lbCwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHK0RNQV9DREFSX1JFR10sIGNkYXIgKTsKLSNlbmRpZgotCi0KLQlkZXNwLT5jZGEgICA9ICggY2RhciAmIDB4ZmZmZmZmZTAgKSA+PiA1OwotCWRlc3AtPnNuZW4gID0gKCBjZGFyICYgMHgwMDAwMDAxMCApID4+IDQ7Ci0JZGVzcC0+ZW9zaWUgPSAoIGNkYXIgJiAweDAwMDAwMDA4ICkgPj4gMzsKLQlkZXNwLT5jdHQgICA9ICggY2RhciAmIDB4MDAwMDAwMDYgKSA+PiAxOwotCWRlc3AtPmVvdGQgID0gKCBjZGFyICYgMHgwMDAwMDAwMSApOwotCi0JcmV0dXJuIERNQVNVQ0NFU1M7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9CbGRfQ3VycgotICoKLSAqIGRlc2NyaXB0aW9uOiBzZXQgY3VycmVudCBzcmMsIGRlc3QsIGJ5dGUgY291bnQgcmVnaXN0ZXJzCi0gKiAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBkZXNwIGZvciBhIGdpdmVuIGNoYW5uZWwKLSAqICAgICAgICAgICAgICByZXR1cm4gRE1BU1VDQ0VTUyBpZiBubyBlcnJvci4KLSAqCi0gKiBub3RlOgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljCi1ETUFTdGF0dXMgRE1BX0JsZF9DdXJyKCBMT0NBVElPTiBob3N0LAotCQkJCQkgICB1bnNpZ25lZCBpbnQgZXVtYmJhciwKLQkJCQkJICAgdW5zaWduZWQgaW50IGNoYW5uZWwsCi0JCQkJCSAgIERNQV9DVVJSICAgICBkZXNwICkKLXsKLQlETUFfU1Igc3RhdHVzOwotCWlmICggY2hhbm5lbCAhPSAwICYmIGNoYW5uZWwgIT0gMSApCi0JewotCQkvKiBjaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UgKi8KLQkJcmV0dXJuIERNQUlOVkFMSUQ7Ci0JfQotCi0JaWYgKCBETUFfR2V0X1N0YXQoIGhvc3QsIGV1bWJiYXIsIGNoYW5uZWwsICZzdGF0dXMgKSAhPSBETUFTVUNDRVNTICkKLQl7Ci0JCSByZXR1cm4gRE1BSU5WQUxJRDsKLQl9Ci0KLQlpZiAoIHN0YXR1cy5jYiA9PSAxICApCi0JewotCQkvKiBjaGFubmVsIGJ1c3kgKi8KLQkJcmV0dXJuIERNQUNITkJVU1k7Ci0JfQotCi0JZGVzcC5ieXRlX2NudCAmPSAweDAzZmZmZmZmOyAvKiB1cHBlciA2LWJpdHMgYXJlIDBzICovCi0KLSAgICBzdG9yZV9ydW50aW1lX3JlZyggZXVtYmJhciwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHK0RNQV9TQVJfUkVHXSwgZGVzcC5zcmNfYWRkciApOwotI2lmZGVmIERNQURCRzAKLSAgIFBSSU5UKCAiJXMoJWQpOiAlcyBETUEgJWQgKDB4JTA4eCkgc3JjIDo9IDB4JTA4eFxuIiwgX19GSUxFX18sIF9fTElORV9fLAotCQkgICggaG9zdCA9PSBMT0NBTCA/ICJsb2NhbCIgOiAicmVtb3RlIiApLCBjaGFubmVsLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcrRE1BX0NEQVJfUkVHXSwgZGVzcC5zcmNfYWRkciApOwotI2VuZGlmCi0KLSAgICBzdG9yZV9ydW50aW1lX3JlZyggZXVtYmJhciwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHK0RNQV9EQVJfUkVHXSwgZGVzcC5kZXN0X2FkZHIgKTsKLSNpZmRlZiBETUFEQkcwCi0gICBQUklOVCggIiVzKCVkKTogJXMgRE1BICVkICgweCUwOHgpIGRlc3QgOj0gMHglMDh4XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgKCBob3N0ID09IExPQ0FMID8gImxvY2FsIiA6ICJyZW1vdGUiICksIGNoYW5uZWwsIGRtYV9yZWdfdGJbaG9zdF1bY2hhbm5lbCpOVU1fRE1BX1JFRytETUFfQ0RBUl9SRUddLCBkZXNwLmRlc3RfYWRkciApOwotI2VuZGlmCi0KLSAgICBzdG9yZV9ydW50aW1lX3JlZyggZXVtYmJhciwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHK0RNQV9CQ1JfUkVHXSwgZGVzcC5ieXRlX2NudCApOwotI2lmZGVmIERNQURCRzAKLSAgIFBSSU5UKCAiJXMoJWQpOiAlcyBETUEgJWQgKDB4JTA4eCkgY291bnQgOj0gMHglMDh4XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgKCBob3N0ID09IExPQ0FMID8gImxvY2FsIiA6ICJyZW1vdGUiICksIGNoYW5uZWwsIGRtYV9yZWdfdGJbaG9zdF1bY2hhbm5lbCpOVU1fRE1BX1JFRytETUFfQ0RBUl9SRUddLCBkZXNwLmJ5dGVfY250ICk7Ci0jZW5kaWYKLQotCi0JcmV0dXJuIERNQVNVQ0NFU1M7Ci0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogRE1BX1Bva2VfQ3VycgotICoKLSAqIGRlc2NyaXB0aW9uOiBwb2tlIHRoZSBjdXJyZW50IHNyYywgZGVzdCwgYnl0ZSBjb3VudCByZWdpc3RlcnMKLSAqICAgICAgICAgICAgICBmb3IgYSBnaXZlbiBjaGFubmVsLgotICoKLSAqICAgICAgICAgICAgICByZXR1cm4gRE1BU1VDQ0VTUyBpZiBubyBlcnJvcgotICoKLSAqIG5vdGU6ICAgICAgICBEdWUgdG8gdGhlIHVuZGV0ZXJtaW5pc3RpYyBwYXJhbGxlbGlzbSwgaW4gY2hhaW5pbmcKLSAqICAgICAgICAgICAgICBtb2RlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBzaGFsbAotICogICAgICAgICAgICAgIGJlIHRha2VuIGFzIHJlZmVyZW5jZSB3aGVuIHRoZSBxdWVyeSBpcyBtYWRlIHJhdGhlcgotICogICAgICAgICAgICAgIHRoYW4gdGhlIGFic29sdXRlIHNuYXBzaG90IHdoZW4gdGhlIHZhbHVlIGlzIHJldHVybmVkLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljCi1ETUFTdGF0dXMgRE1BX1Bva2VfQ3VyciggTE9DQVRJT04gaG9zdCwKLQkJCQkJICAgIHVuc2lnbmVkIGludCBldW1iYmFyLAotCQkJCQkgICAgdW5zaWduZWQgaW50IGNoYW5uZWwsCi0JCQkJCSAgICBETUFfQ1VSUiogICAgZGVzcCApCi17Ci0JaWYgKCBjaGFubmVsICE9IDAgJiYgY2hhbm5lbCAhPSAxIHx8IGRlc3AgPT0gMCApCi0JewotCQkJcmV0dXJuIERNQUlOVkFMSUQ7Ci0JfQotCi0JZGVzcC0+c3JjX2FkZHIgPSBsb2FkX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBkbWFfcmVnX3RiW2hvc3RdW2NoYW5uZWwqTlVNX0RNQV9SRUcrRE1BX1NBUl9SRUddICk7Ci0jaWZkZWYgRE1BREJHMAotICAgUFJJTlQoICIlcyglZCk6ICVzIERNQSAlZCAoMHglMDh4KSBzcmMgOiAweCUwOHhcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAoIGhvc3QgPT0gTE9DQUwgPyAibG9jYWwiIDogInJlbW90ZSIgKSwgY2hhbm5lbCwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHK0RNQV9DREFSX1JFR10sIGRlc3AtPnNyY19hZGRyICk7Ci0jZW5kaWYKLQotCWRlc3AtPmRlc3RfYWRkciA9IGxvYWRfcnVudGltZV9yZWcoIGV1bWJiYXIsIGRtYV9yZWdfdGJbaG9zdF1bY2hhbm5lbCpOVU1fRE1BX1JFRytETUFfREFSX1JFR10gKTsKLSNpZmRlZiBETUFEQkcwCi0gICBQUklOVCggIiVzKCVkKTogJXMgRE1BICVkICgweCUwOHgpIGRlc3QgOiAweCUwOHhcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAoIGhvc3QgPT0gTE9DQUwgPyAibG9jYWwiIDogInJlbW90ZSIgKSwgY2hhbm5lbCwgZG1hX3JlZ190Yltob3N0XVtjaGFubmVsKk5VTV9ETUFfUkVHK0RNQV9DREFSX1JFR10sIGRlc3AtPmRlc3RfYWRkciApOwotI2VuZGlmCi0KLSAgICBkZXNwLT5ieXRlX2NudCA9IGxvYWRfcnVudGltZV9yZWcoIGV1bWJiYXIsIGRtYV9yZWdfdGJbaG9zdF1bY2hhbm5lbCpOVU1fRE1BX1JFRytETUFfQkNSX1JFR10gKTsKLSNpZmRlZiBETUFEQkcwCi0gICBQUklOVCggIiVzKCVkKTogJXMgRE1BICVkICgweCUwOHgpIGNvdW50IDogMHglMDh4XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgKCBob3N0ID09IExPQ0FMID8gImxvY2FsIiA6ICJyZW1vdGUiICksIGNoYW5uZWwsIGRtYV9yZWdfdGJbaG9zdF1bY2hhbm5lbCpOVU1fRE1BX1JFRytETUFfQ0RBUl9SRUddLCBkZXNwLT5ieXRlX2NudCApOwotI2VuZGlmCi0KLQotCXJldHVybiBETUFTVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBkbWFfZXJyb3JfZnVuYwotICoKLSAqIGRlc2NyaXB0aW9uOiBkaXNwbGF5IHRoZSBlcnJvciBpbmZvcm1hdGlvbgotICoKLSAqIG5vdGU6IFRoaXMgc2VlbXMgbGlrZSBhIGhpZ2hseSBjb252b2x1dGVkIHdheSB0byBoYW5kbGUgbWVzc2FnZXMsCi0gKiBidXQgSSdsbCBsZWF2ZSBpdCBhcyBpdCB3YXMgaW4gZGV2aWNlLmMgd2hlbiBJIG1vdmVkIGl0IGludG8gdGhlCi0gKiBETUEgbGlicmFyeSBzb3VyY2UuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYwotRE1BU3RhdHVzIGRtYV9lcnJvcl9mdW5jKCB1bnNpZ25lZCBpbnQgZXVtYmJhciwgdW5zaWduZWQgaW50IGNobiwgRE1BU3RhdHVzIGVycikKLXsKLQl1bnNpZ25lZCBjaGFyICptc2dbXSA9Ci0JCXsKLQkJCSJMb2NhbCBNZW1vcnkgRXJyb3IiLAotCQkJIlBDSSBFcnJvciIsCi0JCQkiQ2hhbm5lbCBCdXN5IiwKLQkJCSJFbmQtb2YtU2VnbWVudCBJbnRlcnJ1cHQiLAotCQkJIkVuZC1vZi1DaGFpbi9EaXJlY3QgSW50ZXJydXB0IiwKLQkJfTsKLQotCSAgIGlmICggZXJyID49IERNQUxNRVJST1IgJiYgZXJyIDw9IERNQUVPQ0FJTlQgKQotCSAgIHsKLQkgICAgIFBSSU5UKCAiRE1BIFN0YXR1czogY2hhbm5lbCAlZCAgJXNcbiIsIGNobiwgbXNnW2Vyci1ETUFTVUNDRVNTLTFdICk7Ci0JICAgfQotCi0JICAgcmV0dXJuIGVycjsKLQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IERNQV9JU1IKLSAqCi0gKiBkZXNjcmlwdGlvbjogRE1BIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKLSAqICAgICAgICAgICAgICByZXR1cm4gRE1BU3RhdHVzIHZhbHVlIGJhc2VkIG9uCi0gKiAgICAgICAgICAgICAgdGhlIHN0YXR1cwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljCi1ETUFTdGF0dXMgRE1BX0lTUiggdW5zaWduZWQgaW50IGV1bWJiYXIsCi0JCQkJICB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKLQkJCQkgIERNQVN0YXR1cyAoKmxtZV9mdW5jKSggdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIERNQVN0YXR1cyApLAotCQkJCSAgRE1BU3RhdHVzICgqcGVfZnVuYykgKCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgRE1BU3RhdHVzICksCi0JCQkJICBETUFTdGF0dXMgKCplb3NpX2Z1bmMpKCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgRE1BU3RhdHVzICksCi0JCQkJICBETUFTdGF0dXMgKCplb2NhaV9mdW5jKSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgRE1BU3RhdHVzICkpCi17Ci0KLQlETUFfU1Igc3RhdDsKLQlETUFTdGF0dXMgcnZhbCA9IERNQU5PRVZFTlQ7Ci0gICAgdW5zaWduZWQgaW50IHRlbXA7Ci0KLQlpZiAoIGNoYW5uZWwgIT0gMCAmJiBjaGFubmVsICE9IDEgKQotCXsKLQkJcmV0dXJuIERNQUlOVkFMSUQ7Ci0JfQotCi0JaWYgKCBETUFfR2V0X1N0YXQoIExPQ0FMLCBldW1iYmFyLCBjaGFubmVsLCAmc3RhdCApICE9IERNQVNVQ0NFU1MgKQotCXsKLQkJCXJldHVybiBETUFJTlZBTElEOwotCX0KLQotCWlmICggc3RhdC5sbWUgPT0gMSApCi0JewotCQkvKiBsb2NhbCBtZW1vcnkgZXJyb3IgKi8KLQkJcnZhbCA9IERNQUxNRVJST1I7Ci0JCWlmICggbG1lX2Z1bmMgIT0gMCApCi0JCXsKLQkJICBydmFsID0gKCpsbWVfZnVuYykoZXVtYmJhciwgY2hhbm5lbCwgRE1BTE1FUlJPUiApOwotCSAgICB9Ci0KLQl9Ci0JZWxzZSBpZiAoIHN0YXQucGUgPT0gMSApCi0JewotCS8qIFBDSSBlcnJvciAqLwotCQlydmFsID0gRE1BUEVSUk9SOwotCQlpZiAoIHBlX2Z1bmMgIT0gMCApCi0JCXsKLQkJICBydmFsID0gKCpwZV9mdW5jKShldW1iYmFyLCBjaGFubmVsLCBETUFQRVJST1IgKTsKLQkgICAgfQotCi0JfQotCWVsc2UgaWYgKCBzdGF0LmVvc2kgPT0gMSApCi0JewotCQkvKiBlbmQtb2Ytc2VnbWVudCBpbnRlcnJ1cHQgKi8KLQkJcnZhbCA9IERNQUVPU0lOVDsKLQkJaWYgKCBlb3NpX2Z1bmMgIT0gMCApCi0JCXsKLQkJICBydmFsID0gKCplb3NpX2Z1bmMpKGV1bWJiYXIsIGNoYW5uZWwsIERNQUVPU0lOVCApOwotCSAgICB9Ci0JfQotCWVsc2UKLQl7Ci0JCS8qIEVuZC1vZi1jaGFpbi9kaXJlY3QgaW50ZXJydXB0ICovCi0JCXJ2YWwgPSBETUFFT0NBSU5UOwotCQlpZiAoIGVvY2FpX2Z1bmMgIT0gMCApCi0JCXsKLQkJICBydmFsID0gKCplb2NhaV9mdW5jKShldW1iYmFyLCBjaGFubmVsLCBETUFFT0NBSU5UICk7Ci0JICAgIH0KLQl9Ci0KLSAgICB0ZW1wID0gKCBzdGF0LnJlc2VydmVkMCAmIDB4ZmZmZmZmICkgPDwgODsKLQl0ZW1wIHw9ICggKCBzdGF0LmxtZSAgICAgICAmIDB4MSApIDw8IDcgKTsgIC8qIHdyaXRlIG9uZSB0byBjbGVhciAqLwotCXRlbXAgfD0gKCAoIHN0YXQucmVzZXJ2ZWQxICYgMHgzICkgPDwgNSApOwotICAgIHRlbXAgfD0gKCAoIHN0YXQucGUgICAgICAgICYgMHgxICkgPDwgNCApOyAgLyogd3JpdGUgb25lIHRvIGNsZWFyICovCi0gICAgdGVtcCB8PSAoICggc3RhdC5yZXNlcnZlZDIgJiAweDEgKSA8PCAzICk7Ci0JdGVtcCB8PSAoICggc3RhdC5jYiAgICAgICAgJiAweDEgKSA8PCAyICk7ICAvKiB3cml0ZSBvbmUgdG8gY2xlYXIgKi8KLSAgICB0ZW1wIHw9ICggKCBzdGF0LmVvc2kgICAgICAmIDB4MSApIDw8IDEgKTsgIC8qIHdyaXRlIG9uZSB0byBjbGVhciAqLwotICAgIHRlbXAgfD0gKCBzdGF0LmVvY2FpICYgMHgxICk7ICAgICAgICAgICAgICAgLyogd3JpdGUgb25lIHRvIGNsZWFyICovCi0KLSAgICBzdG9yZV9ydW50aW1lX3JlZyggZXVtYmJhciwgZG1hX3JlZ190YltMT0NBTF1bY2hhbm5lbCpOVU1fRE1BX1JFRyArIERNQV9TUl9SRUddLCB0ZW1wICk7Ci0KLSNpZmRlZiBETUFEQkcwCi0JUFJJTlQoICIlcyglZCk6IERNQSBjaGFubmVsICVkIFNSIDo9IDB4JTA4eFxuIiwgX19GSUxFX18sIF9fTElORV9fLCBjaGFubmVsLCB0ZW1wICk7Ci0jZW5kaWYKLQotCXJldHVybiBydmFsOwotfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hMi5TIGIvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hMi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2JjMjI2Li4wMDAwMDAwCi0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYTIuUworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIGNvcHlyaWdodCBAIE1vdG9yb2xhLCAxOTk5Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IGxvYWRfcnVudGltZV9yZWcKLSAqCi0gKiBpbnB1dDogIHIzIC0gdmFsdWUgb2YgZXVtYmJhcgotICogICAgICAgICByNCAtIHJlZ2lzdGVyIG9mZnNldCBpbiBlbWJlZGRlZCB1dGlsaXR5IHNwYWNlCi0gKgotICogb3V0cHV0OiByMyAtIHJlZ2lzdGVyIGNvbnRlbnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS50ZXh0Ci0JLmFsaWduIDIKLQkuZ2xvYmFsIGxvYWRfcnVudGltZV9yZWcKLQotbG9hZF9ydW50aW1lX3JlZzoKLQotCWx3YnJ4CXIzLHI0LHIzCi0Jc3luYwotCi0JYmNsciAyMCwgMAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IHN0b3JlX3J1bnRpbWVfcmVnCi0gKgotICogaW5wdXQ6IHIzIC0gdmFsdWUgb2YgZXVtYmJhcgotICogICAgICAgIHI0IC0gcmVnaXN0ZXIgb2Zmc2V0IGluIGVtYmVkZGVkIHV0aWxpdHkgc3BhY2UKLSAqICAgICAgICByNSAtIG5ldyB2YWx1ZSB0byBiZSBzdG9yZWQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkudGV4dAotCS5hbGlnbiAyCi0JLmdsb2JhbCBzdG9yZV9ydW50aW1lX3JlZwotc3RvcmVfcnVudGltZV9yZWc6Ci0KLQlzdHdicnggcjUsICByNCwgcjMKLQlzeW5jCi0KLQliY2xyICAgMjAsMApkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hX2V4cG9ydC5oIGIvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hX2V4cG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzFlNDg4Li4wMDAwMDAwCi0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYV9leHBvcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0jaWZuZGVmIERNQV9FWFBPUlRfSAotI2RlZmluZSBETUFfRVhQT1JUX0gKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICRJZDoKLSAqCi0gKiBDb3B5cmlnaHQgTW90b3JvbGEgMTk5OQotICoKLSAqICRMb2c6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoZXNlIGFyZSB0aGUgZGVmaW5lZCByZXR1cm4gdmFsdWVzIGZvciB0aGUgRE1BXyogZnVuY3Rpb25zLgotICogQW55IG5vbi16ZXJvIHZhbHVlIGluZGljYXRlcyBmYWlsdXJlLiAgRmFpbHVyZSBtb2RlcyBjYW4gYmUgYWRkZWQgZm9yCi0gKiBtb3JlIGRldGFpbGVkIGVycm9yIHJlcG9ydGluZy4KLSAqLwotdHlwZWRlZiBlbnVtIF9kbWFfc3RhdHVzCi17Ci0gRE1BX1NVQ0NFU1MgICAgID0gMCwKLSBETUFfRVJST1IsCi19IERNQV9TdGF0dXM7Ci0KLS8qIFRoZXNlIGFyZSB0aGUgZGVmaW5lZCBjaGFubmVsIHRyYW5zZmVyIHR5cGVzLiAgKi8KLXR5cGVkZWYgZW51bSBfZG1hX3RyYW5zZmVyX3R5cGVzCi17Ci0JRE1BX00yTSA9ICAwLAkvKiBsb2NhbCBtZW1vcnkgdG8gbG9jYWwgbWVtb3J5ICovCi0JRE1BX00yUCA9ICAxLAkvKiBsb2NhbCBtZW1vcnkgdG8gUENJICovCi0JRE1BX1AyTSA9ICAyLAkvKiBQQ0kgdG8gbG9jYWwgbWVtb3J5ICovCi0JRE1BX1AyUCA9ICAzLAkvKiBQQ0kgdG8gUENJICovCi19IERNQV9UUkFOU0ZFUl9UWVBFOwotCi10eXBlZGVmIGVudW0gX2RtYV9pbnRlcnJ1cHRfc3RlZXIKLXsKLQlETUFfSU5UX1NURUVSX0xPQ0FMID0gIDAsIC8qIHN0ZWVyIERNQSBpbnQgdG8gbG9jYWwgcHJvY2Vzc29yICovCi0JRE1BX0lOVF9TVEVFUl9QQ0kgPSAxLCAgICAvKiBzdGVlciBETUEgaW50IHRvIFBDSSBidXMgdGhyb3VnaCBJTlRBXyAqLwotfSBETUFfSU5URVJSVVBUX1NURUVSOwotCi10eXBlZGVmIGVudW0gX2RtYV9jaGFubmVsCi17Ci0JRE1BX0NITl8wID0gIDAsIC8qIGthaGx1YSBoYXMgdHdvIGRtYSBjaGFubmVsczogMCBhbmQgMSAqLwotCURNQV9DSE5fMSA9ICAxLAotfSBETUFfQ0hBTk5FTDsKLQotdHlwZWRlZiBlbnVtIF9kbWFfc25vb3BfbW9kZQotewotCURNQV9TTk9PUF9ESVNBQkxFID0gIDAsCi0JRE1BX1NOT09QX0VOQUJMRSA9IDEsCi19IERNQV9TTk9PUF9NT0RFOwotCi0vKioqKioqKioqKioqKioqKioqKiogQXBwLiBBUEkgKioqKioqKioqKioqKioqKioqKioKLSAqIFRoZSBhcHBsaWNhdGlvbiBBUEkgaXMgZm9yIHVzZXIgbGV2ZWwgYXBwbGljYXRpb24KLSAqIHRvIHVzZSB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSBETUEgZHJpdmVyLgotICogVGhpcyBpcyBhICJnZW5lcmljIiBETUEgaW50ZXJmYWNlLCBpdCBzaG91bGQgY29udGFpbgotICogbm90aGluZyBzcGVjaWZpYyB0byB0aGUgS2FobHVhIGltcGxlbWVudGF0aW9uLgotICogT25seSB0aGUgZ2VuZXJpYyBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGJ5IHRoZSBsaWJyYXJ5LgotICoKLSAqIE5vdGU6IEl0cyBBcHAucyByZXNwb25zaWJpbGl0eSB0byBzd2FwIHRoZSBkYXRhCi0gKiAgICAgICBieXRlLiBJbiBvdXIgQVBJLCB3ZSBjdXJyZW50bHkgdHJhbnNmZXIgd2hhdGV2ZXIKLSAqICAgICAgIHdlIGFyZSBnaXZlbiAtIEJpZy9MaXR0bGUgRW5kaWFuLiAgVGhpcyBjb3VsZAotICogICAgICAgYmVjb21lIHBhcnQgb2YgdGhlIERNQSBjb25maWcsIHRob3VnaC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKiAgSW5pdGlhbGl6ZSBETUEgdW5pdCB3aXRoIHRoZSBmb2xsb3dpbmc6Ci0gKiAgb3B0aW9uYWwgcG9pbnRlciB0byBhcHBsaWNhdGlvbiBsYXllciBwcmludCBmdW5jdGlvbgotICoKLSAqICBUaGVzZSBwYXJhbWV0ZXJzIG1heSBiZSBhZGRlZDoKLSAqICA/Pz8KLSAqICBJbnRlcnJ1cHQgZW5hYmxlcywgbW9kZXMsIGV0Yy4gYXJlIHNldCBmb3IgZWFjaCB0cmFuc2Zlci4KLSAqCi0gKiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgRE1BIHVuaXQgY2FuIGJlIHVzZWQuCi0gKi8KLWV4dGVybiBETUFfU3RhdHVzIERNQV9Jbml0aWFsaXplKAotCWludCAoKmFwcF9wcmludF9mdW5jdGlvbikoY2hhciAqLC4uLikpOyAvKiBwb2ludGVyIHRvIG9wdGlvbmFsICJwcmludGYiCi0JCQkJCQkgKiBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgotCQkJCQkJICovCi0KLS8qIFBlcmZvcm0gdGhlIERNQSB0cmFuc2Zlciwgb25seSBkaXJlY3QgbW9kZSBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCi0gKiBBdCB0aGlzIHBvaW50LCBJIHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBkZWZpbmUgYSBkaWZmZXJlbnQKLSAqIGZ1bmN0aW9uIGZvciBjaGFpbmluZyBtb2RlLgotICogQWxzbywgSSdtIG5vdCBzdXJlIGlmIGl0IGlzIGFwcHJvcHJpYXRlIHRvIGhhdmUgdGhlICJnZW5lcmljIiBBUEkKLSAqIGFjY2VwdCBzbm9vcCBhbmQgaW50X3N0ZWVyIHBhcmFtZXRlcnMuICBUaGUgRElOSyB1c2VyIGludGVyZmFjZSBhbGxvd3MKLSAqIHRoZW0sIHNvIGZvciBub3cgSSdsbCBsZWF2ZSB0aGVtLgotICoKLSAqIGludF9zdGVlciBjb250cm9scyBETUEgaW50ZXJydXB0IHN0ZWVyaW5nIHRvIFBDSSBvciBsb2NhbCBwcm9jZXNzb3IKLSAqIHR5cGUgaXMgdGhlIHR5cGUgb2YgdHJhbnNmZXI6IE0yTSwgTTJQLCBQMk0sIFAyUAotICogc291cmNlIGlzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgZGF0YQotICogZGVzdCBpcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZGF0YQotICogbGVuIGlzIHRoZSBsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlcgotICogY2hhbm5lbCBpcyB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvciB0aGUgdHJhbnNmZXIKLSAqIHNub29wIGlzIHRoZSBzbm9vcCBlbmFibGUgY29udHJvbAotICovCi1leHRlcm4gRE1BX1N0YXR1cyBETUFfZGlyZWN0X3RyYW5zZmVyKCBETUFfSU5URVJSVVBUX1NURUVSIGludF9zdGVlciwKLQkJCQkgICAgICAgRE1BX1RSQU5TRkVSX1RZUEUgdHlwZSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3QsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJICAgICAgIERNQV9DSEFOTkVMIGNoYW5uZWwsCi0JCQkJICAgICAgIERNQV9TTk9PUF9NT0RFIHNub29wKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWFfZXhwb3J0LmggYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYV9leHBvcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcxZTQ4OC4uMDAwMDAwMAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYV9leHBvcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0jaWZuZGVmIERNQV9FWFBPUlRfSAotI2RlZmluZSBETUFfRVhQT1JUX0gKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICRJZDoKLSAqCi0gKiBDb3B5cmlnaHQgTW90b3JvbGEgMTk5OQotICoKLSAqICRMb2c6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoZXNlIGFyZSB0aGUgZGVmaW5lZCByZXR1cm4gdmFsdWVzIGZvciB0aGUgRE1BXyogZnVuY3Rpb25zLgotICogQW55IG5vbi16ZXJvIHZhbHVlIGluZGljYXRlcyBmYWlsdXJlLiAgRmFpbHVyZSBtb2RlcyBjYW4gYmUgYWRkZWQgZm9yCi0gKiBtb3JlIGRldGFpbGVkIGVycm9yIHJlcG9ydGluZy4KLSAqLwotdHlwZWRlZiBlbnVtIF9kbWFfc3RhdHVzCi17Ci0gRE1BX1NVQ0NFU1MgICAgID0gMCwKLSBETUFfRVJST1IsCi19IERNQV9TdGF0dXM7Ci0KLS8qIFRoZXNlIGFyZSB0aGUgZGVmaW5lZCBjaGFubmVsIHRyYW5zZmVyIHR5cGVzLiAgKi8KLXR5cGVkZWYgZW51bSBfZG1hX3RyYW5zZmVyX3R5cGVzCi17Ci0JRE1BX00yTSA9ICAwLAkvKiBsb2NhbCBtZW1vcnkgdG8gbG9jYWwgbWVtb3J5ICovCi0JRE1BX00yUCA9ICAxLAkvKiBsb2NhbCBtZW1vcnkgdG8gUENJICovCi0JRE1BX1AyTSA9ICAyLAkvKiBQQ0kgdG8gbG9jYWwgbWVtb3J5ICovCi0JRE1BX1AyUCA9ICAzLAkvKiBQQ0kgdG8gUENJICovCi19IERNQV9UUkFOU0ZFUl9UWVBFOwotCi10eXBlZGVmIGVudW0gX2RtYV9pbnRlcnJ1cHRfc3RlZXIKLXsKLQlETUFfSU5UX1NURUVSX0xPQ0FMID0gIDAsIC8qIHN0ZWVyIERNQSBpbnQgdG8gbG9jYWwgcHJvY2Vzc29yICovCi0JRE1BX0lOVF9TVEVFUl9QQ0kgPSAxLCAgICAvKiBzdGVlciBETUEgaW50IHRvIFBDSSBidXMgdGhyb3VnaCBJTlRBXyAqLwotfSBETUFfSU5URVJSVVBUX1NURUVSOwotCi10eXBlZGVmIGVudW0gX2RtYV9jaGFubmVsCi17Ci0JRE1BX0NITl8wID0gIDAsIC8qIGthaGx1YSBoYXMgdHdvIGRtYSBjaGFubmVsczogMCBhbmQgMSAqLwotCURNQV9DSE5fMSA9ICAxLAotfSBETUFfQ0hBTk5FTDsKLQotdHlwZWRlZiBlbnVtIF9kbWFfc25vb3BfbW9kZQotewotCURNQV9TTk9PUF9ESVNBQkxFID0gIDAsCi0JRE1BX1NOT09QX0VOQUJMRSA9IDEsCi19IERNQV9TTk9PUF9NT0RFOwotCi0vKioqKioqKioqKioqKioqKioqKiogQXBwLiBBUEkgKioqKioqKioqKioqKioqKioqKioKLSAqIFRoZSBhcHBsaWNhdGlvbiBBUEkgaXMgZm9yIHVzZXIgbGV2ZWwgYXBwbGljYXRpb24KLSAqIHRvIHVzZSB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSBETUEgZHJpdmVyLgotICogVGhpcyBpcyBhICJnZW5lcmljIiBETUEgaW50ZXJmYWNlLCBpdCBzaG91bGQgY29udGFpbgotICogbm90aGluZyBzcGVjaWZpYyB0byB0aGUgS2FobHVhIGltcGxlbWVudGF0aW9uLgotICogT25seSB0aGUgZ2VuZXJpYyBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGJ5IHRoZSBsaWJyYXJ5LgotICoKLSAqIE5vdGU6IEl0cyBBcHAucyByZXNwb25zaWJpbGl0eSB0byBzd2FwIHRoZSBkYXRhCi0gKiAgICAgICBieXRlLiBJbiBvdXIgQVBJLCB3ZSBjdXJyZW50bHkgdHJhbnNmZXIgd2hhdGV2ZXIKLSAqICAgICAgIHdlIGFyZSBnaXZlbiAtIEJpZy9MaXR0bGUgRW5kaWFuLiAgVGhpcyBjb3VsZAotICogICAgICAgYmVjb21lIHBhcnQgb2YgdGhlIERNQSBjb25maWcsIHRob3VnaC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKiAgSW5pdGlhbGl6ZSBETUEgdW5pdCB3aXRoIHRoZSBmb2xsb3dpbmc6Ci0gKiAgb3B0aW9uYWwgcG9pbnRlciB0byBhcHBsaWNhdGlvbiBsYXllciBwcmludCBmdW5jdGlvbgotICoKLSAqICBUaGVzZSBwYXJhbWV0ZXJzIG1heSBiZSBhZGRlZDoKLSAqICA/Pz8KLSAqICBJbnRlcnJ1cHQgZW5hYmxlcywgbW9kZXMsIGV0Yy4gYXJlIHNldCBmb3IgZWFjaCB0cmFuc2Zlci4KLSAqCi0gKiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgRE1BIHVuaXQgY2FuIGJlIHVzZWQuCi0gKi8KLWV4dGVybiBETUFfU3RhdHVzIERNQV9Jbml0aWFsaXplKAotCWludCAoKmFwcF9wcmludF9mdW5jdGlvbikoY2hhciAqLC4uLikpOyAvKiBwb2ludGVyIHRvIG9wdGlvbmFsICJwcmludGYiCi0JCQkJCQkgKiBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgotCQkJCQkJICovCi0KLS8qIFBlcmZvcm0gdGhlIERNQSB0cmFuc2Zlciwgb25seSBkaXJlY3QgbW9kZSBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCi0gKiBBdCB0aGlzIHBvaW50LCBJIHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBkZWZpbmUgYSBkaWZmZXJlbnQKLSAqIGZ1bmN0aW9uIGZvciBjaGFpbmluZyBtb2RlLgotICogQWxzbywgSSdtIG5vdCBzdXJlIGlmIGl0IGlzIGFwcHJvcHJpYXRlIHRvIGhhdmUgdGhlICJnZW5lcmljIiBBUEkKLSAqIGFjY2VwdCBzbm9vcCBhbmQgaW50X3N0ZWVyIHBhcmFtZXRlcnMuICBUaGUgRElOSyB1c2VyIGludGVyZmFjZSBhbGxvd3MKLSAqIHRoZW0sIHNvIGZvciBub3cgSSdsbCBsZWF2ZSB0aGVtLgotICoKLSAqIGludF9zdGVlciBjb250cm9scyBETUEgaW50ZXJydXB0IHN0ZWVyaW5nIHRvIFBDSSBvciBsb2NhbCBwcm9jZXNzb3IKLSAqIHR5cGUgaXMgdGhlIHR5cGUgb2YgdHJhbnNmZXI6IE0yTSwgTTJQLCBQMk0sIFAyUAotICogc291cmNlIGlzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgZGF0YQotICogZGVzdCBpcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUgZGF0YQotICogbGVuIGlzIHRoZSBsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlcgotICogY2hhbm5lbCBpcyB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvciB0aGUgdHJhbnNmZXIKLSAqIHNub29wIGlzIHRoZSBzbm9vcCBlbmFibGUgY29udHJvbAotICovCi1leHRlcm4gRE1BX1N0YXR1cyBETUFfZGlyZWN0X3RyYW5zZmVyKCBETUFfSU5URVJSVVBUX1NURUVSIGludF9zdGVlciwKLQkJCQkgICAgICAgRE1BX1RSQU5TRkVSX1RZUEUgdHlwZSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3QsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJICAgICAgIERNQV9DSEFOTkVMIGNoYW5uZWwsCi0JCQkJICAgICAgIERNQV9TTk9PUF9NT0RFIHNub29wKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8uaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NzI1M2QuLjAwMDAwMDAKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0jaWZuZGVmIEkyT19ICi0jZGVmaW5lIEkyT19ICi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogY29weXJpZ2h0IEAgTW90b3JvbGEsIDE5OTkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSTJPX1JFR19PRkZTRVQgMHgwMDA0Ci0KLSNkZWZpbmUgUENJX0NGR19DTEEgICAgMHgwQgotI2RlZmluZSBQQ0lfQ0ZHX1NDTCAgICAweDBBCi0jZGVmaW5lIFBDSV9DRkdfUElDICAgIDB4MDkKLQotI2RlZmluZSBJMk9fSU1SMCAweDAwNTAKLSNkZWZpbmUgSTJPX0lNUjEgMHgwMDU0Ci0jZGVmaW5lIEkyT19PTVIwIDB4MDA1OAotI2RlZmluZSBJMk9fT01SMSAweDAwNUMKLQotI2RlZmluZSBJMk9fT0RCUiAweDAwNjAKLSNkZWZpbmUgSTJPX0lEQlIgMHgwMDY4Ci0KLSNkZWZpbmUgSTJPX09NSVNSICAweDAwMzAKLSNkZWZpbmUgSTJPX09NSU1SICAweDAwMzQKLSNkZWZpbmUgSTJPX0lNSVNSICAweDAxMDAKLSNkZWZpbmUgSTJPX0lNSU1SICAweDAxMDQKLQotLyogYWNjZXNzYWJsZSB0byBQQ0kgbWFzdGVyIGJ1dCBsb2NhbCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgSTJPX0lGUVBSICAweDAwNDAKLSNkZWZpbmUgSTJPX09GUVBSICAweDAwNDQKLQotLyogYWNjZXNzYWJsZSB0byBsb2NhbCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgSTJPX0lGSFBSICAweDAxMjAKLSNkZWZpbmUgSTJPX0lGVFBSICAweDAxMjgKLSNkZWZpbmUgSTJPX0lQSFBSICAweDAxMzAKLSNkZWZpbmUgSTJPX0lQVFBSICAweDAxMzgKLSNkZWZpbmUgSTJPX09GSFBSICAweDAxNDAKLSNkZWZpbmUgSTJPX09GVFBSICAweDAxNDgKLSNkZWZpbmUgSTJPX09QSFBSICAweDAxNTAKLSNkZWZpbmUgSTJPX09QVFBSICAweDAxNTgKLSNkZWZpbmUgSTJPX01VQ1IgICAweDAxNjQKLSNkZWZpbmUgSTJPX1FCQVIgICAweDAxNzAKLQotI2RlZmluZSBJMk9fTlVNX01TRyAyCi0KLXR5cGVkZWYgZW51bSBfaTJvX3N0YXR1cwotewotCUkyT1NVQ0NFU1MgPSAwLAotCUkyT0lOVkFMSUQsCi0JSTJPTVNHSU5WQUxJRCwKLQlJMk9EQklOVkFMSUQsCi0JSTJPUVVFSU5WQUxJRCwKLQlJMk9RVUVFTVBUWSwKLQlJMk9RVUVGVUxMLAotCUkyT05PRVZFTlQsCi19IEkyT1NUQVRVUzsKLQotdHlwZWRlZiBlbnVtIF9xdWV1ZV9zaXplCi17Ci0gICAgUVNJWkVfNEsgPSAweDAyLAotICAgIFFTSVpFXzhLID0gMHgwNCwKLSAgICBRU0laRV8xNksgPSAweDA4LAotICAgIFFTSVpFXzMySyA9IDB4MTAsCi0gICAgUVNJWmVfNjRLID0gMHgyMCwKLX0gUVVFVUVfU0laRTsKLQotdHlwZWRlZiBlbnVtIF9sb2NhdGlvbgotewotICAgIExPQ0FMID0gMCwgICAgIC8qIHVzZWQgYnkgbG9jYWwgcHJvY2Vzc29yIHRvIGFjY2VzcyBpdHMgb3duIG9uIGJvYXJkIGRldmljZSwKLQkJICAgICAgbG9jYWwgcHJvY2Vzc29yJ3MgZXVtYmJhciBpcyByZXF1aXJlZCAqLwotICAgIFJFTU9URSwgICAgICAgIC8qIHVzZWQgYnkgUENJIG1hc3RlciB0byBhY2Nlc3MgdGhlIGRldmljZXMgb24gaXRzIFBDSSBkZXZpY2UsCi0JCSAgICAgIGRldmljZSdzIHBjc3JiYXIgaXMgcmVxdWlyZWQgKi8KLX0gTE9DQVRJT047Ci0KLS8qIGRvb3IgYmVsbCAqLwotdHlwZWRlZiBlbnVtIF9pMm9faW5fZGIKLXsKLSAgSU5fREIgPSAxLAotICBNQywgICAgICAgICAvKiBtYWNoaW5lIGNoZWNrICovCi19IEkyT19JTl9EQjsKLQotLyogSTJPIFBDSSBjb25maWd1cmF0aW9uIGlkZW50aWZpY2F0aW9uICovCi10eXBlZGVmIHN0cnVjdCBfaTJvX2lvcAotewotCXVuc2lnbmVkIGludCBiYXNlX2NsYXNzIDogODsKLQl1bnNpZ25lZCBpbnQgc3ViX2NsYXNzICA6IDg7Ci0JdW5zaWduZWQgaW50IHByZ19jb2RlICAgOiA4OwotfSBJMk9JT1A7Ci0KLS8qIEkyTyBPdXRib3VuZCBNZXNzYWdlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLXR5cGVkZWYgc3RydWN0IF9pMm9fb21fc3RhdAotewotCXVuc2lnbmVkIGludCByc3ZkMCA6IDI2OwotCXVuc2lnbmVkIGludCBvcHFpICA6IDE7Ci0JdW5zaWduZWQgaW50IHJzdmQxIDogMTsKLQl1bnNpZ25lZCBpbnQgb2RpICAgOiAxOwotCXVuc2lnbmVkIGludCByc3ZkMiA6IDE7Ci0JdW5zaWduZWQgaW50IG9tMWkgIDogMTsKLQl1bnNpZ25lZCBpbnQgb20waSAgOiAxOwotfSBJMk9PTVNUQVQ7Ci0KLS8qIEkyTyBpbmJvdW5kIE1lc3NhZ2UgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwotdHlwZWRlZiBzdHJ1Y3QgX2kyb19pbV9zdGF0Ci17Ci0JdW5zaWduZWQgaW50IHJzdmQwIDogMjM7Ci0JdW5zaWduZWQgaW50IG9mb2kgIDogMTsKLQl1bnNpZ25lZCBpbnQgaXBvaSAgOiAxOwotCXVuc2lnbmVkIGludCByc3ZkMSA6IDE7Ci0JdW5zaWduZWQgaW50IGlwcWkgIDogMTsKLQl1bnNpZ25lZCBpbnQgbWNpICAgOiAxOwotCXVuc2lnbmVkIGludCBpZGkgICA6IDE7Ci0JdW5zaWduZWQgaW50IHJzdmQyIDogMTsKLQl1bnNpZ25lZCBpbnQgaW0xaSAgOiAxOwotCXVuc2lnbmVkIGludCBpbTBpICA6IDE7Ci19IEkyT0lNU1RBVDsKLQotLyoqCi0gRW5hYmxlIHRoZSBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIGluL291dCBib3VuZCBtc2cKLQotIEluYm91bmQgbWVzc2FnZSBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGJ5IFBDSSBtYXN0ZXIgYW5kIHNlcnZpY2VkIGJ5IGxvY2FsIHByb2Nlc3NvcgotIGxvY2FsIHByb2Nlc3NvciBuZWVkcyB0byBlbmFibGUgaXRzIGluYm91bmQgaW50ZXJydXB0cyBpdCB3YW50cyB0byBoYW5kbGUgKExPQ0FMKQotCi0gT3V0Ym91bmQgbWVzc2FnZSBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGJ5IGxvY2FsIHByb2Nlc3NvciBhbmQgc2VydmljZWQgYnkgUENJIG1hc3RlcgotIFBDSSBtYXN0ZXIgbmVlZHMgdG8gZW5hYmxlIHRoZSBkZXZpY2VzJyBvdXRib3VuZCBpbnRlcnJ1cHRzIGl0IHdhbnRzIHRvIGhhbmRsZSAoUkVNT1RFKQotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dFbmFibGUoIExPQ0FUSU9OLCAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotCQkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgbiApOyAgIC8qIGInMScgLSBtc2cgMAotCQkJCQkJCQkJICAgICAqIGInMTAnLSBtc2cgMQotCQkJCQkJCQkJICAgICAqIGInMTEnLSBib3RoCi0JCQkJCQkJCQkgICAgICovCi0KLS8qKgotIERpc2FibGUgdGhlIGludGVycnVwdCBhc3NvY2lhdGVkIHdpdGggaW4vb3V0IGJvdW5kIG1zZwotCi0gbG9jYWwgcHJvY2Vzc29yIG5lZWRzIHRvIGRpc2FibGUgaXRzIGluYm91bmQgaW50ZXJydXB0cyBpdCBpcyBub3QgaW50ZXJlc3RlZCAoTE9DQUwpCi0KLSBQQ0kgbWFzdGVyIG5lZWRzIHRvIGRpc2FibGUgb3V0Ym91bmQgaW50ZXJydXB0cyBvZiBkZXZpY2VzIGl0IGlzIG5vdCBpbnRlcmVzdGVkIChSRU1PVEUpCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT01zZ0Rpc2FibGUoIExPQ0FUSU9OLCAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLQkJCQl1bnNpZ25lZCBpbnQgYmFzZSwgLyogcGNzcmJhci9ldW1iYmFyICovCi0JCQkJdW5zaWduZWQgY2hhciBuICk7IC8qIGInMScgLSBtc2cgMAotCQkJCQkJCQkJICAgICogYicxMCctIG1zZyAxCi0JCQkJCQkJCQkgICAgKiBiJzExJy0gYm90aAotCQkJCQkJCQkJICAgICovCi0KLS8qKgotIFJlYWQgdGhlIG1zZyByZWdpc3RlciBlaXRoZXIgZnJvbSBsb2NhbCBpbmJvdW5kIG1zZyAwLzEsCi0gb3IgYW4gb3V0Ym91bmQgbXNnIDAvMSBvZiBkZXZpY2VzLgotCi0gSWYgaXQgaXMgbm90IGxvY2FsLCBwY3NyYmFyIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KLSBPdGhlcndpc2UgZXVtYmJhciBpcyBwYXNzZWQuCi0KLSBJZiBpdCBpcyByZW1vdGUsIG91dGJvdW5kIG1zZyBvZiB0aGUgZGV2aWNlIGlzIHJlYWQuCi0gT3RoZXJ3aXNlIGxvY2FsIGluYm91bmQgbXNnIGlzIHJlYWQuCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT01zZ0dldCAoIExPQ0FUSU9OLCAgICAgICAgICAgICAgICAgLyogUkVNT1RFL0xPQ0FMICovCi0JCQkgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KLQkJCSAgICAgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KLQkJCSAgICAgdW5zaWduZWQgaW50ICptc2cgKTsKLQotLyoqCi0gV3JpdGUgdG8gbnRoIE1zZyByZWdpc3RlciBlaXRoZXIgb24gbG9jYWwgb3V0Ym91bmQgbXNnIDAvMSwKLSBvciBhbmluYm91bmQgbXNnIDAvMSBvZiBkZXZpY2VzCi0KLSBJZiBpdCBpcyBub3QgbG9jYWwsIHBjc3JiYXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgotIE90aGVyd2lzZSBldW1iYmFyIGlzIHBhc3NlZC4KLQotIElmIGl0IGlzIHJlbW90ZSwgaW5ib3VuZCBtc2cgb24gdGhlIGRldmljZSBpcyB3cml0dGVuLgotIE90aGVyd2lzZSBsb2NhbCBvdXRib3VuZCBtc2cgaXMgd3JpdHRlbi4KLSAqKi8KLWV4dGVybiBJMk9TVEFUVVMgSTJPTXNnUG9zdCggTE9DQVRJT04sICAgICAgICAgICAgICAgICAvKiBSRU1PVEUvTE9DQUwgKi8KLQkJCQl1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCi0JCQkJdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KLQkJCQl1bnNpZ25lZCBpbnQgbXNnICk7Ci0KLS8qKgotIEVuYWJsZSB0aGUgSW4vT3V0IERvb3JCZWxsIEludGVycnVwdAotCi0gSW5Eb29yQmVsbCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFBDSSBtYXN0ZXIgYW5kIHNlcnZpY2VkIGJ5IGxvY2FsIHByb2Nlc3NvcgotIGxvY2FsIHByb2Nlc3NvciBuZWVkcyB0byBlbmFibGUgaXRzIGluYm91bmQgZG9vcmJlbGwgaW50ZXJydXB0cyBpdCB3YW50cyB0byBoYW5kbGUKLQotIE91dERvb3JiZWxsIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYnkgbG9jYWwgcHJvY2Vzc29yIGFuZCBzZXJ2aWNlZCBieSBQQ0kgbWFzdGVyCi0gUENJIG1hc3RlciBuZWVkcyB0byBlbmFibGUgb3V0Ym91bmQgZG9vcmJlbGwgaW50ZXJydXB0cyBvZiB0aGUgZGV2aWNlcyBpdCB3YW50cyB0byBoYW5kbGUKLSAqKi8KLWV4dGVybiBJMk9TVEFUVVMgSTJPREJFbmFibGUoIExPQ0FUSU9OLCAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotCQkJICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKTsvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KLQotLyoqCi0gRGlzYWJsZSB0aGUgSW4vT3V0IERvb3JCZWxsIEludGVycnVwdAotCi0gbG9jYWwgcHJvY2Vzc29yIG5lZWRzIHRvIGRpc2FibGUgaXRzIGluYm91bmQgZG9vcmJlbGwgaW50ZXJydXB0cyBpdCBpcyBub3QgaW50ZXJlc3RlZAotCi0gUENJIG1hc3RlciBuZWVkcyB0byBkaXNhYmxlIG91dGJvdW5kIGRvb3JiZWxsIGludGVycnVwdHMgb2YgZGV2aWNlcyBpdCBpcyBub3QgaW50ZXJlc3RlZAotCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT0RCRGlzYWJsZSggTE9DQVRJT04sICAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotCQkJICAgICAgIHVuc2lnbmVkIGludCBpbl9kYiApOyAgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCi0KLS8qKgotIFJlYWQgYSBsb2NhbCBpbmRvb3JiZWxsIHJlZ2lzdGVyLCBvciBhbiBvdXRkb29yYmVsbCBvZiBkZXZpY2VzLgotIFJlYWRpbmcgYSBkb29yYmVsbCByZWdpc3RlciwgdGhlIHJlZ2lzdGVyIHdpbGwgYmUgY2xlYXJlZC4KLQotIElmIGl0IGlzIG5vdCBsb2NhbCwgcGNzcmJhciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCi0gT3RoZXJ3aXNlIGV1bWJiYXIgaXMgcGFzc2VkLgotCi0gSWYgaXQgaXMgcmVtb3RlLCBvdXRkb29yYmVsbCByZWdpc3RlciBvbiB0aGUgZGV2aWNlIGlzIHJlYWQuCi0gT3RoZXJ3aXNlIGxvY2FsIGluIGRvb3JiZWxsIGlzIHJlYWQKLSAqKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgSTJPREJHZXQoIExPQ0FUSU9OLCAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLQkJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlKTsgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLQotLyoqCi0gV3JpdGUgdG8gYSBsb2NhbCBvdXRkb29yYmVsbCByZWdpc3Rlciwgb3IgYW4gaW5kb29yYmVsbCByZWdpc3RlciBvZiBkZXZpY2VzLgotCi0gSWYgaXQgaXMgbm90IGxvY2FsLCBwY3NyYmFyIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KLSBPdGhlcndpc2UgZXVtYmJhciBpcyBwYXNzZWQuCi0KLSBJZiBpdCBpcyByZW1vdGUsIGluIGRvb3JiZWxsIHJlZ2lzdGVyIG9uIHRoZSBkZXZpY2UgaXMgd3JpdHRlbi4KLSBPdGhlcndpc2UgbG9jYWwgb3V0IGRvb3JiZWxsIGlzIHdyaXR0ZW4KLSAqKi8KLWV4dGVybiB2b2lkIEkyT0RCUG9zdCggTE9DQVRJT04sICAgICAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLQkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgbXNnICk7ICAgICAgIC8qICAgaW4gICAvIG91dCAgICAqLwotCi0vKioKLSBSZWFkIHRoZSBvdXRib3VuZCBtc2cgdW5pdCBpbnRlcnJ1cHQgc3RhdHVzIG9mIGRldmljZXMuIFJlYWRpbmcgYW4gaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciwKLSB0aGUgcmVnaXN0ZXIgd2lsbCBiZSBjbGVhcmVkLgotCi0gVGhlIG91dGJvdW5kIGludGVycnVwdCBzdGF0dXMgaXMgQU5EIHdpdGggdGhlIG91dGJvdW5kCi0gaW50ZXJydXB0IG1hc2suIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQuCi0KLSBQQ0kgbWFzdGVyIG11c3QgcGFzcyB0aGUgcGNzcmJhciB0byB0aGUgZnVuY3Rpb24uCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT091dE1zZ1N0YXRHZXQoIHVuc2lnbmVkIGludCBwY3NyYmFyLCBJMk9PTVNUQVQgKiApOwotCi0vKioKLSBSZWFkIHRoZSBpbmJvdW5kIG1zZyB1bml0IGludGVycnVwdCBzdGF0dXMuIFJlYWRpbmcgYW4gaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciwKLSB0aGUgcmVnaXN0ZXIgd2lsbCBiZSBjbGVhcmVkLgotCi0gVGhlIGluYm91bmQgaW50ZXJydXB0IHN0YXR1cyBpcyBBTkQgd2l0aCB0aGUgaW5ib3VuZAotIGludGVycnVwdCBtYXNrLiBUaGUgcmVzdWx0IGlzIHJldHVybmVkLgotCi0gTG9jYWwgcHJvY2VzcyBtdXN0IHBhc3MgaXRzIGV1bWJiYXIgdG8gdGhlIGZ1bmN0aW9uLgotKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT0luTXNnU3RhdEdldCggdW5zaWduZWQgaW50IGV1bWJiYXIsIEkyT0lNU1RBVCAqICk7Ci0KLS8qKgotIENvbmZpZ3VyZSB0aGUgSTJPIEZJRk8sIGluY2x1ZGluZyBRQkFSLCBJRkhQUi9JRlRQUixJUEhQUi9JUFRQUixPRkhQUi9PRlRQUiwgT1BIUFIvT1BUUFIsCi0gTVVDUi4KLSAqKi8KLWV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0luaXQoIHVuc2lnbmVkIGludCBldW1iYmFyLAotCQkJCQkgICAgICBRVUVVRV9TSVpFLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgcWJhKTsvKiBxdWV1ZSBiYXNlIGFkZHJlc3MgdGhhdCBtdXN0IGJlIGFsaWduZWQgYXQgMU0gKi8KLS8qKgotIEVuYWJsZSB0aGUgY2lyY3VsYXIgcXVldWUKLSAqKi8KLWV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0VuYWJsZSggdW5zaWduZWQgaW50IGV1bWJiYXIgKTsKLQotLyoqCi0gRGlzYWJsZSB0aGUgY2lyY3VsYXIgcXVldWUKLSAqKi8KLWV4dGVybiB2b2lkIEkyT0ZJRk9EaXNhYmxlKCB1bnNpZ25lZCBpbnQgZXVtYmJhciApOwotCi0vKioKLSBFbmFibGUgdGhlIGNpcmN1bGFyIHF1ZXVlIGludGVycnVwdAotIFBDSSBtYXN0ZXIgZW5hYmxlcyBvdXRib3VuZCBGSUZPIGludGVycnVwdCBvZiBkZXZpY2UKLSBEZXZpY2UgZW5hYmxlcyBpdHMgaW5ib3VuZCBGSUZPIGludGVycnVwdAotICoqLwotZXh0ZXJuIHZvaWQgSTJPRklGT0ludEVuYWJsZSggTE9DQVRJT04sIHVuc2lnbmVkIGludCBiYXNlICApOwotCi0vKioKLSBEaXNhYmxlIHRoZSBjaXJjdWxhciBxdWV1ZSBpbnRlcnJ1cHQKLSBQQ0kgbWFzdGVyIGRpc2FibGVzIG91dGJvdW5kIEZJRk8gaW50ZXJydXB0IG9mIGRldmljZQotIERldmljZSBkaXNhYmxlcyBpdHMgaW5ib3VuZCBGSUZPIGludGVycnVwdAotICoqLwotZXh0ZXJuIHZvaWQgSTJPRklGT0ludERpc2FibGUoIExPQ0FUSU9OLCB1bnNpZ25lZCBpbnQgYmFzZSApOwotCi0vKioKLSBFbmFibGUgdGhlIGNpcmN1bGFyIHF1ZXVlIG92ZXJmbG93IGludGVycnVwdAotICoqLwotZXh0ZXJuIHZvaWQgSTJPRklGT092ZXJmbG93SW50RW5hYmxlKCB1bnNpZ25lZCBpbnQgZXVtYmJhciApOwotCi0vKioKLSBEaXNhYmxlIHRoZSBjaXJjdWxhciBxdWV1ZSBvdmVyZmxvdyBpbnRlcnJ1cHQKLSAqKi8KLWV4dGVybiB2b2lkIEkyT0ZJRk9PdmVyZmxvd0ludERpc2FibGUoIHVuc2lnbmVkIGludCBldW1iYmFyICk7Ci0KLS8qKgotIEFsbG9jYXRlIGEgZnJlZSBtc2cgZnJhbWUgZnJvbSBmcmVlIEZJRk8uCi0KLSBQQ0kgTWFzdGVyIGFsbG9jYXRlcyBhIGZyZWUgbXNnIGZyYW1lIHRocm91Z2ggaW5ib3VuZCBxdWV1ZSBwb3J0IG9mIGRldmljZShJRlFQUikKLSB3aGlsZSBsb2NhbCBwcm9jZXNzb3IgYWxsb2NhdGVzIGEgZnJlZSBtc2cgZnJhbWUgZnJvbSBvdXRib3VuZCBmcmVlIHF1ZXVlKE9GVFBSKQotCi0gVW5sZXNzIGJvdGggZnJlZSBxdWV1ZXMgYXJlIGluaXRpYWxpemVkLCBhbGxvY2F0aW5nIGEgZnJlZSBNRiB3aWxsIHJldHVybiAweGZmZmZmZmZmCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9BbGxvYyggTE9DQVRJT04sCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCQkJICAgICAgIHZvaWQgICAgICAgICAqKnBNc2cpOwotLyoqCi0gRnJlZSBhIHVzZWQgbXNnIGZyYW1lIGJhY2sgdG8gZnJlZSBxdWV1ZQotIFBDSSBNYXN0ZXIgZnJlZXMgYSBNRkEgdGhyb3VnaCBvdXRib3VuZCBxdWV1ZSBwb3J0IG9mIGRldmljZShPRlFQUikKLSB3aGlsZSBsb2NhbCBwcm9jZXNzb3IgZnJlZXMgYSBNRkEgaW50byBpdHMgaW5ib3VuZCBmcmVlIHF1ZXVlKElGSFBSKQotCi0gVXNlZCBtc2cgZnJhbWUgZG9lcyBub3QgbmVlZCB0byBiZSByZWN5Y2xlZCBpbiB0aGUgb3JkZXIgdGhleQotIHJlYWQKLQotIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZCBieSBQQ0kgbWFzdGVyIHRvIGluaXRpYWxpemUgSW5ib3VuZCBmcmVlIHF1ZXVlCi0gYW5kIGJ5IGRldmljZSB0byBpbml0aWFsaXplIE91dGJvdW5kIGZyZWUgcXVldWUgYmVmb3JlIEkyT0ZJRk9BbGxvYyBjYW4gYmUgdXNlZC4KLSAqKi8KLWV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0ZyZWUoIExPQ0FUSU9OLAotCQkJCQkgIHVuc2lnbmVkIGludCBiYXNlLAotCQkJCQkgIHZvaWQgICAgICAgICpwTXNnICk7Ci0KLS8qKgotIFBvc3QgYSBtc2cgaW50byBGSUZPCi0gUENJIE1hc3RlciBwb3N0cyBhIG1zZyB0aHJvdWdoIGluYm91bmQgcXVldWUgcG9ydCBvZiBkZXZpY2UoSUZRUFIpCi0gd2hpbGUgbG9jYWwgcHJvY2Vzc29yIHBvc3QgYSBtc2cgaW50byBpdHMgb3V0Ym91bmQgcG9zdCBxdWV1ZShPUEhQUikKLQotIFRoZSB0b3RhbCBudW1iZXIgb2YgbXNnIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBtYXggc2l6ZSBvZiB0aGUgcXVldWUKLSBPdGhlcndpc2UgcXVldWUgb3ZlcmZsb3cgaW50ZXJydXB0IHdpbGwgYXNzZXJ0LgotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPUG9zdCggTE9DQVRJT04sCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCQkJICAgICAgdm9pZCAgICAgICAgICpwTXNnICk7Ci0KLS8qKgotIFJlYWQgYSBtc2cgZnJvbSBGSUZPCi0gUENJIE1hc3RlciByZWFkcyBhIG1zZyB0aHJvdWdoIG91dGJvdW5kIHF1ZXVlIHBvcnQgb2YgZGV2aWNlKE9GUVBSKQotIHdoaWxlIGxvY2FsIHByb2Nlc3NvciByZWFkcyBhIG1zZyBmcm9tIGl0cyBpbmJvdW5kIHBvc3QgcXVldWUoSVBUUFIpCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9HZXQoIExPQ0FUSU9OLAotCQkJCQkgIHVuc2lnbmVkIGludCBiYXNlLAotCQkJCQkJCSAgdm9pZCAgICAgKipwTXNnICk7Ci0KLS8qKgotIEdldCB0aGUgSTJPIFBDSSBjb25maWd1cmF0aW9uIGlkZW50aWZpY2F0aW9uIHJlZ2lzdGVyCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT1BDSUNvbmZpZ0dldCggTE9DQVRJT04sCi0JCQkJCSAgIHVuc2lnbmVkIGludCBiYXNlLAotCQkJCQkJCSAgIEkyT0lPUCAqKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9NYWtlZmlsZSBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjVjYTI2Li4wMDAwMDAwCi0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgICAgICAgQ29weXJpZ2h0IE1vdG9yb2xhLCBJbmMuIDE5OTcKLSMgICAgICAgQUxMIFJJR0hUUyBSRVNFUlZFRAotIwotIyAgICAgICBZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZAotIyAgICAgICBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRSBzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZAotIyAgICAgICB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vciByZWRpc3RyaWJ1dGVkIHZlcnNpb25zLAotIyAgICAgICBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KLSMgICAgICAgTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlcgotIyAgICAgICBhbnkgcGF0ZW50cyBvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCi0jCi0jICAgICAgIFRoZSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgotIyAgICAgICBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBNT1RPUk9MQSBESVNDTEFJTVMKLSMgICAgICAgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBJTVBMSUVECi0jICAgICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyAgICAgICBQVVJQT1NFIEFORCBBTlkgV0FSUkFOVFkgQUdBSU5TVCBJTkZSSU5HRU1FTlQgV0lUSAotIyAgICAgICBSRUdBUkQgVE8gVEhFIFNPRlRXQVJFIChJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TCi0jICAgICAgIFRIRVJFT0YpIEFORCBBTlkgQUNDT01QQU5ZSU5HIFdSSVRURU4gTUFURVJJQUxTLgotIwotIyAgICAgICBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBJTiBOTyBFVkVOVCBTSEFMTAotIyAgICAgICBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKLSMgICAgICAgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YKLSMgICAgICAgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTCi0jICAgICAgIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykgQVJJU0lORyBPRiBUSEUgVVNFIE9SCi0jICAgICAgIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotVEFSR0VUID0gbGliaTJvLmEKLQotI0RFQlVHICA9IC1nCi1ERUJVRyAgID0KLUxTVCAgICAgPSAtSGFubm8gLVMKLU9QVElNICAgPQotQ0MgICAgICA9IC9yaXNjL3Rvb2xzL3BrZ3MvbWV0YXdhcmUvYmluL2hjcHBjCi1DRkxBR1MgID0gLUhub2NvcHlyIC1jIC1Ic2RzIC1Ib249Q2hhcl9kZWZhdWx0X3Vuc2lnbmVkIC1Ib249Q2hhcl9pc19yZXAgLUkuLi9pbmMgLUkvcmlzYy90b29scy9wa2dzL21ldGF3YXJlL2luYwotQ0NvYmogICA9ICQoQ0MpICQoQ0ZMQUdTKSAkKERFQlVHKSAkKE9QVElNKQotUFJFUCAgICA9ICQoQ0MpICQoQ0ZMQUdTKSAtUAotCi0jIEFzc2VtYmxlciB1c2VkIHRvIGJ1aWxkIHRoZSAucyBmaWxlcyAoZm9yIHRoZSBib2FyZCB2ZXJzaW9uKQotCi1BU09QVCAgID0gLWJpZ19zaSAtYwotQVNERUJVRyAgPSAtbCAtZm0KLUFTICAgICAgPSAvcmlzYy90b29scy9wa2dzL21ldGF3YXJlL2Jpbi9hc3BwYwotCi0jIExpbmtlciB0byBicmluZyAubyBmaWxlcyB0b2dldGhlciBpbnRvIGFuIGV4ZWN1dGFibGUuCi0KLUxLT1BUCT0gIC1CYmFzZT0wIC1RbiAtcSAtcgotTEtDTUQgICAgPQotTElOSyAgICA9ICAvcmlzYy90b29scy9wa2dzL21ldGF3YXJlL2Jpbi9sZHBwYyAkKExLQ01EKSAkKExLT1BUKQotCi0jIERPUyBVdGlsaXRpZXMKLQotREVMICAgICA9IHJtCi1DT1BZICAgID0gY3AKLUxJU1QgICAgPSBscwotCi1PQkpFQ1RTID0gaTJvMS5vIGkybzIubwotCi1hbGw6ICQoVEFSR0VUKQotCi0kKFRBUkdFVCk6ICQoT0JKRUNUUykKLQkkKExJTkspICQoT0JKRUNUUykgLW8gJEAKLQotb2JqZWN0czogaTJvMS5vCi0KLWNsZWFuOgotCSQoREVMKSAtZiAqLm8gKi5pICoubWFwICoubHN0ICQoVEFSR0VUKSAkKE9CSkVDVFMpCi0KLS5zLm86Ci0JJChERUwpIC1mICQqLmkKLQkkKFBSRVApIC1IYXNtY3BwICQ8Ci0JJChBUykgJChBU09QVCkgJCouaQotIwkkKEFTKSAkKEFTT1BUKSAkKEFTREVCVUcpICQqLmkgPiAkKi5sc3QKLQotLmMubzoKLQkkKENDb2JqKSAkPAotCi0uYy5zOgotCSQoQ0NvYmopICQoTFNUKSAkPAotCi1pMm8xLm86IGkyby5oIGkybzEuYwotCi1pMm8yLm86IGkyby5oIGkybzIucwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vTWFrZWZpbGVfcGMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9NYWtlZmlsZV9wYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg2N2Y1OC4uMDAwMDAwMAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9NYWtlZmlsZV9wYworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgbWFrZWZpbGVfcGMgZm9yIHVzZSB3aXRoIFBDIG1rc250IHRvb2xzICAgZGluazMyL2RyaXZlcnMvaTJvCi0jCi0jICAgICAgIENvcHlyaWdodCBNb3Rvcm9sYSwgSW5jLiAxOTk3Ci0jICAgICAgIEFMTCBSSUdIVFMgUkVTRVJWRUQKLSMKLSMgICAgICAgWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQKLSMgICAgICAgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUgc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQKLSMgICAgICAgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IgcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywKLSMgICAgICAgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCi0jICAgICAgIE5vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIKLSMgICAgICAgYW55IHBhdGVudHMgb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgotIwotIyAgICAgICBUaGUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KLSMgICAgICAgVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgTU9UT1JPTEEgRElTQ0xBSU1TCi0jICAgICAgIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgSU1QTElFRAotIyAgICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgICAgICAgUFVSUE9TRSBBTkQgQU5ZIFdBUlJBTlRZIEFHQUlOU1QgSU5GUklOR0VNRU5UIFdJVEgKLSMgICAgICAgUkVHQVJEIFRPIFRIRSBTT0ZUV0FSRSAoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUwotIyAgICAgICBUSEVSRU9GKSBBTkQgQU5ZIEFDQ09NUEFOWUlORyBXUklUVEVOIE1BVEVSSUFMUy4KLSMKLSMgICAgICAgVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgSU4gTk8gRVZFTlQgU0hBTEwKLSMgICAgICAgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCi0jICAgICAgIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GCi0jICAgICAgIEJVU0lORVNTIFBST0ZJVFMsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUwotIyAgICAgICBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpIEFSSVNJTkcgT0YgVEhFIFVTRSBPUgotIyAgICAgICBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVRBUkdFVCA9IGxpYmkyby5hCi0KLSNERUJVRyAgPSAtZwotREVCVUcgICA9Ci1MU1QgICAgID0gLUhhbm5vIC1TCi1PUFRJTSAgID0KLUNDICAgICAgPSBtOi9vbGRfdG9vbHMvdG9vbHMvaGNwcGMvYmluL2hjcHBjCi1DRkxBR1MgID0gLUhub2NvcHlyIC1jIC1Ic2RzIC1Ib249Q2hhcl9kZWZhdWx0X3Vuc2lnbmVkIC1Ib249Q2hhcl9pc19yZXAgLUkuLi9pbmMgLUkvcmlzYy90b29scy9wa2dzL21ldGF3YXJlL2luYwotQ0NvYmogICA9ICQoQ0MpICQoQ0ZMQUdTKSAkKERFQlVHKSAkKE9QVElNKQotUFJFUCAgICA9ICQoQ0MpICQoQ0ZMQUdTKSAtUAotCi0jIEFzc2VtYmxlciB1c2VkIHRvIGJ1aWxkIHRoZSAucyBmaWxlcyAoZm9yIHRoZSBib2FyZCB2ZXJzaW9uKQotCi1BU09QVCAgID0gLWJpZ19zaSAtYwotQVNERUJVRyAgPSAtbCAtZm0KLUFTICAgICAgPSBtOi9vbGRfdG9vbHMvdG9vbHMvaGNwcGMvYmluL2FzcHBjCi0KLSMgTGlua2VyIHRvIGJyaW5nIC5vIGZpbGVzIHRvZ2V0aGVyIGludG8gYW4gZXhlY3V0YWJsZS4KLQotTEtPUFQJPSAgLUJiYXNlPTAgLVFuIC1xIC1yCi1MS0NNRCAgICA9Ci1MSU5LICAgID0gbTovb2xkX3Rvb2xzL3Rvb2xzL2hjcHBjL2Jpbi9sZHBwYyAkKExLQ01EKSAkKExLT1BUKQotCi0jIERPUyBVdGlsaXRpZXMKLQotREVMICAgICA9IHJtCi1DT1BZICAgID0gY3AKLUxJU1QgICAgPSBscwotCi1PQkpFQ1RTID0gaTJvMS5vIGkybzIubwotCi1hbGw6ICQoVEFSR0VUKQotCi0kKFRBUkdFVCk6ICQoT0JKRUNUUykKLQkkKExJTkspICQoT0JKRUNUUykgLW8gJEAKLQotb2JqZWN0czogaTJvMS5vCi0KLWNsZWFuOgotCSQoREVMKSAtZiAqLm8gKi5pICoubWFwICoubHN0ICQoVEFSR0VUKSAkKE9CSkVDVFMpCi0KLS5zLm86Ci0JJChERUwpIC1mICQqLmkKLQkkKFBSRVApIC1IYXNtY3BwICQ8Ci0JJChBUykgJChBU09QVCkgJCouaQotIwkkKEFTKSAkKEFTT1BUKSAkKEFTREVCVUcpICQqLmkgPiAkKi5sc3QKLQotLmMubzoKLQkkKENDb2JqKSAkPAotCi0uYy5zOgotCSQoQ0NvYmopICQoTFNUKSAkPAotCi1pMm8xLm86IGkyby5oIGkybzEuYwotCSQoQ0NvYmopICQ8Ci0KLWkybzIubzogaTJvLmggaTJvMi5zCi0JJChERUwpIC1mICQqLmkKLQkkKFBSRVApIC1IYXNtY3BwICQ8Ci0JJChBUykgJChBU09QVCkgJCouaQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvLmggYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE1NzJiMi4uMDAwMDAwMAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDM0NSArMCwwIEBACi0jaWZuZGVmIEkyT19ICi0jZGVmaW5lIEkyT19ICi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogY29weXJpZ2h0IEAgTW90b3JvbGEsIDE5OTkKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIEkyT19SRUdfT0ZGU0VUIDB4MDAwNAotCi0jZGVmaW5lIFBDSV9DRkdfQ0xBICAgIDB4MEIKLSNkZWZpbmUgUENJX0NGR19TQ0wgICAgMHgwQQotI2RlZmluZSBQQ0lfQ0ZHX1BJQyAgICAweDA5Ci0KLSNkZWZpbmUgSTJPX0lNUjAgMHgwMDUwCi0jZGVmaW5lIEkyT19JTVIxIDB4MDA1NAotI2RlZmluZSBJMk9fT01SMCAweDAwNTgKLSNkZWZpbmUgSTJPX09NUjEgMHgwMDVDCi0KLSNkZWZpbmUgSTJPX09EQlIgMHgwMDYwCi0jZGVmaW5lIEkyT19JREJSIDB4MDA2OAotCi0jZGVmaW5lIEkyT19PTUlTUiAgMHgwMDMwCi0jZGVmaW5lIEkyT19PTUlNUiAgMHgwMDM0Ci0jZGVmaW5lIEkyT19JTUlTUiAgMHgwMTAwCi0jZGVmaW5lIEkyT19JTUlNUiAgMHgwMTA0Ci0KLS8qIGFjY2Vzc2FibGUgdG8gUENJIG1hc3RlciBidXQgbG9jYWwgcHJvY2Vzc29yICovCi0jZGVmaW5lIEkyT19JRlFQUiAgMHgwMDQwCi0jZGVmaW5lIEkyT19PRlFQUiAgMHgwMDQ0Ci0KLS8qIGFjY2Vzc2FibGUgdG8gbG9jYWwgcHJvY2Vzc29yICovCi0jZGVmaW5lIEkyT19JRkhQUiAgMHgwMTIwCi0jZGVmaW5lIEkyT19JRlRQUiAgMHgwMTI4Ci0jZGVmaW5lIEkyT19JUEhQUiAgMHgwMTMwCi0jZGVmaW5lIEkyT19JUFRQUiAgMHgwMTM4Ci0jZGVmaW5lIEkyT19PRkhQUiAgMHgwMTQwCi0jZGVmaW5lIEkyT19PRlRQUiAgMHgwMTQ4Ci0jZGVmaW5lIEkyT19PUEhQUiAgMHgwMTUwCi0jZGVmaW5lIEkyT19PUFRQUiAgMHgwMTU4Ci0jZGVmaW5lIEkyT19NVUNSICAgMHgwMTY0Ci0jZGVmaW5lIEkyT19RQkFSICAgMHgwMTcwCi0KLSNkZWZpbmUgSTJPX05VTV9NU0cgMgotCi10eXBlZGVmIGVudW0gX2kyb19zdGF0dXMKLXsKLQlJMk9TVUNDRVNTID0gMCwKLQlJMk9JTlZBTElELAotCUkyT01TR0lOVkFMSUQsCi0JSTJPREJJTlZBTElELAotCUkyT1FVRUlOVkFMSUQsCi0JSTJPUVVFRU1QVFksCi0JSTJPUVVFRlVMTCwKLQlJMk9OT0VWRU5ULAotfSBJMk9TVEFUVVM7Ci0KLXR5cGVkZWYgZW51bSBfcXVldWVfc2l6ZQotewotICAgIFFTSVpFXzRLID0gMHgwMiwKLSAgICBRU0laRV84SyA9IDB4MDQsCi0gICAgUVNJWkVfMTZLID0gMHgwOCwKLSAgICBRU0laRV8zMksgPSAweDEwLAotICAgIFFTSVplXzY0SyA9IDB4MjAsCi19IFFVRVVFX1NJWkU7Ci0KLXR5cGVkZWYgZW51bSBfbG9jYXRpb24KLXsKLSAgICBMT0NBTCA9IDAsICAgICAvKiB1c2VkIGJ5IGxvY2FsIHByb2Nlc3NvciB0byBhY2Nlc3MgaXRzIG93biBvbiBib2FyZCBkZXZpY2UsCi0JCSAgICAgIGxvY2FsIHByb2Nlc3NvcidzIGV1bWJiYXIgaXMgcmVxdWlyZWQgKi8KLSAgICBSRU1PVEUsICAgICAgICAvKiB1c2VkIGJ5IFBDSSBtYXN0ZXIgdG8gYWNjZXNzIHRoZSBkZXZpY2VzIG9uIGl0cyBQQ0kgZGV2aWNlLAotCQkgICAgICBkZXZpY2UncyBwY3NyYmFyIGlzIHJlcXVpcmVkICovCi19IExPQ0FUSU9OOwotCi0vKiBkb29yIGJlbGwgKi8KLXR5cGVkZWYgZW51bSBfaTJvX2luX2RiCi17Ci0gIElOX0RCID0gMSwKLSAgTUMsICAgICAgICAgLyogbWFjaGluZSBjaGVjayAqLwotfSBJMk9fSU5fREI7Ci0KLS8qIEkyTyBQQ0kgY29uZmlndXJhdGlvbiBpZGVudGlmaWNhdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgX2kyb19pb3AKLXsKLQl1bnNpZ25lZCBpbnQgYmFzZV9jbGFzcyA6IDg7Ci0JdW5zaWduZWQgaW50IHN1Yl9jbGFzcyAgOiA4OwotCXVuc2lnbmVkIGludCBwcmdfY29kZSAgIDogODsKLX0gSTJPSU9QOwotCi0vKiBJMk8gT3V0Ym91bmQgTWVzc2FnZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi10eXBlZGVmIHN0cnVjdCBfaTJvX29tX3N0YXQKLXsKLQl1bnNpZ25lZCBpbnQgcnN2ZDAgOiAyNjsKLQl1bnNpZ25lZCBpbnQgb3BxaSAgOiAxOwotCXVuc2lnbmVkIGludCByc3ZkMSA6IDE7Ci0JdW5zaWduZWQgaW50IG9kaSAgIDogMTsKLQl1bnNpZ25lZCBpbnQgcnN2ZDIgOiAxOwotCXVuc2lnbmVkIGludCBvbTFpICA6IDE7Ci0JdW5zaWduZWQgaW50IG9tMGkgIDogMTsKLX0gSTJPT01TVEFUOwotCi0vKiBJMk8gaW5ib3VuZCBNZXNzYWdlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLXR5cGVkZWYgc3RydWN0IF9pMm9faW1fc3RhdAotewotCXVuc2lnbmVkIGludCByc3ZkMCA6IDIzOwotCXVuc2lnbmVkIGludCBvZm9pICA6IDE7Ci0JdW5zaWduZWQgaW50IGlwb2kgIDogMTsKLQl1bnNpZ25lZCBpbnQgcnN2ZDEgOiAxOwotCXVuc2lnbmVkIGludCBpcHFpICA6IDE7Ci0JdW5zaWduZWQgaW50IG1jaSAgIDogMTsKLQl1bnNpZ25lZCBpbnQgaWRpICAgOiAxOwotCXVuc2lnbmVkIGludCByc3ZkMiA6IDE7Ci0JdW5zaWduZWQgaW50IGltMWkgIDogMTsKLQl1bnNpZ25lZCBpbnQgaW0waSAgOiAxOwotfSBJMk9JTVNUQVQ7Ci0KLS8qKgotIEVuYWJsZSB0aGUgaW50ZXJydXB0IGFzc29jaWF0ZWQgd2l0aCBpbi9vdXQgYm91bmQgbXNnCi0KLSBJbmJvdW5kIG1lc3NhZ2UgaW50ZXJydXB0IGdlbmVyYXRlZCBieSBQQ0kgbWFzdGVyIGFuZCBzZXJ2aWNlZCBieSBsb2NhbCBwcm9jZXNzb3IKLSBsb2NhbCBwcm9jZXNzb3IgbmVlZHMgdG8gZW5hYmxlIGl0cyBpbmJvdW5kIGludGVycnVwdHMgaXQgd2FudHMgdG8gaGFuZGxlIChMT0NBTCkKLQotIE91dGJvdW5kIG1lc3NhZ2UgaW50ZXJydXB0IGdlbmVyYXRlZCBieSBsb2NhbCBwcm9jZXNzb3IgYW5kIHNlcnZpY2VkIGJ5IFBDSSBtYXN0ZXIKLSBQQ0kgbWFzdGVyIG5lZWRzIHRvIGVuYWJsZSB0aGUgZGV2aWNlcycgb3V0Ym91bmQgaW50ZXJydXB0cyBpdCB3YW50cyB0byBoYW5kbGUgKFJFTU9URSkKLSAqKi8KLWV4dGVybiBJMk9TVEFUVVMgSTJPTXNnRW5hYmxlKCBMT0NBVElPTiwgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG4gKTsgICAvKiBiJzEnIC0gbXNnIDAKLQkJCQkJCQkJCSAgICAgKiBiJzEwJy0gbXNnIDEKLQkJCQkJCQkJCSAgICAgKiBiJzExJy0gYm90aAotCQkJCQkJCQkJICAgICAqLwotCi0vKioKLSBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIGluL291dCBib3VuZCBtc2cKLQotIGxvY2FsIHByb2Nlc3NvciBuZWVkcyB0byBkaXNhYmxlIGl0cyBpbmJvdW5kIGludGVycnVwdHMgaXQgaXMgbm90IGludGVyZXN0ZWQgKExPQ0FMKQotCi0gUENJIG1hc3RlciBuZWVkcyB0byBkaXNhYmxlIG91dGJvdW5kIGludGVycnVwdHMgb2YgZGV2aWNlcyBpdCBpcyBub3QgaW50ZXJlc3RlZCAoUkVNT1RFKQotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dEaXNhYmxlKCBMT0NBVElPTiwgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0JCQkJdW5zaWduZWQgaW50IGJhc2UsIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotCQkJCXVuc2lnbmVkIGNoYXIgbiApOyAvKiBiJzEnIC0gbXNnIDAKLQkJCQkJCQkJCSAgICAqIGInMTAnLSBtc2cgMQotCQkJCQkJCQkJICAgICogYicxMSctIGJvdGgKLQkJCQkJCQkJCSAgICAqLwotCi0vKioKLSBSZWFkIHRoZSBtc2cgcmVnaXN0ZXIgZWl0aGVyIGZyb20gbG9jYWwgaW5ib3VuZCBtc2cgMC8xLAotIG9yIGFuIG91dGJvdW5kIG1zZyAwLzEgb2YgZGV2aWNlcy4KLQotIElmIGl0IGlzIG5vdCBsb2NhbCwgcGNzcmJhciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCi0gT3RoZXJ3aXNlIGV1bWJiYXIgaXMgcGFzc2VkLgotCi0gSWYgaXQgaXMgcmVtb3RlLCBvdXRib3VuZCBtc2cgb2YgdGhlIGRldmljZSBpcyByZWFkLgotIE90aGVyd2lzZSBsb2NhbCBpbmJvdW5kIG1zZyBpcyByZWFkLgotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dHZXQgKCBMT0NBVElPTiwgICAgICAgICAgICAgICAgIC8qIFJFTU9URS9MT0NBTCAqLwotCQkJICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCi0JCQkgICAgIHVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCi0JCQkgICAgIHVuc2lnbmVkIGludCAqbXNnICk7Ci0KLS8qKgotIFdyaXRlIHRvIG50aCBNc2cgcmVnaXN0ZXIgZWl0aGVyIG9uIGxvY2FsIG91dGJvdW5kIG1zZyAwLzEsCi0gb3IgYW5pbmJvdW5kIG1zZyAwLzEgb2YgZGV2aWNlcwotCi0gSWYgaXQgaXMgbm90IGxvY2FsLCBwY3NyYmFyIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KLSBPdGhlcndpc2UgZXVtYmJhciBpcyBwYXNzZWQuCi0KLSBJZiBpdCBpcyByZW1vdGUsIGluYm91bmQgbXNnIG9uIHRoZSBkZXZpY2UgaXMgd3JpdHRlbi4KLSBPdGhlcndpc2UgbG9jYWwgb3V0Ym91bmQgbXNnIGlzIHdyaXR0ZW4uCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT01zZ1Bvc3QoIExPQ0FUSU9OLCAgICAgICAgICAgICAgICAgLyogUkVNT1RFL0xPQ0FMICovCi0JCQkJdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLwotCQkJCXVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCi0JCQkJdW5zaWduZWQgaW50IG1zZyApOwotCi0vKioKLSBFbmFibGUgdGhlIEluL091dCBEb29yQmVsbCBJbnRlcnJ1cHQKLQotIEluRG9vckJlbGwgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSBQQ0kgbWFzdGVyIGFuZCBzZXJ2aWNlZCBieSBsb2NhbCBwcm9jZXNzb3IKLSBsb2NhbCBwcm9jZXNzb3IgbmVlZHMgdG8gZW5hYmxlIGl0cyBpbmJvdW5kIGRvb3JiZWxsIGludGVycnVwdHMgaXQgd2FudHMgdG8gaGFuZGxlCi0KLSBPdXREb29yYmVsbCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IGxvY2FsIHByb2Nlc3NvciBhbmQgc2VydmljZWQgYnkgUENJIG1hc3RlcgotIFBDSSBtYXN0ZXIgbmVlZHMgdG8gZW5hYmxlIG91dGJvdW5kIGRvb3JiZWxsIGludGVycnVwdHMgb2YgdGhlIGRldmljZXMgaXQgd2FudHMgdG8gaGFuZGxlCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT0RCRW5hYmxlKCBMT0NBVElPTiwgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLQkJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotCQkJICAgICAgdW5zaWduZWQgaW50IGluX2RiICk7Lyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCi0KLS8qKgotIERpc2FibGUgdGhlIEluL091dCBEb29yQmVsbCBJbnRlcnJ1cHQKLQotIGxvY2FsIHByb2Nlc3NvciBuZWVkcyB0byBkaXNhYmxlIGl0cyBpbmJvdW5kIGRvb3JiZWxsIGludGVycnVwdHMgaXQgaXMgbm90IGludGVyZXN0ZWQKLQotIFBDSSBtYXN0ZXIgbmVlZHMgdG8gZGlzYWJsZSBvdXRib3VuZCBkb29yYmVsbCBpbnRlcnJ1cHRzIG9mIGRldmljZXMgaXQgaXMgbm90IGludGVyZXN0ZWQKLQotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9EQkRpc2FibGUoIExPQ0FUSU9OLCAgICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKTsgIC8qIHdoZW4gTE9DQUwsIEkyT19JTl9EQiwgTUMsIEkyT19JTl9EQnxNQyAqLwotCi0vKioKLSBSZWFkIGEgbG9jYWwgaW5kb29yYmVsbCByZWdpc3Rlciwgb3IgYW4gb3V0ZG9vcmJlbGwgb2YgZGV2aWNlcy4KLSBSZWFkaW5nIGEgZG9vcmJlbGwgcmVnaXN0ZXIsIHRoZSByZWdpc3RlciB3aWxsIGJlIGNsZWFyZWQuCi0KLSBJZiBpdCBpcyBub3QgbG9jYWwsIHBjc3JiYXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgotIE90aGVyd2lzZSBldW1iYmFyIGlzIHBhc3NlZC4KLQotIElmIGl0IGlzIHJlbW90ZSwgb3V0ZG9vcmJlbGwgcmVnaXN0ZXIgb24gdGhlIGRldmljZSBpcyByZWFkLgotIE90aGVyd2lzZSBsb2NhbCBpbiBkb29yYmVsbCBpcyByZWFkCi0gKiovCi1leHRlcm4gdW5zaWduZWQgaW50IEkyT0RCR2V0KCBMT0NBVElPTiwgICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgYmFzZSk7ICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0KLS8qKgotIFdyaXRlIHRvIGEgbG9jYWwgb3V0ZG9vcmJlbGwgcmVnaXN0ZXIsIG9yIGFuIGluZG9vcmJlbGwgcmVnaXN0ZXIgb2YgZGV2aWNlcy4KLQotIElmIGl0IGlzIG5vdCBsb2NhbCwgcGNzcmJhciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCi0gT3RoZXJ3aXNlIGV1bWJiYXIgaXMgcGFzc2VkLgotCi0gSWYgaXQgaXMgcmVtb3RlLCBpbiBkb29yYmVsbCByZWdpc3RlciBvbiB0aGUgZGV2aWNlIGlzIHdyaXR0ZW4uCi0gT3RoZXJ3aXNlIGxvY2FsIG91dCBkb29yYmVsbCBpcyB3cml0dGVuCi0gKiovCi1leHRlcm4gdm9pZCBJMk9EQlBvc3QoIExPQ0FUSU9OLCAgICAgICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotCQkgICAgICAgdW5zaWduZWQgaW50IG1zZyApOyAgICAgICAvKiAgIGluICAgLyBvdXQgICAgKi8KLQotLyoqCi0gUmVhZCB0aGUgb3V0Ym91bmQgbXNnIHVuaXQgaW50ZXJydXB0IHN0YXR1cyBvZiBkZXZpY2VzLiBSZWFkaW5nIGFuIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsCi0gdGhlIHJlZ2lzdGVyIHdpbGwgYmUgY2xlYXJlZC4KLQotIFRoZSBvdXRib3VuZCBpbnRlcnJ1cHQgc3RhdHVzIGlzIEFORCB3aXRoIHRoZSBvdXRib3VuZAotIGludGVycnVwdCBtYXNrLiBUaGUgcmVzdWx0IGlzIHJldHVybmVkLgotCi0gUENJIG1hc3RlciBtdXN0IHBhc3MgdGhlIHBjc3JiYXIgdG8gdGhlIGZ1bmN0aW9uLgotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9PdXRNc2dTdGF0R2V0KCB1bnNpZ25lZCBpbnQgcGNzcmJhciwgSTJPT01TVEFUICogKTsKLQotLyoqCi0gUmVhZCB0aGUgaW5ib3VuZCBtc2cgdW5pdCBpbnRlcnJ1cHQgc3RhdHVzLiBSZWFkaW5nIGFuIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsCi0gdGhlIHJlZ2lzdGVyIHdpbGwgYmUgY2xlYXJlZC4KLQotIFRoZSBpbmJvdW5kIGludGVycnVwdCBzdGF0dXMgaXMgQU5EIHdpdGggdGhlIGluYm91bmQKLSBpbnRlcnJ1cHQgbWFzay4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZC4KLQotIExvY2FsIHByb2Nlc3MgbXVzdCBwYXNzIGl0cyBldW1iYmFyIHRvIHRoZSBmdW5jdGlvbi4KLSoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9Jbk1zZ1N0YXRHZXQoIHVuc2lnbmVkIGludCBldW1iYmFyLCBJMk9JTVNUQVQgKiApOwotCi0vKioKLSBDb25maWd1cmUgdGhlIEkyTyBGSUZPLCBpbmNsdWRpbmcgUUJBUiwgSUZIUFIvSUZUUFIsSVBIUFIvSVBUUFIsT0ZIUFIvT0ZUUFIsIE9QSFBSL09QVFBSLAotIE1VQ1IuCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9Jbml0KCB1bnNpZ25lZCBpbnQgZXVtYmJhciwKLQkJCQkJICAgICAgUVVFVUVfU0laRSwKLQkJCQkJICAgICAgdW5zaWduZWQgaW50IHFiYSk7LyogcXVldWUgYmFzZSBhZGRyZXNzIHRoYXQgbXVzdCBiZSBhbGlnbmVkIGF0IDFNICovCi0vKioKLSBFbmFibGUgdGhlIGNpcmN1bGFyIHF1ZXVlCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9FbmFibGUoIHVuc2lnbmVkIGludCBldW1iYmFyICk7Ci0KLS8qKgotIERpc2FibGUgdGhlIGNpcmN1bGFyIHF1ZXVlCi0gKiovCi1leHRlcm4gdm9pZCBJMk9GSUZPRGlzYWJsZSggdW5zaWduZWQgaW50IGV1bWJiYXIgKTsKLQotLyoqCi0gRW5hYmxlIHRoZSBjaXJjdWxhciBxdWV1ZSBpbnRlcnJ1cHQKLSBQQ0kgbWFzdGVyIGVuYWJsZXMgb3V0Ym91bmQgRklGTyBpbnRlcnJ1cHQgb2YgZGV2aWNlCi0gRGV2aWNlIGVuYWJsZXMgaXRzIGluYm91bmQgRklGTyBpbnRlcnJ1cHQKLSAqKi8KLWV4dGVybiB2b2lkIEkyT0ZJRk9JbnRFbmFibGUoIExPQ0FUSU9OLCB1bnNpZ25lZCBpbnQgYmFzZSAgKTsKLQotLyoqCi0gRGlzYWJsZSB0aGUgY2lyY3VsYXIgcXVldWUgaW50ZXJydXB0Ci0gUENJIG1hc3RlciBkaXNhYmxlcyBvdXRib3VuZCBGSUZPIGludGVycnVwdCBvZiBkZXZpY2UKLSBEZXZpY2UgZGlzYWJsZXMgaXRzIGluYm91bmQgRklGTyBpbnRlcnJ1cHQKLSAqKi8KLWV4dGVybiB2b2lkIEkyT0ZJRk9JbnREaXNhYmxlKCBMT0NBVElPTiwgdW5zaWduZWQgaW50IGJhc2UgKTsKLQotLyoqCi0gRW5hYmxlIHRoZSBjaXJjdWxhciBxdWV1ZSBvdmVyZmxvdyBpbnRlcnJ1cHQKLSAqKi8KLWV4dGVybiB2b2lkIEkyT0ZJRk9PdmVyZmxvd0ludEVuYWJsZSggdW5zaWduZWQgaW50IGV1bWJiYXIgKTsKLQotLyoqCi0gRGlzYWJsZSB0aGUgY2lyY3VsYXIgcXVldWUgb3ZlcmZsb3cgaW50ZXJydXB0Ci0gKiovCi1leHRlcm4gdm9pZCBJMk9GSUZPT3ZlcmZsb3dJbnREaXNhYmxlKCB1bnNpZ25lZCBpbnQgZXVtYmJhciApOwotCi0vKioKLSBBbGxvY2F0ZSBhIGZyZWUgbXNnIGZyYW1lIGZyb20gZnJlZSBGSUZPLgotCi0gUENJIE1hc3RlciBhbGxvY2F0ZXMgYSBmcmVlIG1zZyBmcmFtZSB0aHJvdWdoIGluYm91bmQgcXVldWUgcG9ydCBvZiBkZXZpY2UoSUZRUFIpCi0gd2hpbGUgbG9jYWwgcHJvY2Vzc29yIGFsbG9jYXRlcyBhIGZyZWUgbXNnIGZyYW1lIGZyb20gb3V0Ym91bmQgZnJlZSBxdWV1ZShPRlRQUikKLQotIFVubGVzcyBib3RoIGZyZWUgcXVldWVzIGFyZSBpbml0aWFsaXplZCwgYWxsb2NhdGluZyBhIGZyZWUgTUYgd2lsbCByZXR1cm4gMHhmZmZmZmZmZgotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPQWxsb2MoIExPQ0FUSU9OLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCQkJCSAgICAgICB2b2lkICAgICAgICAgKipwTXNnKTsKLS8qKgotIEZyZWUgYSB1c2VkIG1zZyBmcmFtZSBiYWNrIHRvIGZyZWUgcXVldWUKLSBQQ0kgTWFzdGVyIGZyZWVzIGEgTUZBIHRocm91Z2ggb3V0Ym91bmQgcXVldWUgcG9ydCBvZiBkZXZpY2UoT0ZRUFIpCi0gd2hpbGUgbG9jYWwgcHJvY2Vzc29yIGZyZWVzIGEgTUZBIGludG8gaXRzIGluYm91bmQgZnJlZSBxdWV1ZShJRkhQUikKLQotIFVzZWQgbXNnIGZyYW1lIGRvZXMgbm90IG5lZWQgdG8gYmUgcmVjeWNsZWQgaW4gdGhlIG9yZGVyIHRoZXkKLSByZWFkCi0KLSBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYnkgUENJIG1hc3RlciB0byBpbml0aWFsaXplIEluYm91bmQgZnJlZSBxdWV1ZQotIGFuZCBieSBkZXZpY2UgdG8gaW5pdGlhbGl6ZSBPdXRib3VuZCBmcmVlIHF1ZXVlIGJlZm9yZSBJMk9GSUZPQWxsb2MgY2FuIGJlIHVzZWQuCi0gKiovCi1leHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9GcmVlKCBMT0NBVElPTiwKLQkJCQkJICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCQkJICB2b2lkICAgICAgICAqcE1zZyApOwotCi0vKioKLSBQb3N0IGEgbXNnIGludG8gRklGTwotIFBDSSBNYXN0ZXIgcG9zdHMgYSBtc2cgdGhyb3VnaCBpbmJvdW5kIHF1ZXVlIHBvcnQgb2YgZGV2aWNlKElGUVBSKQotIHdoaWxlIGxvY2FsIHByb2Nlc3NvciBwb3N0IGEgbXNnIGludG8gaXRzIG91dGJvdW5kIHBvc3QgcXVldWUoT1BIUFIpCi0KLSBUaGUgdG90YWwgbnVtYmVyIG9mIG1zZyBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbWF4IHNpemUgb2YgdGhlIHF1ZXVlCi0gT3RoZXJ3aXNlIHF1ZXVlIG92ZXJmbG93IGludGVycnVwdCB3aWxsIGFzc2VydC4KLSAqKi8KLWV4dGVybiBJMk9TVEFUVVMgSTJPRklGT1Bvc3QoIExPQ0FUSU9OLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlLAotCQkJCSAgICAgIHZvaWQgICAgICAgICAqcE1zZyApOwotCi0vKioKLSBSZWFkIGEgbXNnIGZyb20gRklGTwotIFBDSSBNYXN0ZXIgcmVhZHMgYSBtc2cgdGhyb3VnaCBvdXRib3VuZCBxdWV1ZSBwb3J0IG9mIGRldmljZShPRlFQUikKLSB3aGlsZSBsb2NhbCBwcm9jZXNzb3IgcmVhZHMgYSBtc2cgZnJvbSBpdHMgaW5ib3VuZCBwb3N0IHF1ZXVlKElQVFBSKQotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPR2V0KCBMT0NBVElPTiwKLQkJCQkJICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCQkJCQkgIHZvaWQgICAgICoqcE1zZyApOwotCi0vKioKLSBHZXQgdGhlIEkyTyBQQ0kgY29uZmlndXJhdGlvbiBpZGVudGlmaWNhdGlvbiByZWdpc3RlcgotICoqLwotZXh0ZXJuIEkyT1NUQVRVUyBJMk9QQ0lDb25maWdHZXQoIExPQ0FUSU9OLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCQkJCQkgICBJMk9JT1AgKik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMS5jIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDU4MTUxLi4wMDAwMDAwCi0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL2kybzEuYworKysgL2Rldi9udWxsCkBAIC0xLDg5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAkSWQKLSAqCi0gKiBjb3B5cmlnaHQgQCBNb3Rvcm9sYSwgMTk5OQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJpMm8uaCIKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBsb2FkX3J1bnRpbWVfcmVnKCB1bnNpZ25lZCBpbnQgZXVtYmJhciwgdW5zaWduZWQgaW50IHJlZyApOwotI3ByYWdtYSBBbGlhcyggbG9hZF9ydW50aW1lX3JlZywgImxvYWRfcnVudGltZV9yZWciICk7Ci0KLWV4dGVybiB2b2lkIHN0b3JlX3J1bnRpbWVfcmVnKCB1bnNpZ25lZCBpbnQgZXVtYmJhciwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCApOwotI3ByYWdtYSBBbGlhcyggc3RvcmVfcnVudGltZV9yZWcsICJzdG9yZV9ydW50aW1lX3JlZyIgKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX2ZpZm9fc3RhdAotewotICAgIFFVRVVFX1NJWkUgICBxc3o7Ci0gICAgdW5zaWduZWQgaW50IHFiYTsKLX0gRklGT1NUQVQ7Ci0KLUZJRk9TVEFUIGZpZm9fc3RhdCA9IHsgUVNJWkVfNEssIDB4ZmZmZmZmZmYgfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBJMk9Nc2dFbmFibGUKLSAqCi0gKiBkZXNjcmlwdGlvbjogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIGluL291dCBib3VuZCBtc2cKLSAqICAgICAgICAgICAgICByZXR1cm4gSTJPU1VDQ0VTUyBpZiBubyBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiBJMk9NU0dJTlZBTElELgotICoKLSAqICAgICAgICAgICAgICBBbGwgcHJldmlvdXNseSBlbmFibGVkIGludGVycnVwdHMgYXJlIHByZXNlcnZlZC4KLSAqIG5vdGU6Ci0gKiBJbmJvdW5kIG1lc3NhZ2UgaW50ZXJydXB0IGdlbmVyYXRlZCBieSBQQ0kgbWFzdGVyIGFuZCBzZXJ2aWNlZCBieSBsb2NhbCBwcm9jZXNzb3IKLSAqIE91dGJvdW5kIG1lc3NhZ2UgaW50ZXJydXB0IGdlbmVyYXRlZCBieSBsb2NhbCBwcm9jZXNzb3IgYW5kIHNlcnZpY2VkIGJ5IFBDSSBtYXN0ZXIKLSAqCi0gKiBsb2NhbCBwcm9jZXNzb3IgbmVlZHMgdG8gZW5hYmxlIGl0cyBpbmJvdW5kIGludGVycnVwdHMgaXQgd2FudHMgdG8gaGFuZGxlKExPQ0FMKQotICogUENJIG1hc3RlciBuZWVkcyB0byBlbmFibGUgdGhlIG91dGJvdW5kIGludGVycnVwdHMgb2YgZGV2aWNlcyBpdCB3YW50cyB0byBoYW5kbGUoUkVNT1RFKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUkyT1NUQVRVUyBJMk9Nc2dFbmFibGUgKCBMT0NBVElPTiBsb2MsICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLQkJCSB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLQkJCSB1bnNpZ25lZCBjaGFyIG4gKSAgICAvKiBiJzEnIC0gbXNnIDAKLQkJCQkJICAgICAgICogYicxMCctIG1zZyAxCi0JCQkJCSAgICAgICAqIGInMTEnLSBib3RoCi0JCQkJCSAgICAgICAqLwotewotICAgIHVuc2lnbmVkIGludCByZWcsIHZhbDsKLSAgICBpZiAoICggbiAmIDB4MyApID09IDAgKQotICAgIHsKLQkvKiBuZWl0aGVyIG1zZyAwLCBub3IgbXNnIDEgKi8KLQlyZXR1cm4gSTJPTVNHSU5WQUxJRDsKLSAgICB9Ci0KLSAgICBuID0gKH5uKSAmIDB4MzsKLSAgICAvKiBMT0NBVElPTiAtIFJFTU9URSA6IGVuYWJsZSBvdXRib3VuZCBtZXNzYWdlIG9mIGRldmljZSwgcGNzcmJhciBhcyBiYXNlCi0gICAgICogICAgICAgICAgICBMT0NBTCAgOiBlbmFibGUgbG9jYWwgaW5ib3VuZCBtZXNzYWdlLCBldW1iYmFyIGFzIGJhc2UKLSAgICAgKi8KLSAgICByZWcgPSAoIGxvYyA9PSBSRU1PVEUgPyBJMk9fT01JTVIgOiBJMk9fSU1JTVIgKTsKLSAgICB2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCByZWcgKTsKLQotICAgIHZhbCAmPSAweGZmZmZmZmZjOyAvKiBtYXNrZWQgb3V0IHRoZSBtc2cgaW50ZXJydXB0IGJpdHMgKi8KLSAgICB2YWwgfD0gbjsgICAgICAgICAgLyogTFNCIGFyZSB0aGUgb25lIHdlIHdhbnQgKi8KLSAgICBzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgcmVnLCB2YWwgKTsKLQotICAgIHJldHVybiBJMk9TVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPTXNnRGlzYWJsZQotICoKLSAqIGRlc2NyaXB0aW9uOiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIGluL291dCBib3VuZCBtc2cKLSAqICAgICAgICAgICAgICBPdGhlciBwcmV2aW91c2x5IGVuYWJsZWQgaW50ZXJydXB0cyBhcmUgcHJlc2VydmVkLgotICogICAgICAgICAgICAgIHJldHVybiBJMk9TVUNDRVNTIGlmIG5vIGVycm9yIG90aGVyd2lzZSByZXR1cm4gSTJPTVNHSU5WQUxJRAotICoKLSAqIG5vdGU6Ci0gKiAgbG9jYWwgcHJvY2Vzc29yIG5lZWRzIHRvIGRpc2FibGUgaXRzIGluYm91bmQgaW50ZXJydXB0cyBpdCBpcyBub3QgaW50ZXJlc3RlZChMT0NBTCkKLSAqICBQQ0kgbWFzdGVyIG5lZWRzIHRvIGRpc2FibGUgb3V0Ym91bmQgaW50ZXJydXB0cyBvZiBkZXZpY2VzIGl0IGlzIG5vdCBpbnRlcmVzdGVkKFJFTU9URSkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1JMk9TVEFUVVMgSTJPTXNnRGlzYWJsZSggTE9DQVRJT04gbG9jLCAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotCQkJIHVuc2lnbmVkIGludCBiYXNlLCAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLQkJCSB1bnNpZ25lZCBjaGFyIG4gKSAgLyogYicxJyAtIG1zZyAwCi0JCQkJCSAgICAgKiBiJzEwJy0gbXNnIDEKLQkJCQkJICAgICAqIGInMTEnLSBib3RoCi0JCQkJCSAgICAgKi8KLXsKLSAgICB1bnNpZ25lZCBpbnQgcmVnLCB2YWw7Ci0KLSAgICBpZiAoICggbiAmIDB4MyApID09IDAgKQotICAgIHsKLQkvKiBuZWl0aGVyIG1zZyAwLCBub3IgbXNnIDEgKi8KLQlyZXR1cm4gSTJPTVNHSU5WQUxJRDsKLSAgICB9Ci0KLSAgICAvKiBMT0NBVElPTiAtIFJFTU9URSA6IGRpc2FibGUgb3V0Ym91bmQgbWVzc2FnZSBpbnRlcnJ1cHQgb2YgZGV2aWNlLCBwY3NyYmFyIGFzIGJhc2UKLSAgICAgKiAgICAgICAgICAgIExPQ0FMICA6IGRpc2FibGUgbG9jYWwgaW5ib3VuZCBtZXNzYWdlIGludGVycnVwdCwgZXVtYmJhciBhcyBiYXNlCi0gICAgICovCi0gICAgcmVnID0gKCBsb2MgPT0gUkVNT1RFID8gSTJPX09NSU1SIDogSTJPX0lNSU1SICk7Ci0gICAgdmFsID0gbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgcmVnICk7Ci0KLSAgICB2YWwgJj0gMHhmZmZmZmZmYzsgLyogbWFza2VkIG91dCB0aGUgbXNnIGludGVycnVwdCBiaXRzICovCi0gICAgdmFsIHw9ICggbiAmIDB4MyApOwotICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCByZWcsIHZhbCApOwotCi0gICAgcmV0dXJuIEkyT1NVQ0NFU1M7Ci0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPTXNnR2V0Ci0gKgotICogZGVzY3JpcHRpb246IExvY2FsIHByb2Nlc3NvciByZWFkcyB0aGUgbnRoIE1zZyByZWdpc3RlciBmcm9tIGl0cyBpbmJvdW5kIG1zZywKLSAqICAgICAgICAgICAgICBvciBhIFBDSSBNYXN0ZXIgcmVhZHMgbnRoIG91dGJvdW5kIG1zZyBmcm9tIGRldmljZQotICoKLSAqICAgICAgICAgICAgICByZXR1cm4gSTJPU1VDQ0VTUyBpZiBubyBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiBJMk9NU0dJTlZBTElELgotICoKLSAqIG5vdGU6Ci0gKiBJZiBpdCBpcyBub3QgbG9jYWwsIHBjc3JiYXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiBPdGhlcndpc2UgZXVtYmJhciBpcyBwYXNzZWQuCi0gKiBJZiBpdCBpcyByZW1vdGUsIG91dGJvdW5kIG1zZyBvbiB0aGUgZGV2aWNlIGlzIHJlYWQ7IG90aGVyd2lzZSBsb2NhbCBpbmJvdW5kIG1zZyBpcyByZWFkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUkyT1NUQVRVUyBJMk9Nc2dHZXQgKCBMT0NBVElPTiBsb2MsICAgICAgICAgICAgIC8qIFJFTU9URS9MT0NBTCAqLwotCQkJIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KLQkJCSB1bnNpZ25lZCBpbnQgbiwgICAgICAgICAgIC8qIDAgb3IgMSAqLwotCQkJIHVuc2lnbmVkIGludCAqbXNnICkKLXsKLSAgICBpZiAoIG4gPj0gSTJPX05VTV9NU0cgfHwgbXNnID09IDAgKQotICAgIHsKLQlyZXR1cm4gSTJPTVNHSU5WQUxJRDsKLSAgICB9Ci0KLSAgICBpZiAoIGxvYyA9PSBSRU1PVEUgKQotICAgIHsKLQkvKiByZWFkIHRoZSBvdXRib3VuZCBtc2cgb2YgdGhlIGRldmljZSwgcGNzcmJhciBhcyBiYXNlICovCi0JKm1zZyA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PTVIwK24qSTJPX1JFR19PRkZTRVQgKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkvKiByZWFkIHRoZSBpbmJvdW5kIG1zZyBzZW50IGJ5IFBDSSBtYXN0ZXIsIGV1bWJiYXIgYXMgYmFzZSAqLwotCSptc2cgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSU1SMCtuKkkyT19SRUdfT0ZGU0VUICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEkyT1NVQ0NFU1M7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBJMk9Nc2dQb3N0Ci0gKgotICogZGVzY3JpcHRpb246IEthaGx1YSAgd3JpdGVzIHRvIGl0cyBudGggb3V0Ym91bmQgbXNnIHJlZ2lzdGVyCi0gKiAgICAgICAgICAgICAgUENJIG1hc3RlciB3cml0ZXMgdG8gbnRoIGluYm91bmQgbXNnIHJlZ2lzdGVyIG9mIGRldmljZQotICoKLSAqICAgICAgICAgICAgICByZXR1cm4gSTJPU1VDQ0VTUyBpZiBubyBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiBJMk9NU0dJTlZBTElELgotICoKLSAqIG5vdGU6Ci0gKiBJZiBpdCBpcyBub3QgbG9jYWwsIHBjc3JiYXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiBPdGhlcndpc2UgZXVtYmJhciBpcyBwYXNzZWQuCi0gKgotICogSWYgaXQgaXMgcmVtb3RlLCBpbmJvdW5kIG1zZyBvbiB0aGUgZGV2aWNlIGlzIHdyaXR0ZW47IG90aGVyd2lzZSBsb2NhbCBvdXRib3VuZCBtc2cgaXMgd3JpdHRlbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUkyT1NUQVRVUyBJMk9Nc2dQb3N0KCBMT0NBVElPTiBsb2MsICAgICAgICAgICAgIC8qIFJFTU9URS9MT0NBTCAqLwotCQkgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCi0JCSAgICAgIHVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCi0JCSAgICAgIHVuc2lnbmVkIGludCBtc2cgKQotewotICAgIGlmICggbiA+PSBJMk9fTlVNX01TRyApCi0gICAgewotCXJldHVybiBJMk9NU0dJTlZBTElEOwotICAgIH0KLQotICAgIGlmICggbG9jID09IFJFTU9URSApCi0gICAgewotCS8qIHdyaXRlIHRvIHRoZSBpbmJvdW5kIG1zZyByZWdpc3RlciBvZiB0aGUgZGV2aWNlLCBwY3NyYmFyIGFzIGJhc2UgICovCi0Jc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JTVIwK24qSTJPX1JFR19PRkZTRVQsIG1zZyApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCS8qIHdyaXRlIHRvIHRoZSBvdXRib3VuZCBtc2cgcmVnaXN0ZXIgZm9yIFBDSSBtYXN0ZXIgdG8gcmVhZCwgZXVtYmJhciBhcyBiYXNlICovCi0Jc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PTVIwK24qSTJPX1JFR19PRkZTRVQsIG1zZyApOwotICAgIH0KLQotICAgIHJldHVybiBJMk9TVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBJMk9EQkVuYWJsZQotICoKLSAqIGRlc2NyaXB0aW9uOiBMb2NhbCBwcm9jZXNzb3IgZW5hYmxlcyBpdCdzIGluYm91bmQgZG9vcmJlbGwgaW50ZXJydXB0Ci0gKiAgICAgICAgICAgICAgUENJIG1hc3RlciBlbmFibGVzIG91dGJvdW5kIGRvb3JiZWxsIGludGVycnVwdCBvZiBkZXZpY2VzCi0gKiAgICAgICAgICAgICAgT3RoZXIgcHJldmlvdXNseSBlbmFibGVkIGludGVycnVwdHMgYXJlIHByZXNlcnZlZC4KLSAqICAgICAgICAgICAgICBSZXR1cm4gSTJPU1VDQ0VTUyBpZiBubyBlcnJvciBvdGhlcndpc2UgcmV0dXJuIEkyT0RCSU5WQUxJRAotICoKLSAqIG5vdGU6Ci0gKiBJbiBEb29yQmVsbCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFBDSSBtYXN0ZXIgYW5kIHNlcnZpY2VkIGJ5IGxvY2FsIHByb2Nlc3NvcgotICogT3V0IERvb3JiZWxsIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYnkgbG9jYWwgcHJvY2Vzc29yIGFuZCBzZXJ2aWNlZCBieSBQQ0kgbWFzdGVyCi0gKgotICogT3V0IERvb3JiZWxsIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYnkgbG9jYWwgcHJvY2Vzc29yIGFuZCBzZXJ2aWNlZCBieSBQQ0kgbWFzdGVyCi0gKiBQQ0kgbWFzdGVyIG5lZWRzIHRvIGVuYWJsZSB0aGUgb3V0Ym91bmQgZG9vcmJlbGwgaW50ZXJydXB0cyBvZiBkZXZpY2UgaXQgd2FudHMgdG8gaGFuZGxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUkyT1NUQVRVUyBJMk9EQkVuYWJsZSggTE9DQVRJT04gbG9jLCAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0JCSAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0JCSAgdW5zaWduZWQgaW50IGluX2RiICkgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCi17Ci0KLSAgICAvKiBMT0NBVElPTiAtIFJFTU9URSA6IFBDSSBtYXN0ZXIgaW5pdGlhbGl6ZXMgb3V0Ym91bmQgZG9vcmJlbGwgbWVzc2FnZSBvZiBkZXZpY2UKLSAgICAgKiAgICAgICAgICAgIExPQ0FMICA6IEthaGx1YSBpbml0aWFsaXplcyBpdHMgaW5ib3VuZCBkb29yYmVsbCBtZXNzYWdlCi0gICAgICovCi0gICAgdW5zaWduZWQgaW50IHZhbDsKLQotICAgIGlmICggbG9jID09IExPQ0FMICYmICggaW5fZGIgJiAweDMgKSA9PSAwICkKLSAgICB7Ci0JcmV0dXJuIEkyT0RCSU5WQUxJRDsKLSAgICB9Ci0KLSAgICBpZiAoIGxvYyA9PSBSRU1PVEUgKQotICAgIHsKLQkvKiBwY3NyYmFyIGlzIGJhc2UgKi8KLQl2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT01JTVIgKTsKLQl2YWwgJj0gMHhmZmZmZmZmNzsKLQlzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09NSU1SICwgdmFsICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0JLyogZXVtYmJhciBpcyBiYXNlICovCi0JdmFsID0gbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX0lNSU1SKTsKLQlpbl9kYiA9ICggKH5pbl9kYikgJiAweDMgKSA8PCAzOwotCXZhbCA9ICggdmFsICYgMHhmZmZmZmZlNykgfCBpbl9kYjsKLQlzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgIEkyT19JTUlNUiwgdmFsICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEkyT1NVQ0NFU1M7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPREJEaXNhYmxlCi0gKgotICogZGVzY3JpcHRpb246IGxvY2FsIHByb2Nlc3NvciBkaXNhYmxlcyBpdHMgaW5ib3VuZCBEb29yQmVsbCBJbnRlcnJ1cHQKLSAqICAgICAgICAgICAgICBQQ0kgbWFzdGVyIGRpc2FibGVzIG91dGJvdW5kIERvb3JCZWxsIGludGVycnVwdCBvZiBkZXZpY2UKLSAqICAgICAgICAgICAgICBPdGhlciBwcmV2aW91c2x5IGVuYWJsZWQgaW50ZXJydXB0cyBhcmUgcHJlc2VydmVkLgotICogICAgICAgICAgICAgIHJldHVybiBJMk9TVUNDRVNTIGlmIG5vIGVycm9yLk90aGVyd2lzZSByZXR1cm4gSTJPREJJTlZBTElECi0gKgotICogbm90ZToKLSAqIGxvY2FsIHByb2Nlc3NvciBuZWVkcyB0byBkaXNhYmxlIGl0cyBpbmJvdW5kIGRvb3JiZWxsIGludGVycnVwdHMgaXQgaXMgbm90IGludGVyZXN0ZWQKLSAqCi0gKiBQQ0kgbWFzdGVyIG5lZWRzIHRvIGRpc2FibGUgb3V0Ym91bmQgZG9vcmJlbGwgaW50ZXJydXB0cyBvZiBkZXZpY2UgaXQgaXMgbm90IGludGVyZXN0ZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1JMk9TVEFUVVMgSTJPREJEaXNhYmxlKCBMT0NBVElPTiBsb2MsICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotCQkJdW5zaWduZWQgaW50IGJhc2UsICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLQkJCXVuc2lnbmVkIGludCBpbl9kYiApICAgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCi17Ci0gICAgLyogTE9DQVRJT04gLSBSRU1PVEUgOiBoYW5kbGUgZGV2aWNlJ3Mgb3V0IGJvdW5kIG1lc3NhZ2UgaW5pdGlhbGl6YXRpb24KLSAgICAgKiAgICAgICAgICAgIExPQ0FMICA6IGhhbmRsZSBsb2NhbCBpbiBib3VuZCBtZXNzYWdlIGluaXRpYWxpemF0aW9uCi0gICAgICovCi0gICAgdW5zaWduZWQgaW50IHZhbDsKLQotICAgIGlmICggbG9jID09IExPQ0FMICYmICggaW5fZGIgJiAweDMgKSA9PSAwICkKLSAgICB7Ci0JICAgIHJldHVybiBJMk9EQklOVkFMSUQ7Ci0gICAgfQotCi0gICAgaWYgKCBsb2MgPT0gUkVNT1RFICkKLSAgICB7Ci0JLyogcGNzcmJhciBpcyB0aGUgYmFzZSAqLwotCXZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PTUlNUiApOwotCXZhbCB8PSAweDg7Ci0Jc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PTUlNUiwgdmFsICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0JICAgIHZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JTUlNUik7Ci0JICAgIGluX2RiID0gKCBpbl9kYiAmIDB4MyApIDw8IDM7Ci0JICAgIHZhbCB8PSBpbl9kYjsKLQkgICAgc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JTUlNUiwgdmFsICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEkyT1NVQ0NFU1M7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPREJHZXQKLSAqCi0gKiBkZXNjcmlwdGlvbjogTG9jYWwgcHJvY2Vzc29yIHJlYWRzIGl0cyBpbiBkb29yYmVsbCByZWdpc3RlciwKLSAqICAgICAgICAgICAgICBQQ0kgbWFzdGVyIHJlYWRzIHRoZSBvdXRkb29yYmVsbCByZWdpc3RlciBvZiBkZXZpY2UuCi0gKiAgICAgICAgICAgICAgQWZ0ZXIgYSBkb29yYmVsbCByZWdpc3RlciBpcyByZWFkLCB0aGUgd2hvbGUgcmVnaXN0ZXIgd2lsbCBiZSBjbGVhcmVkLgotICogICAgICAgICAgICAgIE90aGVyd2lzZSwgSFcga2VlcHMgZ2VuZXJhdGluZyBpbnRlcnJ1cHQuCi0gKgotICogbm90ZToKLSAqIElmIGl0IGlzIG5vdCBsb2NhbCwgcGNzcmJhciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCi0gKiBPdGhlcndpc2UgZXVtYmJhciBpcyBwYXNzZWQuCi0gKgotICogSWYgaXQgaXMgcmVtb3RlLCBvdXQgZG9vcmJlbGwgcmVnaXN0ZXIgb24gdGhlIGRldmljZSBpcyByZWFkLgotICogT3RoZXJ3aXNlIGxvY2FsIGluIGRvb3JiZWxsIGlzIHJlYWQKLSAqCi0gKiBJZiB0aGUgcmVnaXN0ZXIgaXMgbm90IGNsZWFyZWQgYnkgd3JpdGUgdG8gaXQsIGFueSByZW1haW5pbmcgYml0IG9mIGInMSdzCi0gKiB3aWxsIGNhdXNlIGludGVycnVwdCBwZW5kaW5nLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXVuc2lnbmVkIGludCBJMk9EQkdldCggTE9DQVRJT04gbG9jLCAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UpICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotewotICAgIHVuc2lnbmVkIGludCBtc2csIHZhbDsKLQotICAgIGlmICggbG9jID09IFJFTU9URSApCi0gICAgewotCS8qIHJlYWQgb3V0Ym91bmQgZG9vcmJlbGwgcmVnaXN0ZXIgb2YgZGV2aWNlLCBwY3NyYmFyIGlzIHRoZSBiYXNlICovCi0JdmFsID0gbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09EQlIgKTsKLQltc2cgPSB2YWwgJiAweGUwMDAwMDAwOwotCXN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT0RCUiwgdmFsICk7IC8qIGNsZWFyIHRoZSByZWdpc3RlciAqLwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCS8qIHJlYWQgdGhlIGluYm91bmQgZG9vcmJlbGwgcmVnaXN0ZXIsIGV1bWJiYXIgaXMgdGhlIGJhc2UgKi8KLQl2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSURCUiApOwotCXN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSURCUiwgdmFsICk7IC8qIGNsZWFyIHRoZSByZWdpc3RlciAqLwotCW1zZyA9IHZhbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbXNnOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IEkyT0RCUG9zdAotICoKLSAqIGRlc2NyaXB0aW9uOiBsb2NhbCBwcm9jZXNzb3Igd3JpdGVzIHRvIGEgb3V0Ym91bmQgZG9vcmJlbGwgcmVnaXN0ZXIsCi0gKiAgICAgICAgICAgICAgUENJIG1hc3RlciB3cml0ZXMgdG8gdGhlIGluYm91bmQgZG9vcmJlbGwgcmVnaXN0ZXIgb2YgZGV2aWNlCi0gKgotICogbm90ZToKLSAqIElmIGl0IGlzIG5vdCBsb2NhbCwgcGNzcmJhciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCi0gKiBPdGhlcndpc2UgZXVtYmJhciBpcyBwYXNzZWQuCi0gKgotICogSWYgaXQgaXMgcmVtb3RlLCBpbiBkb29yYmVsbCByZWdpc3RlciBvbiB0aGUgZGV2aWNlIGlzIHdyaXR0ZW4uCi0gKiBPdGhlcndpc2UgbG9jYWwgb3V0IGRvb3JiZWxsIGlzIHdyaXR0ZW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIEkyT0RCUG9zdCggTE9DQVRJT04gbG9jLCAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLQkJdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLQkJdW5zaWduZWQgaW50IG1zZyApICAgICAgICAvKiAgIGluICAgLyBvdXQgICAgKi8KLXsKLSAgICBpZiAoIGxvYyA9PSBSRU1PVEUgKQotICAgIHsKLQkvKiB3cml0ZSB0byBpbmJvdW5kIGRvb3JiZWxsIHJlZ2lzdGVyIG9mIGRldmljZSwgcGNzcmJhciBpcyB0aGUgYmFzZSAqLwotCXN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSURCUiwgbXNnICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0JLyogd3JpdGUgdG8gbG9jYWwgb3V0Ym91bmQgZG9vcmJlbGwgcmVnaXN0ZXIsIGV1bWJiYXIgaXMgdGhlIGJhc2UgKi8KLQlzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09EQlIsIG1zZyAmIDB4MWZmZmZmZmYgKTsKLSAgICB9Ci0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPT3V0TXNnU3RhdEdldAotICoKLSAqIGRlc2NyaXB0aW9uOiBQQ0kgbWFzdGVyIHJlYWRzIGRldmljZSdzIG91dGJvdW5kIG1zZyB1bml0IGludGVycnVwdCBzdGF0dXMuCi0gKiAgICAgICAgICAgICAgUmVhZGluZyBhbiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLAotICogICAgICAgICAgICAgIHRoZSByZWdpc3RlciB3aWxsIGJlIGNsZWFyZWQuCi0gKgotICogICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgc3RhdHVzIHJlZ2lzdGVyIGlzIEFORCB3aXRoIHRoZSBvdXRib3VuZAotICogICAgICAgICAgICAgIGludGVycnVwdCBtYXNrIGFuZCByZXN1bHQgaXMgcmV0dXJuZWQuCi0gKgotICogbm90ZToKLSAqIHBjc3JiYXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSTJPU1RBVFVTIEkyT091dE1zZ1N0YXRHZXQoIHVuc2lnbmVkIGludCBwY3NyYmFyLCBJMk9PTVNUQVQgKnZhbCApCi17Ci0gICAgdW5zaWduZWQgaW50IHN0YXQ7Ci0gICAgdW5zaWduZWQgaW50IG1hc2s7Ci0KLSAgICBpZiAoIHZhbCA9PSAwICkKLSAgICB7Ci0JICAgIHJldHVybiBJMk9JTlZBTElEOwotICAgIH0KLQotICAgIC8qIHJlYWQgZGV2aWNlJ3Mgb3V0Ym91bmQgc3RhdHVzICovCi0gICAgc3RhdCA9IGxvYWRfcnVudGltZV9yZWcoIHBjc3JiYXIsIEkyT19PTUlTUiApOwotICAgIG1hc2sgPSBsb2FkX3J1bnRpbWVfcmVnKCBwY3NyYmFyLCBJMk9fT01JTVIgKTsKLSAgICBzdG9yZV9ydW50aW1lX3JlZyggcGNzcmJhciwgSTJPX09NSVNSLCBzdGF0ICYgMHhmZmZmZmZkNyk7Ci0KLSAgICBzdGF0ICY9IG1hc2s7Ci0gICAgdmFsLT5yc3ZkMCA9ICggc3RhdCAmIDB4ZmZmZmZmYzAgKSA+PiA2OwotICAgIHZhbC0+b3BxaSAgPSAoIHN0YXQgJiAweDAwMDAwMDIwICkgPj4gNTsKLSAgICB2YWwtPnJzdmQxID0gKCBzdGF0ICYgMHgwMDAwMDAxMCApID4+IDQ7Ci0gICAgdmFsLT5vZGkgICA9ICggc3RhdCAmIDB4MDAwMDAwMDggKSA+PiAzOwotICAgIHZhbC0+cnN2ZDIgPSAoIHN0YXQgJiAweDAwMDAwMDA0ICkgPj4gMjsKLSAgICB2YWwtPm9tMWkgID0gKCBzdGF0ICYgMHgwMDAwMDAwMiApID4+IDE7Ci0gICAgdmFsLT5vbTBpICA9ICggc3RhdCAmIDB4MDAwMDAwMDEgKTsKLQotICAgIHJldHVybiBJMk9TVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBJMk9Jbk1zZ1N0YXRHZXQKLSAqCi0gKiBkZXNjcmlwdGlvbjogTG9jYWwgcHJvY2Vzc29yIHJlYWRzIGl0cyBpbmJvdW5kIG1zZyB1bml0IGludGVycnVwdCBzdGF0dXMuCi0gKiAgICAgICAgICAgICAgUmVhZGluZyBhbiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLAotICogICAgICAgICAgICAgIHRoZSByZWdpc3RlciB3aWxsIGJlIGNsZWFyZWQuCi0gKgotICogICAgICAgICAgICAgIFRoZSBpbmJvdW5kIG1zZyBpbnRlcnJ1cHQgc3RhdHVzIGlzIEFORCB3aXRoIHRoZSBpbmJvdW5kCi0gKiAgICAgICAgICAgICAgbXNnIGludGVycnVwdCBtYXNrIGFuZCByZXN1bHQgaXMgcmV0dXJuZWQuCi0gKgotICogbm90ZToKLSAqIGV1bWJiYXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSTJPU1RBVFVTIEkyT0luTXNnU3RhdEdldCh1bnNpZ25lZCBpbnQgZXVtYmJhciwgSTJPSU1TVEFUICp2YWwpCi17Ci0gICAgdW5zaWduZWQgaW50IHN0YXQ7Ci0gICAgdW5zaWduZWQgaW50IG1hc2s7Ci0KLSAgICBpZiAoIHZhbCA9PSAwICkKLSAgICB7Ci0JICAgIHJldHVybiBJMk9JTlZBTElEOwotICAgIH0KLQotICAgIC8qIHJlYWQgZGV2aWNlJ3Mgb3V0Ym91bmQgc3RhdHVzICovCi0gICAgc3RhdCA9IGxvYWRfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19PTUlTUiApOwotICAgIG1hc2sgPSBsb2FkX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBJMk9fT01JTVIgKTsKLSAgICBzdG9yZV9ydW50aW1lX3JlZyggZXVtYmJhciwgSTJPX09NSVNSLCBzdGF0ICYgMHhmZmZmZmZlNyApOwotCi0gICAgc3RhdCAmPSBtYXNrOwotICAgIHZhbC0+cnN2ZDAgPSAoIHN0YXQgJiAweGZmZmZmZTAwICkgPj4gOTsKLSAgICB2YWwtPm9mb2kgID0gKCBzdGF0ICYgMHgwMDAwMDEwMCApID4+IDg7Ci0gICAgdmFsLT5pcG9pICA9ICggc3RhdCAmIDB4MDAwMDAwODAgKSA+PiA3OwotICAgIHZhbC0+cnN2ZDEgPSAoIHN0YXQgJiAweDAwMDAwMDQwICkgPj4gNjsKLSAgICB2YWwtPmlwcWkgID0gKCBzdGF0ICYgMHgwMDAwMDAyMCApID4+IDU7Ci0gICAgdmFsLT5tY2kgICA9ICggc3RhdCAmIDB4MDAwMDAwMTAgKSA+PiA0OwotICAgIHZhbC0+aWRpICAgPSAoIHN0YXQgJiAweDAwMDAwMDA4ICkgPj4gMzsKLSAgICB2YWwtPnJzdmQyID0gKCBzdGF0ICYgMHgwMDAwMDAwNCApID4+IDI7Ci0gICAgdmFsLT5pbTFpICA9ICggc3RhdCAmIDB4MDAwMDAwMDIgKSA+PiAxOwotICAgIHZhbC0+aW0waSAgPSAoIHN0YXQgJiAweDAwMDAwMDAxICk7Ci0KLSAgICByZXR1cm4gSTJPU1VDQ0VTUzsKLQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBJMk9GSUZPSW5pdAotICoKLSAqIGRlc2NyaXB0aW9uOiBDb25maWd1cmUgdGhlIEkyTyBGSUZPLCBpbmNsdWRpbmcgUUJBUiwKLSAqICAgICAgICAgICAgICBJRkhQUi9JRlRQUiwgSVBIUFIvSVBUUFIsIE9GSFBSL09GVFBSLAotICogICAgICAgICAgICAgIE9QSFBSL09QVFBSLCBNVUNSLgotICoKLSAqICAgICAgICAgICAgICByZXR1cm4gSTJPU1VDQ0VTUyBpZiBubyBlcnJvciwKLSAqICAgICAgICAgICAgICBvdGhlcndpc2UgcmV0dXJuIEkyT1FVRUlOVkFMSUQKLSAqCi0gKiBub3RlOiBJdCBpcyBOT1QgdGhpcyBkcml2ZXIncyByZXNwb25zaWJpbGl0eSBvZiBpbml0aWFsaXppbmcKLSAqICAgICAgIE1GQSBibG9ja3MsIGkuZS4sIEZJRk8gcXVldWUgaXRzZWxmLiBUaGUgTUZBIGJsb2NrcwotICogICAgICAgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgSTJPIHVuaXQgY2FuIGJlIHVzZWQuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1JMk9TVEFUVVMgSTJPRklGT0luaXQoIHVuc2lnbmVkIGludCBldW1iYmFyLAotCQkgICAgICAgUVVFVUVfU0laRSAgIHN6LCAgICAgIC8qIHZhbHVlIG9mIENRUyBvZiBNVUNSICovCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgcWJhKSAgICAgLyogcXVldWUgYmFzZSBhZGRyZXNzIHRoYXQgbXVzdCBiZSBhbGlnbmVkIGF0IDFNICovCi17Ci0KLSAgICBpZiAoICggcWJhICYgMHhmZmZmZiApICE9IDAgKQotICAgIHsKLQkvKiBRQkEgbXVzdCBiZSBhbGlnbmVkIGF0IDFNYnl0ZSBib3VuZGFyeSAqLwotCXJldHVybiBJMk9RVUVJTlZBTElEOwotICAgIH0KLQotICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBJMk9fUUJBUiwgcWJhICk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19NVUNSLCAodW5zaWduZWQgaW50KXN6ICk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19JRkhQUiwgcWJhICk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19JRlRQUiwgcWJhICk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19JUEhQUiwgcWJhICsgMSAqICggc3ogPDwgMTEgKSk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19JUFRQUiwgcWJhICsgMSAqICggc3ogPDwgMTEgKSk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19PRkhQUiwgcWJhICsgMiAqICggc3ogPDwgMTEgKSk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19PRlRQUiwgcWJhICsgMiAqICggc3ogPDwgMTEgKSk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19PUEhQUiwgcWJhICsgMyAqICggc3ogPDwgMTEgKSk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19PUFRQUiwgcWJhICsgMyAqICggc3ogPDwgMTEgKSk7Ci0KLSAgICBmaWZvX3N0YXQucXN6ID0gc3o7Ci0gICAgZmlmb19zdGF0LnFiYSA9IHFiYTsKLQotICAgIHJldHVybiBJMk9TVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBJMk9GSUZPRW5hYmxlCi0gKgotICogZGVzY3JpcHRpb246IEVuYWJsZSB0aGUgY2lyY3VsYXIgcXVldWUKLSAqICAgICAgICAgICAgICByZXR1cm4gSTJPU1VDQ0VTUyBpZiBubyBlcnJvci4KLSAqICAgICAgICAgICAgICBPdGhlcndpc2UgSTJPUVVFSU5WQUxJRCBpcyByZXR1cm5lZC4KLSAqCi0gKiBub3RlOgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1JMk9TVEFUVVMgSTJPRklGT0VuYWJsZSggdW5zaWduZWQgaW50IGV1bWJiYXIgKQotewotICAgIHVuc2lnbmVkIGludCB2YWw7Ci0KLSAgICBpZiAoIGZpZm9fc3RhdC5xYmEgPT0gMHhmZmZmZmZmICkKLSAgICB7Ci0JcmV0dXJuIEkyT1FVRUlOVkFMSUQ7Ci0gICAgfQotCi0gICAgdmFsID0gbG9hZF9ydW50aW1lX3JlZyggZXVtYmJhciwgSTJPX01VQ1IgKTsKLSAgICBzdG9yZV9ydW50aW1lX3JlZyggZXVtYmJhciwgSTJPX01VQ1IsIHZhbCB8IDB4MSApOwotCi0gICAgcmV0dXJuIEkyT1NVQ0NFU1M7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IEkyT0ZJRk9EaXNhYmxlCi0gKgotICogZGVzY3JpcHRpb246IERpc2FibGUgdGhlIGNpcmN1bGFyIHF1ZXVlCi0gKgotICogbm90ZToKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBJMk9GSUZPRGlzYWJsZSggdW5zaWduZWQgaW50IGV1bWJiYXIgKQotewotICAgIGlmICggZmlmb19zdGF0LnFiYSA9PSAweGZmZmZmZmZmICkKLSAgICB7Ci0JLyogbm90IGVuYWJsZWQgKi8KLQlyZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19NVUNSICk7Ci0gICAgc3RvcmVfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19NVUNSLCB2YWwgJiAweGZmZmZmZmZlICk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPRklGT0FsbG9jCi0gKgotICogZGVzY3JpcHRpb246IEFsbG9jYXRlIGEgZnJlZSBNRkEgZnJvbSBmcmVlIEZJRk8uCi0gKiAgICAgICAgICAgICAgcmV0dXJuIEkyT1NVQ0NFU1MgaWYgbm8gZXJyb3IuCi0gKiAgICAgICAgICAgICAgcmV0dXJuIEkyT1FVRUVNUFRZIGlmIG5vIG1vcmUgZnJlZSBNRkEuCi0gKiAgICAgICAgICAgICAgcmV0dXJuIEkyT0lOVkFMSUQgb24gb3RoZXIgZXJyb3JzLgotICoKLSAqICAgICAgICAgICAgICBBIGZyZWUgTUZBIG11c3QgYmUgYWxsb2NhdGVkIGJlZm9yZSBhCi0gKiAgICAgICAgICAgICAgbWVzc2FnZSBjYW4gYmUgcG9zdGVkLgotICoKLSAqIG5vdGU6Ci0gKiBQQ0kgTWFzdGVyIGFsbG9jYXRlcyBhIGZyZWUgTUZBIGZyb20gaW5ib3VuZCBxdWV1ZSBvZiBkZXZpY2UKLSAqIChwY3NyYmFyIGlzIHRoZSBiYXNlLCkgdGhyb3VnaCB0aGUgaW5ib3VuZCBxdWV1ZSBwb3J0IG9mIGRldmljZQotICogd2hpbGUgbG9jYWwgcHJvY2Vzc29yIGFsbG9jYXRlcyBhIGZyZWUgTUZBIGZyb20gaXRzIG91dGJvdW5kCi0gKiBxdWV1ZSAoZXVtYmJhciBpcyB0aGUgYmFzZS4pCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1JMk9TVEFUVVMgSTJPRklGT0FsbG9jKCBMT0NBVElPTiBsb2MsCi0JCQl1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCXZvaWQgICAgICAgICAqKnBNc2cgKQotewotICAgIEkyT1NUQVRVUyBzdGF0ID0gSTJPU1VDQ0VTUzsKLSAgICB2b2lkICpwSGRyLCAqcFRpbDsKLQotICAgIGlmICggcE1zZyA9PSAwIHx8ICpwTXNnID09IDAgfHwgZmlmb19zdGF0LnFiYSA9PSAweGZmZmZmZmZmICkKLSAgICB7Ci0JLyogbm90IGNvbmZpZ3VyZWQgKi8KLQlyZXR1cm4gSTJPUVVFSU5WQUxJRDsKLSAgICB9Ci0KLSAgICBpZiAoIGxvYyA9PSBSRU1PVEUgKQotICAgIHsKLQkvKiBwY3NyYmFyIGlzIHRoZSBiYXNlIGFuZCByZWFkIHRoZSBpbmJvdW5kIGZyZWUgdGFpbCBwdHIgKi8KLQlwVGlsID0gKHZvaWQgKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSUZRUFIgKTsKLQlpZiAoICggKHVuc2lnbmVkIGludClwVGlsICYgMHhGRkZGRkZGICkgPT0gMHhGRkZGRkZGRiApCi0JewotCSAgICBzdGF0ID0gSTJPUVVFRU1QVFk7Ci0JfQotCWVsc2UKLQl7Ci0JICAgICpwTXNnID0gcFRpbDsKLQl9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0JLyogZXVtYmJhciBpcyB0aGUgYmFzZSBhbmQgcmVhZCB0aGUgb3V0Ym91bmQgZnJlZSB0YWlsIHB0ciAqLwotCXBIZHIgPSAodm9pZCAqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PRkhQUiApOyAvKiBxdWV1ZSBoZWFkICovCi0JcFRpbCA9ICh2b2lkICopbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09GVFBSICk7IC8qIHF1ZXVlIHRhaWwgKi8KLQotCS8qIGNoZWNrIHVuZGVyZmxvdyAqLwotCWlmICggcEhkciA9PSBwVGlsICkKLQl7Ci0JICAgIC8qIGhkciBhbmQgdGlsIHBvaW50IHRvIHRoZSBzYW1lIGZpZm8gaXRlbSwgbm8gZnJlZSBNRkEgKi8KLQkgICAgc3RhdCA9IEkyT1FVRUVNUFRZOwotCX0KLQllbHNlCi0JewotCSAgLyogdXBkYXRlIE9GVFBSICovCi0JICAqcE1zZyA9ICh2b2lkICopKCoodW5zaWduZWQgY2hhciAqKXBUaWwpOwotCSAgcFRpbCA9ICh2b2lkICopKCh1bnNpZ25lZCBpbnQpcFRpbCArIDQpOwotCSAgaWYgKCAodW5zaWduZWQgaW50KXBUaWwgPT0gZmlmb19zdGF0LnFiYSArICggNCAqICggZmlmb19zdGF0LnFzeiA8PCAxMSApICkgKQotCSAgewotCQkvKiByZWFjaCB0aGUgdXBwZXIgbGltaXQgKi8KLQkJcFRpbCA9ICh2b2lkICopKGZpZm9fc3RhdC5xYmEgKyAoIDMgKiAoZmlmb19zdGF0LnFzeiA8PCAxMSkgKSk7Ci0JICB9Ci0JICBzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09GVFBSLCAodW5zaWduZWQgaW50KXBUaWwgKTsKLQl9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBJMk9GSUZPRnJlZQotICoKLSAqIGRlc2NyaXB0aW9uOiBGcmVlIGEgdXNlZCBNRkEgYmFjayB0byBmcmVlIHF1ZXVlIGFmdGVyCi0gKiAgICAgICAgICAgICAgdXNlLgotICogICAgICAgICAgICAgIHJldHVybiBJMk9TVUNDRVNTIGlmIG5vIGVycm9yLgotICogICAgICAgICAgICAgIHJldHVybiBJMk9RVUVGVUxMIGlmIGluYm91bmQgZnJlZSBxdWV1ZQotICogICAgICAgICAgICAgIG92ZXJmbG93Ci0gKgotICogbm90ZTogUENJIE1hc3RlciBmcmVlcyBhIE1GQSBpbnRvIGRldmljZSdzIG91dGJvdW5kIHF1ZXVlCi0gKiAgICAgICAoT0ZRUFIpIHdoaWxlIGxvY2FsIHByb2Nlc3NvciBmcmVlcyBhIE1GQSBpbnRvIGl0cwotICogICAgICAgaW5ib3VuZCBxdWV1ZSAoSUZIUFIpLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSTJPU1RBVFVTIEkyT0ZJRk9GcmVlKCBMT0NBVElPTiBsb2MsCi0JCSAgdW5zaWduZWQgaW50IGJhc2UsCi0JCSAgdm9pZCAqcE1zZyApCi17Ci0gICAgdm9pZCAqKnBIZHIsICoqcFRpbDsKLSAgICBJMk9TVEFUVVMgc3RhdCA9IEkyT1NVQ0NFU1M7Ci0KLSAgICBpZiAoIGZpZm9fc3RhdC5xYmEgPT0gMHhmZmZmZmZmZiB8fCBwTXNnID09IDAgKQotICAgIHsKLQkgICAgcmV0dXJuIEkyT1FVRUlOVkFMSUQ7Ci0gICAgfQotCi0gICAgaWYgKCBsb2MgPT0gUkVNT1RFICkKLSAgICB7Ci0JLyogcGNzcmJhciBpcyB0aGUgYmFzZSAqLwotCXN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT0ZRUFIsICh1bnNpZ25lZCBpbnQpcE1zZyApOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotCS8qIGV1bWJiYXIgaXMgdGhlIGJhc2UgKi8KLQlwSGRyID0gKHZvaWQgKiopbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX0lGSFBSICk7Ci0JcFRpbCA9ICh2b2lkICoqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JRlRQUiApOwotCi0JLyogc3RvcmUgTUZBICovCi0JKnBIZHIgPSBwTXNnOwotCi0JLyogdXBkYXRlIElGSFBSICovCi0JcEhkciArPSA0OwotCi0JaWYgKCAodW5zaWduZWQgaW50KXBIZHIgPT0gZmlmb19zdGF0LnFiYSArICggZmlmb19zdGF0LnFzeiA8PCAxMSApICkKLQl7Ci0JICAvKiByZWFjaCB0aGUgdXBwZXIgbGltaXQgKi8KLQkgIHBIZHIgPSAodm9pZCAqKilmaWZvX3N0YXQucWJhOwotCX0KLQotCS8qIGNoZWNrIGluYm91bmQgZnJlZSBxdWV1ZSBvdmVyZmxvdyAqLwotCWlmICggcEhkciAhPSBwVGlsICkKLQl7Ci0JICAgc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PUEhQUiwgKHVuc2lnbmVkIGludClwSGRyKTsKLQl9Ci0JZWxzZQotCXsKLQkgICAgc3RhdCA9IEkyT1FVRUZVTEw7Ci0JfQotCi0gICAgfQotCi0gICAgcmV0dXJuIHN0YXQ7Ci0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IEkyT0ZJRk9Qb3N0Ci0gKgotICogZGVzY3JpcHRpb246IFBvc3QgYSBtc2cgaW50byBGSUZPIHBvc3QgcXVldWUKLSAqICAgICAgICAgICAgICB0aGUgdmFsdWUgb2YgbXNnIG11c3QgYmUgdGhlIG9uZQotICogICAgICAgICAgICAgIHJldHVybmVkIGJ5IEkyT0ZJRk9BbGxvYwotICoKLSAqIG5vdGU6IFBDSSBNYXN0ZXIgcG9zdHMgYSBtc2cgaW50byBkZXZpY2UncyBpbmJvdW5kIHF1ZXVlCi0gKiAgICAgICAoSUZRUFIpIHdoaWxlIGxvY2FsIHByb2Nlc3NvciBwb3N0IGEgbXNnIGludG8gZGV2aWNlJ3MKLSAqICAgICAgIG91dGJvdW5kIHF1ZXVlIChPUEhQUikKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1JMk9TVEFUVVMgSTJPRklGT1Bvc3QoIExPQ0FUSU9OIGxvYywKLQkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAotCQkgICAgICAgdm9pZCAqcE1zZyApCi17Ci0gICAgdm9pZCAqKnBIZHIsICoqcFRpbDsKLSAgICBJMk9TVEFUVVMgc3RhdCA9IEkyT1NVQ0NFU1M7Ci0KLSAgICBpZiAoIGZpZm9fc3RhdC5xYmEgPT0gMHhmZmZmZmZmZiB8fCBwTXNnID09IDAgKQotICAgIHsKLQlyZXR1cm4gSTJPUVVFSU5WQUxJRDsKLSAgICB9Ci0KLSAgICBpZiAoIGxvYyA9PSBSRU1PVEUgKQotICAgIHsKLQkvKiBwY3NyYmFyIGlzIHRoZSBiYXNlICovCi0Jc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JRlFQUiwgKHVuc2lnbmVkIGludClwTXNnICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0JLyogZXVtYmJhciBpcyB0aGUgYmFzZSAqLwotCXBIZHIgPSAodm9pZCAqKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT1BIUFIgKTsKLQlwVGlsID0gKHZvaWQgKiopbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09QVFBSICk7Ci0KLQkvKiBzdG9yZSBNRkEgKi8KLQkqcEhkciA9IHBNc2c7Ci0KLQkvKiB1cGRhdGUgSUZIUFIgKi8KLQlwSGRyICs9IDQ7Ci0KLQlpZiAoICh1bnNpZ25lZCBpbnQpcEhkciA9PSBmaWZvX3N0YXQucWJhICsgMyAqICggZmlmb19zdGF0LnFzeiA8PCAxMSApICkKLQl7Ci0JICAvKiByZWFjaCB0aGUgdXBwZXIgbGltaXQgKi8KLQkgIHBIZHIgPSAodm9pZCAqKikoZmlmb19zdGF0LnFiYSArIDIgKiAoIGZpZm9fc3RhdC5xc3ogPDwgMTEgKSApOwotCX0KLQotCS8qIGNoZWNrIHBvc3QgcXVldWUgb3ZlcmZsb3cgKi8KLQlpZiAoIHBIZHIgIT0gcFRpbCApCi0JewotCSAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT1BIUFIsICh1bnNpZ25lZCBpbnQpcEhkcik7Ci0JfQotCWVsc2UKLQl7Ci0JICAgIHN0YXQgPSBJMk9RVUVGVUxMOwotCX0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IEkyT0ZJRk9HZXQKLSAqCi0gKiBkZXNjcmlwdGlvbjogIFJlYWQgYSBtc2cgZnJvbSBGSUZPCi0gKiAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZAotICogICAgICAgICAgICAgICBvbmx5IHdoZW4gdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nCi0gKiAgICAgICAgICAgICAgIG1zZyBpbnRlcnJ1cHQuCi0gKgotICogbm90ZTogUENJIE1hc3RlciByZWFkcyBhIG1zZyBmcm9tIGRldmljZSdzIG91dGJvdW5kIHF1ZXVlCi0gKiAgICAgICAoT0ZRUFIpIHdoaWxlIGxvY2FsIHByb2Nlc3NvciByZWFkcyBhIG1zZyBmcm9tIGRldmljZSdzCi0gKiAgICAgICBpbmJvdW5kIHF1ZXVlIChJUFRQUikKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1JMk9TVEFUVVMgSTJPRklGT0dldCggTE9DQVRJT04gbG9jLAotCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCSAgICAgICB2b2lkICoqcE1zZyApCi17Ci0gICAgSTJPU1RBVFVTIHN0YXQgPSBJMk9TVUNDRVNTOwotICAgIHZvaWQgKnBIZHIsICpwVGlsOwotCi0gICAgaWYgKCBwTXNnID09IDAgfHwgKnBNc2cgPT0gMCB8fCBmaWZvX3N0YXQucWJhID09IDB4ZmZmZmZmZmYgKQotICAgIHsKLQkvKiBub3QgY29uZmlndXJlZCAqLwotCXJldHVybiBJMk9RVUVJTlZBTElEOwotICAgIH0KLQotICAgIGlmICggbG9jID09IFJFTU9URSApCi0gICAgewotCS8qIHBjc3JiYXIgaXMgdGhlIGJhc2UgKi8KLQlwVGlsID0gKHZvaWQgKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT0ZRUFIgKTsKLQlpZiAoICggKHVuc2lnbmVkIGludClwVGlsICYgMHhGRkZGRkZGICkgPT0gMHhGRkZGRkZGRiApCi0JewotCSAgICBzdGF0ID0gSTJPUVVFRU1QVFk7Ci0JfQotCWVsc2UKLQl7Ci0JICAgICpwTXNnID0gcFRpbDsKLQl9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0JLyogZXVtYmJhciBpcyB0aGUgYmFzZSBhbmQgcmVhZCB0aGUgb3V0Ym91bmQgZnJlZSB0YWlsIHB0ciAqLwotCXBIZHIgPSAodm9pZCAqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JUEhQUiApOyAvKiBxdWV1ZSBoZWFkICovCi0JcFRpbCA9ICh2b2lkICopbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX0lQVFBSICk7IC8qIHF1ZXVlIHRhaWwgKi8KLQotCS8qIGNoZWNrIHVuZGVyZmxvdyAqLwotCWlmICggcEhkciA9PSBwVGlsICkKLQl7Ci0JICAgIC8qIG5vIGZyZWUgTUZBICovCi0JICAgIHN0YXQgPSBJMk9RVUVFTVBUWTsKLQl9Ci0JZWxzZQotCXsKLQkgIC8qIHVwZGF0ZSBPRlRQUiAqLwotCSAgKnBNc2cgPSAodm9pZCAqKSgqKHVuc2lnbmVkIGNoYXIgKilwVGlsKTsKLQkgIHBUaWwgPSAodm9pZCAqKSgodW5zaWduZWQgaW50KXBUaWwgKyA0KTsKLQkgIGlmICggKHVuc2lnbmVkIGludClwVGlsID09IGZpZm9fc3RhdC5xYmEgKyAyICogKCBmaWZvX3N0YXQucXN6IDw8IDExICkgKQotCSAgewotCQkvKiByZWFjaCB0aGUgdXBwZXIgbGltaXQgKi8KLQkJcFRpbCA9ICh2b2lkICopKGZpZm9fc3RhdC5xYmEgKyAxICogKGZpZm9fc3RhdC5xc3ogPDwgMTEpICk7Ci0JICB9Ci0KLQkgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSVBUUFIsICh1bnNpZ25lZCBpbnQpcFRpbCApOwotCX0KLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPSU9QCi0gKgotICogZGVzY3JpcHRpb246IEdldCB0aGUgSTJPIFBDSSBjb25maWd1cmF0aW9uIGlkZW50aWZpY2F0aW9uCi0gKiAgICAgICAgICAgICAgcmVnaXN0ZXIuCi0gKgotICogbm90ZTogUENJIG1hc3RlciBzaG91bGQgcGFzcyBwY3NyYmFyIHdoaWxlIGxvY2FsIHByb2Nlc3NvcgotICogICAgICAgc2hvdWxkIHBhc3MgZXVtYmJhci4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1JMk9TVEFUVVMgSTJPUENJQ29uZmlnR2V0KCBMT0NBVElPTiBsb2MsCi0JCQl1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCUkyT0lPUCAqIHZhbCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdG1wOwotICAgIGlmICggdmFsID09IDAgKQotICAgIHsKLQkgICAgcmV0dXJuIEkyT0lOVkFMSUQ7Ci0gICAgfQotICAgIHRtcCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIFBDSV9DRkdfQ0xBICk7Ci0gICAgdmFsLT5iYXNlX2NsYXNzID0gKCB0bXAgJiAweEZGKSA8PCAxNjsKLSAgICB0bXAgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBQQ0lfQ0ZHX1NDTCApOwotICAgIHZhbC0+c3ViX2NsYXNzPSAoICh0bXAgJiAweEZGKSA8PCA4ICk7Ci0gICAgdG1wID0gbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgUENJX0NGR19QSUMgKTsKLSAgICB2YWwtPnByZ19jb2RlID0gKHRtcCAmIDB4RkYpOwotICAgIHJldHVybiBJMk9TVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPRklGT0ludEVuYWJsZQotICoKLSAqIGRlc2NyaXB0aW9uOiBFbmFibGUgdGhlIGNpcmN1bGFyIHBvc3QgcXVldWUgaW50ZXJydXB0Ci0gKgotICogbm90ZToKLSAqIFBDSSBtYXN0ZXIgZW5hYmxlcyBvdXRib3VuZCBGSUZPIGludGVycnVwdCBvZiBkZXZpY2UKLSAqIHBzY3JiYXIgaXMgdGhlIGJhc2UKLSAqIERldmljZSBlbmFibGVzIGl0cyBpbmJvdW5kIEZJRk8gaW50ZXJydXB0Ci0gKiBldW1iYmFyIGlzIHRoZSBiYXNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgSTJPRklGT0ludEVuYWJsZSggTE9DQVRJT04gbG9jLCB1bnNpZ25lZCBpbnQgYmFzZSAgKQotewotICAgIHVuc2lnbmVkIGludCByZWcsIHZhbDsKLQotICAgIC8qIExPQ0FUSU9OIC0gUkVNT1RFIDogZW5hYmxlIG91dGJvdW5kIG1lc3NhZ2Ugb2YgZGV2aWNlLCBwY3NyYmFyIGFzIGJhc2UKLSAgICAgKiAgICAgICAgICAgIExPQ0FMICA6IGVuYWJsZSBsb2NhbCBpbmJvdW5kIG1lc3NhZ2UsIGV1bWJiYXIgYXMgYmFzZQotICAgICAqLwotICAgIHJlZyA9ICggbG9jID09IFJFTU9URSA/IEkyT19PTUlNUiA6IEkyT19JTUlNUiApOwotICAgIHZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIHJlZyApOwotCi0gICAgdmFsICY9IDB4ZmZmZmZmZGY7IC8qIGNsZWFyIHRoZSBtc2cgaW50ZXJydXB0IGJpdHMgKi8KLSAgICBzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgcmVnLCB2YWwgKTsKLQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IEkyT0ZJRk9JbnREaXNhYmxlCi0gKgotICogZGVzY3JpcHRpb246IERpc2FibGUgdGhlIGNpcmN1bGFyIHBvc3QgcXVldWUgaW50ZXJydXB0Ci0gKgotICogbm90ZToKLSAqIFBDSSBtYXN0ZXIgZGlzYWJsZXMgb3V0Ym91bmQgRklGTyBpbnRlcnJ1cHQgb2YgZGV2aWNlCi0gKiAocHNjcmJhciBpcyB0aGUgYmFzZSkKLSAqIERldmljZSBkaXNhYmxlcyBpdHMgaW5ib3VuZCBGSUZPIGludGVycnVwdAotICogKGV1bWJiYXIgaXMgdGhlIGJhc2UpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIEkyT0ZJRk9JbnREaXNhYmxlKCBMT0NBVElPTiBsb2MsIHVuc2lnbmVkIGludCBiYXNlICkKLXsKLQotICAgIC8qIExPQ0FUSU9OIC0gUkVNT1RFIDogZGlzYWJsZSBvdXRib3VuZCBtZXNzYWdlIGludGVycnVwdCBvZiBkZXZpY2UsIHBjc3JiYXIgYXMgYmFzZQotICAgICAqICAgICAgICAgICAgTE9DQUwgIDogZGlzYWJsZSBsb2NhbCBpbmJvdW5kIG1lc3NhZ2UgaW50ZXJydXB0LCBldW1iYmFyIGFzIGJhc2UKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBpbnQgcmVnID0gKCBsb2MgPT0gUkVNT1RFID8gSTJPX09NSU1SIDogSTJPX0lNSU1SICk7Ci0gICAgdW5zaWduZWQgaW50IHZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIHJlZyApOwotCi0gICAgdmFsIHw9IDB4MDAwMDAwMjA7IC8qIG1hc2tlZCBvdXQgdGhlIG1zZyBpbnRlcnJ1cHQgYml0cyAqLwotICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCByZWcsIHZhbCApOwotCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGZ1bmN0aW9uOiBJMk9GSUZPT3ZlcmZsb3dJbnRFbmFibGUKLSAqCi0gKiBkZXNjcmlwdGlvbjogRW5hYmxlIHRoZSBjaXJjdWxhciBxdWV1ZSBvdmVyZmxvdyBpbnRlcnJ1cHQKLSAqCi0gKiBub3RlOgotICogRGV2aWNlIGVuYWJsZXMgaXRzIGluYm91bmQgRklGTyBwb3N0IG92ZXJmbG93IGludGVycnVwdAotICogYW5kIG91dGJvdW5kIGZyZWUgb3ZlcmZsb3cgaW50ZXJydXB0LgotICogZXVtYmJhciBpcyB0aGUgYmFzZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIEkyT0ZJRk9PdmVyZmxvd0ludEVuYWJsZSggdW5zaWduZWQgaW50IGV1bWJiYXIgICkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdmFsID0gbG9hZF9ydW50aW1lX3JlZyggZXVtYmJhciwgSTJPX0lNSU1SICk7Ci0KLSAgICB2YWwgJj0gMHhmZmZmZmU3ZjsgLyogY2xlYXIgdGhlIHR3byBvdmVyZmxvdyBpbnRlcnJ1cHQgYml0cyAqLwotICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBJMk9fSU1JTVIsIHZhbCApOwotCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogSTJPRklGT092ZXJmbG93SW50RGlzYWJsZQotICoKLSAqIGRlc2NyaXB0aW9uOiBEaXNhYmxlIHRoZSBjaXJjdWxhciBxdWV1ZSBvdmVyZmxvdyBpbnRlcnJ1cHQKLSAqCi0gKiBub3RlOgotICogRGV2aWNlIGRpc2FibGVzIGl0cyBpbmJvdW5kIHBvc3QgRklGTyBvdmVyZmxvdyBpbnRlcnJ1cHQKLSAqIGFuZCBvdXRib3VuZCBmcmVlIEZJRk8gb3ZlcmZsb3cgaW50ZXJydXB0Ci0gKiAoZXVtYmJhciBpcyB0aGUgYmFzZSkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgSTJPRklGT092ZXJmbG93SW50RGlzYWJsZSggdW5zaWduZWQgaW50IGV1bWJiYXIgKQotewotCi0gICAgdW5zaWduZWQgaW50IHZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGV1bWJiYXIsIEkyT19JTUlNUiApOwotCi0gICAgdmFsIHw9IDB4MDAwMDAxODA7IC8qIG1hc2tlZCBvdXQgdGhlIG1zZyBvdmVyZmxvdyBpbnRlcnJ1cHQgYml0cyAqLwotICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBldW1iYmFyLCBJMk9fSU1JTVIsIHZhbCApOwotfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMi5TIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTBmOWVmLi4wMDAwMDAwCi0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL2kybzIuUworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIGNvcHlyaWdodCBAIE1vdG9yb2xhLCAxOTk5Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZnVuY3Rpb246IGxvYWRfcnVudGltZV9yZWcKLSAqCi0gKiBpbnB1dDogIHIzIC0gdmFsdWUgb2YgZXVtYmJhcgotICogICAgICAgICByNCAtIHJlZ2lzdGVyIG9mZnNldCBpbiBlbWJlZGRlZCB1dGlsaXR5IHNwYWNlCi0gKgotICogb3V0cHV0OiByMyAtIHJlZ2lzdGVyIGNvbnRlbnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgLnRleHQKLSAgICAgIC5hbGlnbiAyCi0gICAgICAuZ2xvYmFsIGxvYWRfcnVudGltZV9yZWcKLQotbG9hZF9ydW50aW1lX3JlZzoKLQotCQkgIHhvciByNSxyNSxyNQotCSAgb3IgIHI1LHI1LHIzICAgICAgIC8qIHNhdmUgZXVtYmJhciAqLwotCi0JICAgICAgbHdicngJcjMscjQscjUKLQkgICAgICBzeW5jCi0KLQkgICAgICBiY2xyIDIwLCAwCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmdW5jdGlvbjogc3RvcmVfcnVudGltZV9yZWcKLSAqCi0gKiBpbnB1dDogcjMgLSB2YWx1ZSBvZiBldW1iYmFyCi0gKiAgICAgICAgcjQgLSByZWdpc3RlciBvZmZzZXQgaW4gZW1iZWRkZWQgdXRpbGl0eSBzcGFjZQotICogICAgICAgIHI1IC0gbmV3IHZhbHVlIHRvIGJlIHN0b3JlZAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCSAgIC50ZXh0Ci0JICAgLmFsaWduIDIKLQkgICAuZ2xvYmFsIHN0b3JlX3J1bnRpbWVfcmVnCi1zdG9yZV9ydW50aW1lX3JlZzoKLQotCQkgIHhvciByMCxyMCxyMAotCi0JICAgICAgc3R3YnJ4IHI1LCAgcjQsIHIzCi0JICAgICAgc3luYwotCi0JCSAgYmNsciAgIDIwLDAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL01ha2VmaWxlIGIvY3B1L21wYzgyNjAvTWFrZWZpbGUKaW5kZXggYjRjMjY5Zi4uYjFmMWMxOCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvTWFrZWZpbGUKKysrIGIvY3B1L21wYzgyNjAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjMgKzIzLDI3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vIGtnZGIubwotT0JKUwk9IHRyYXBzLm8gc2VyaWFsX3NtYy5vIHNlcmlhbF9zY2MubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gXAorQ09CSlMJPSB0cmFwcy5vIHNlcmlhbF9zbWMubyBzZXJpYWxfc2NjLm8gY3B1Lm8gY3B1X2luaXQubyBzcGVlZC5vIFwKIAkgIGludGVycnVwdHMubyBldGhlcl9zY2MubyBldGhlcl9mY2MubyBpMmMubyBjb21tcHJvYy5vIFwKIAkgIGJlZGJ1Z182MDNlLm8gcGNpLm8gc3BpLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCisKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCi0JJChBUikgY3J2ICRAICQoT0JKUykga2dkYi5vCisJJChBUikgY3J2ICRAICQoT0JKUykgJChvYmopa2dkYi5vCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9tcGM4M3h4L01ha2VmaWxlIGIvY3B1L21wYzgzeHgvTWFrZWZpbGUKaW5kZXggNjBkZjRjZC4uZjNmYTZmZCAxMDA2NDQKLS0tIGEvY3B1L21wYzgzeHgvTWFrZWZpbGUKKysrIGIvY3B1L21wYzgzeHgvTWFrZWZpbGUKQEAgLTEsNCArMSw3IEBACiAjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIyAKICMgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIyLDMxICsyNSwyNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKLVNUQVJUCT0gc3RhcnQubyBcCi0JcmVzZXR2ZWMubworU1RBUlQJPSBzdGFydC5vIHJlc2V0dmVjLm8KK0NPQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gaW50ZXJydXB0cy5vIFwKKwkgIGkyYy5vIHNwZF9zZHJhbS5vCiAKLUNPQkpTCT0gdHJhcHMubyBcCi0JICBjcHUubyBcCi0JICBjcHVfaW5pdC5vIFwKLQkgIHNwZWVkLm8gXAotCSAgaW50ZXJydXB0cy5vIFwKLQkgIGkyYy5vIFwKLQkgIHNwZF9zZHJhbS5vCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKIAotT0JKUwk9ICQoQ09CSlMpCi0KLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK2FsbDoJJChvYmopLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKIAogJChMSUIpOgkkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChDT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC9NYWtlZmlsZSBiL2NwdS9tcGM4NXh4L01ha2VmaWxlCmluZGV4IDUyOThkYzEuLmJiYzUwODQgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L01ha2VmaWxlCisrKyBiL2NwdS9tcGM4NXh4L01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKEMpIENvcHlyaWdodCAyMDAyLDIwMDMgTW90b3JvbGEgSW5jLgogIyBYaWFuZ2h1YSBYaWFvLFguWGlhb0Btb3Rvcm9sYS5jb20KICMKQEAgLTIzLDIzICsyNiwyNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubyByZXNldHZlYy5vCiBDT0JKUwk9IHRyYXBzLm8gY3B1Lm8gY3B1X2luaXQubyBzcGVlZC5vIGludGVycnVwdHMubyBcCiAJICBwY2kubyBzZXJpYWxfc2NjLm8gY29tbXByb2MubyBldGhlcl9mY2MubyBpMmMubyBzcGRfc2RyYW0ubwotT0JKUwk9ICQoQ09CSlMpCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvTWFrZWZpbGUgYi9jcHUvbXBjODZ4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDViMzZkCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzg2eHgvTWFrZWZpbGUKQEAgLTAsMCArMSw1MSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDIsMjAwMyBNb3Rvcm9sYSBJbmMuCisjIFhpYW5naHVhIFhpYW8sWC5YaWFvQG1vdG9yb2xhLmNvbQorIworIyAoQykgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuIChNQzg2eHggUG9ydCkKKyMgSmVmZiBCcm93bgorIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChDUFUpLmEKKworU1RBUlQJPSBzdGFydC5vICNyZXNldHZlYy5vCitTT0JKUwk9IGNhY2hlLm8KK0NPQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIHNwZWVkLm8gaW50ZXJydXB0cy5vIFwKKwkgIHBjaS5vIHBjaWVfaW5kaXJlY3QubyBpMmMubyBzcGRfc2RyYW0ubworCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChBU09CSlMpICQoT0JKUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9tcGM4Nnh4L2NhY2hlLlMgYi9jcHUvbXBjODZ4eC9jYWNoZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTZiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbXBjODZ4eC9jYWNoZS5TCkBAIC0wLDAgKzEsMzc0IEBACisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8bXBjODZ4eC5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKworI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKyNpbmNsdWRlIDxwcGNfZGVmcy5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorCisjaWZuZGVmIENBQ0hFX0xJTkVfU0laRQorIyBkZWZpbmUgQ0FDSEVfTElORV9TSVpFIEwxX0NBQ0hFX0JZVEVTCisjZW5kaWYKKworI2lmIENBQ0hFX0xJTkVfU0laRSA9PSAxMjgKKyNkZWZpbmUgTEdfQ0FDSEVfTElORV9TSVpFIDcKKyNlbGlmIENBQ0hFX0xJTkVfU0laRSA9PSAzMgorI2RlZmluZSBMR19DQUNIRV9MSU5FX1NJWkUgNQorI2VsaWYgQ0FDSEVfTElORV9TSVpFID09IDE2CisjZGVmaW5lIExHX0NBQ0hFX0xJTkVfU0laRSA0CisjZWxpZiBDQUNIRV9MSU5FX1NJWkUgPT0gOAorI2RlZmluZSBMR19DQUNIRV9MSU5FX1NJWkUgMworI2Vsc2UKKyMgZXJyb3IgIkludmFsaWQgY2FjaGUgbGluZSBzaXplISIKKyNlbmRpZgorCisvKgorICogTW9zdCBvZiB0aGlzIGNvZGUgaXMgdGFrZW4gZnJvbSA3NHh4Xzd4eC9jYWNoZS5TCisgKiBhbmQgdGhlbiBjbGVhbmVkIHVwIGEgYml0CisgKi8KKworLyoKKyAqIEludmFsaWRhdGUgTDEgaW5zdHJ1Y3Rpb24gY2FjaGUuCisgKi8KK19HTE9CQUwoaW52YWxpZGF0ZV9sMV9pbnN0cnVjdGlvbl9jYWNoZSkKKwkvKiB1c2UgaW52YWxpZGF0ZS1hbGwgYml0IGluIEhJRDAgKi8KKwltZnNwcglyMyxISUQwCisJb3JpCXIzLHIzLEhJRDBfSUNGSQorCW10c3ByCUhJRDAscjMKKwlpc3luYworCWJscgorCisvKgorICogSW52YWxpZGF0ZSBMMSBkYXRhIGNhY2hlLgorICovCitfR0xPQkFMKGludmFsaWRhdGVfbDFfZGF0YV9jYWNoZSkKKwltZnNwcglyMyxISUQwCisJb3JpCXIzLHIzLEhJRDBfRENGSQorCW10c3ByCUhJRDAscjMKKwlpc3luYworCWJscgorCisvKgorICogRmx1c2ggZGF0YSBjYWNoZS4KKyAqLworX0dMT0JBTChmbHVzaF9kYXRhX2NhY2hlKQorCWxpcwlyMywwCisJbGlzCXI1LENBQ0hFX0xJTkVfU0laRQorZmx1c2g6CisJY21wCTAsMSxyMyxyNQorCWJnZQlkb25lCisJbHd6CXI1LDAocjMpCisJbGlzCXI1LENBQ0hFX0xJTkVfU0laRQorCWFkZGkJcjMscjMsMHg0CisJYglmbHVzaAorZG9uZToKKwlibHIKKy8qCisgKiBXcml0ZSBhbnkgbW9kaWZpZWQgZGF0YSBjYWNoZSBibG9ja3Mgb3V0IHRvIG1lbW9yeQorICogYW5kIGludmFsaWRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gY2FjaGUgYmxvY2tzLgorICogVGhpcyBpcyBhIG5vLW9wIG9uIHRoZSA2MDEuCisgKgorICogZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKKyAqLworX0dMT0JBTChmbHVzaF9pY2FjaGVfcmFuZ2UpCisJbGkJcjUsQ0FDSEVfTElORV9TSVpFLTEKKwlhbmRjCXIzLHIzLHI1CisJc3ViZglyNCxyMyxyNAorCWFkZAlyNCxyNCxyNQorCXNyd2kuCXI0LHI0LExHX0NBQ0hFX0xJTkVfU0laRQorCWJlcWxyCisJbXRjdHIJcjQKKwltcglyNixyMworMToJZGNic3QJMCxyMworCWFkZGkJcjMscjMsQ0FDSEVfTElORV9TSVpFCisJYmRuegkxYgorCXN5bmMJCQkJLyogd2FpdCBmb3IgZGNic3QncyB0byBnZXQgdG8gcmFtICovCisJbXRjdHIJcjQKKzI6CWljYmkJMCxyNgorCWFkZGkJcjYscjYsQ0FDSEVfTElORV9TSVpFCisJYmRuegkyYgorCXN5bmMJCQkJLyogYWRkaXRpb25hbCBzeW5jIG5lZWRlZCBvbiBnNCAqLworCWlzeW5jCisJYmxyCisvKgorICogV3JpdGUgYW55IG1vZGlmaWVkIGRhdGEgY2FjaGUgYmxvY2tzIG91dCB0byBtZW1vcnkuCisgKiBEb2VzIG5vdCBpbnZhbGlkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGNhY2hlIGxpbmVzIChlc3BlY2lhbGx5IGZvcgorICogYW55IGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gY2FjaGUpLgorICoKKyAqIGNsZWFuX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCisgKi8KK19HTE9CQUwoY2xlYW5fZGNhY2hlX3JhbmdlKQorCWxpCXI1LENBQ0hFX0xJTkVfU0laRS0xCisJYW5kYwlyMyxyMyxyNQkvKiBhbGlnbiByMyBkb3duIHRvIGNhY2hlIGxpbmUgKi8KKwlzdWJmCXI0LHIzLHI0CS8qIHI0ID0gb2Zmc2V0IG9mIHN0b3AgZnJvbSBzdGFydCBvZiBjYWNoZSBsaW5lICovCisJYWRkCXI0LHI0LHI1CS8qIHI0ICs9IGNhY2hlX2xpbmVfc2l6ZS0xICovCisJc3J3aS4JcjQscjQsTEdfQ0FDSEVfTElORV9TSVpFICAvKiByNCA9IG51bWJlciBvZiBjYWNoZSBsaW5lcyB0byBmbHVzaCAqLworCWJlcWxyCQkJCSAgLyogaWYgcjQgPT0gMCByZXR1cm4gKi8KKwltdGN0cglyNAkJCSAgLyogY3RyID0gcjQgKi8KKworCXN5bmMKKzE6CWRjYnN0CTAscjMKKwlhZGRpCXIzLHIzLENBQ0hFX0xJTkVfU0laRQorCWJkbnoJMWIKKwlzeW5jCQkJCS8qIHdhaXQgZm9yIGRjYnN0J3MgdG8gZ2V0IHRvIHJhbSAqLworCWJscgorCisvKgorICogV3JpdGUgYW55IG1vZGlmaWVkIGRhdGEgY2FjaGUgYmxvY2tzIG91dCB0byBtZW1vcnkKKyAqIGFuZCBpbnZhbGlkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIGNhY2hlIGJsb2Nrcy4KKyAqCisgKiBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKQorICovCitfR0xPQkFMKGZsdXNoX2RjYWNoZV9yYW5nZSkKKwlsaQlyNSxDQUNIRV9MSU5FX1NJWkUtMQorCWFuZGMJcjMscjMscjUKKwlzdWJmCXI0LHIzLHI0CisJYWRkCXI0LHI0LHI1CisJc3J3aS4JcjQscjQsTEdfQ0FDSEVfTElORV9TSVpFCisJYmVxbHIKKwltdGN0cglyNAorCisJc3luYworMToJZGNiZgkwLHIzCisJYWRkaQlyMyxyMyxDQUNIRV9MSU5FX1NJWkUKKwliZG56CTFiCisJc3luYwkJCQkvKiB3YWl0IGZvciBkY2JmJ3MgdG8gZ2V0IHRvIHJhbSAqLworCWJscgorCisvKgorICogTGlrZSBhYm92ZSwgYnV0IGludmFsaWRhdGUgdGhlIEQtY2FjaGUuICBUaGlzIGlzIHVzZWQgYnkgdGhlIDh4eAorICogdG8gaW52YWxpZGF0ZSB0aGUgY2FjaGUgc28gdGhlIFBQQyBjb3JlIGRvZXNuJ3QgZ2V0IHN0YWxlIGRhdGEKKyAqIGZyb20gdGhlIENQTSAobm8gY2FjaGUgc25vb3BpbmcgaGVyZSA6LSkuCisgKgorICogaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKQorICovCitfR0xPQkFMKGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKQorCWxpCXI1LENBQ0hFX0xJTkVfU0laRS0xCisJYW5kYwlyMyxyMyxyNQorCXN1YmYJcjQscjMscjQKKwlhZGQJcjQscjQscjUKKwlzcndpLglyNCxyNCxMR19DQUNIRV9MSU5FX1NJWkUKKwliZXFscgorCW10Y3RyCXI0CisKKwlzeW5jCisxOglkY2JpCTAscjMKKwlhZGRpCXIzLHIzLENBQ0hFX0xJTkVfU0laRQorCWJkbnoJMWIKKwlzeW5jCQkJCS8qIHdhaXQgZm9yIGRjYmkncyB0byBnZXQgdG8gcmFtICovCisJYmxyCisKKy8qCisgKiBGbHVzaCBhIHBhcnRpY3VsYXIgcGFnZSBmcm9tIHRoZSBkYXRhIGNhY2hlIHRvIFJBTS4KKyAqIE5vdGU6IHRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGluc3RydWN0aW9uIGNhY2hlIGRvZXMgKm5vdCoKKyAqIHNub29wIGZyb20gdGhlIGRhdGEgY2FjaGUuCisgKgorICoJdm9pZCBfX2ZsdXNoX3BhZ2VfdG9fcmFtKHZvaWQgKnBhZ2UpCisgKi8KK19HTE9CQUwoX19mbHVzaF9wYWdlX3RvX3JhbSkKKwlybHdpbm0JcjMscjMsMCwwLDE5CQkvKiBHZXQgcGFnZSBiYXNlIGFkZHJlc3MgKi8KKwlsaQlyNCw0MDk2L0NBQ0hFX0xJTkVfU0laRQkvKiBOdW1iZXIgb2YgbGluZXMgaW4gYSBwYWdlICovCisJbXRjdHIJcjQKKwltcglyNixyMworMDoJZGNic3QJMCxyMwkJCS8qIFdyaXRlIGxpbmUgdG8gcmFtICovCisJYWRkaQlyMyxyMyxDQUNIRV9MSU5FX1NJWkUKKwliZG56CTBiCisJc3luYworCW10Y3RyCXI0CisxOglpY2JpCTAscjYKKwlhZGRpCXI2LHI2LENBQ0hFX0xJTkVfU0laRQorCWJkbnoJMWIKKwlzeW5jCisJaXN5bmMKKwlibHIKKworLyoKKyAqIEZsdXNoIGEgcGFydGljdWxhciBwYWdlIGZyb20gdGhlIGluc3RydWN0aW9uIGNhY2hlLgorICogTm90ZTogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgZG9lcyAqbm90KgorICogc25vb3AgZnJvbSB0aGUgZGF0YSBjYWNoZS4KKyAqCisgKgl2b2lkIF9fZmx1c2hfaWNhY2hlX3BhZ2Uodm9pZCAqcGFnZSkKKyAqLworX0dMT0JBTChfX2ZsdXNoX2ljYWNoZV9wYWdlKQorCWxpCXI0LDQwOTYvQ0FDSEVfTElORV9TSVpFCS8qIE51bWJlciBvZiBsaW5lcyBpbiBhIHBhZ2UgKi8KKwltdGN0cglyNAorMToJaWNiaQkwLHIzCisJYWRkaQlyMyxyMyxDQUNIRV9MSU5FX1NJWkUKKwliZG56CTFiCisJc3luYworCWlzeW5jCisJYmxyCisKKy8qCisgKiBDbGVhciBhIHBhZ2UgdXNpbmcgdGhlIGRjYnogaW5zdHJ1Y3Rpb24sIHdoaWNoIGRvZXNuJ3QgY2F1c2UgYW55CisgKiBtZW1vcnkgdHJhZmZpYyAoZXhjZXB0IHRvIHdyaXRlIG91dCBhbnkgY2FjaGUgbGluZXMgd2hpY2ggZ2V0CisgKiBkaXNwbGFjZWQpLiAgVGhpcyBvbmx5IHdvcmtzIG9uIGNhY2hlYWJsZSBtZW1vcnkuCisgKi8KK19HTE9CQUwoY2xlYXJfcGFnZSkKKwlsaQlyMCw0MDk2L0NBQ0hFX0xJTkVfU0laRQorCW10Y3RyCXIwCisxOglkY2J6CTAscjMKKwlhZGRpCXIzLHIzLENBQ0hFX0xJTkVfU0laRQorCWJkbnoJMWIKKwlibHIKKworLyoKKyAqIEVuYWJsZSBMMSBJbnN0cnVjdGlvbiBjYWNoZQorICovCitfR0xPQkFMKGljYWNoZV9lbmFibGUpCisJbWZzcHIJcjMsIEhJRDAKKwlsaQlyNSwgSElEMF9JQ0ZJfEhJRDBfSUxPQ0sKKwlhbmRjCXIzLCByMywgcjUKKwlvcmkJcjMsIHIzLCBISUQwX0lDRQorCW9yaQlyNSwgcjMsIEhJRDBfSUNGSQorCW10c3ByCUhJRDAsIHI1CisJbXRzcHIJSElEMCwgcjMKKwlpc3luYworCWJscgorCisvKgorICogRGlzYWJsZSBMMSBJbnN0cnVjdGlvbiBjYWNoZQorICovCitfR0xPQkFMKGljYWNoZV9kaXNhYmxlKQorCW1mc3ByCXIzLCBISUQwCisJbGkJcjUsIDAKKwlvcmkJcjUsIHI1LCBISUQwX0lDRQorCWFuZGMJcjMsIHIzLCByNQorCW10c3ByCUhJRDAsIHIzCisJaXN5bmMKKwlibHIKKworLyoKKyAqIElzIGluc3RydWN0aW9uIGNhY2hlIGVuYWJsZWQ/CisgKi8KK19HTE9CQUwoaWNhY2hlX3N0YXR1cykKKwltZnNwcglyMywgSElEMAorCWFuZGkuCXIzLCByMywgSElEMF9JQ0UKKwlibHIKKworCitfR0xPQkFMKGwxZGNhY2hlX2VuYWJsZSkKKwltZnNwcglyMywgSElEMAorCWxpCXI1LCBISUQwX0RDRkl8SElEMF9ETE9DSworCWFuZGMJcjMsIHIzLCByNQorCW10c3ByCUhJRDAsIHIzCQkvKiBubyBpbnZhbGlkYXRlLCB1bmxvY2sgKi8KKwlvcmkJcjMsIHIzLCBISUQwX0RDRQorCW9yaQlyNSwgcjMsIEhJRDBfRENGSQorCW10c3ByCUhJRDAsIHI1CQkvKiBlbmFibGUgKyBpbnZhbGlkYXRlICovCisJbXRzcHIJSElEMCwgcjMJCS8qIGVuYWJsZSAqLworCXN5bmMKKwlibHIKKworLyoKKyAqIEVuYWJsZSBkYXRhIGNhY2hlKHMpIC0gTDEgYW5kIG9wdGlvbmFsbHkgTDIKKyAqIENhbGxzIGwyY2FjaGVfZW5hYmxlLiBMUiBzYXZlZCBpbiByNQorICovCitfR0xPQkFMKGRjYWNoZV9lbmFibGUpCisJbWZzcHIJcjMsIEhJRDAKKwlsaQlyNSwgSElEMF9EQ0ZJfEhJRDBfRExPQ0sKKwlhbmRjCXIzLCByMywgcjUKKwltdHNwcglISUQwLCByMwkJLyogbm8gaW52YWxpZGF0ZSwgdW5sb2NrICovCisJb3JpCXIzLCByMywgSElEMF9EQ0UKKwlvcmkJcjUsIHIzLCBISUQwX0RDRkkKKwltdHNwcglISUQwLCByNQkJLyogZW5hYmxlICsgaW52YWxpZGF0ZSAqLworCW10c3ByCUhJRDAsIHIzCQkvKiBlbmFibGUgKi8KKwlzeW5jCisjaWZkZWYgQ0ZHX0wyCisJbWZscglyNQorCWJsCWwyY2FjaGVfZW5hYmxlCQkvKiB1c2VzIHIzIGFuZCByNCAqLworCXN5bmMKKwltdGxyCXI1CisjZW5kaWYKKwlibHIKKworCisvKgorICogRGlzYWJsZSBkYXRhIGNhY2hlKHMpIC0gTDEgYW5kIG9wdGlvbmFsbHkgTDIKKyAqIENhbGxzIGZsdXNoX2RhdGFfY2FjaGUgYW5kIGwyY2FjaGVfZGlzYWJsZV9ub19mbHVzaC4KKyAqIExSIHNhdmVkIGluIHI0CisgKi8KK19HTE9CQUwoZGNhY2hlX2Rpc2FibGUpCisJbWZscglyNAkJCS8qIHNhdmUgbGluayByZWdpc3RlciAqLworCWJsCWZsdXNoX2RhdGFfY2FjaGUJLyogdXNlcyByMyBhbmQgcjUgKi8KKwlzeW5jCisJbWZzcHIJcjMsIEhJRDAKKwlsaQlyNSwgSElEMF9EQ0ZJfEhJRDBfRExPQ0sKKwlhbmRjCXIzLCByMywgcjUKKwltdHNwcglISUQwLCByMwkJLyogbm8gaW52YWxpZGF0ZSwgdW5sb2NrICovCisJbGkJcjUsIEhJRDBfRENFfEhJRDBfRENGSQorCWFuZGMJcjMsIHIzLCByNQkJLyogbm8gZW5hYmxlLCBubyBpbnZhbGlkYXRlICovCisJbXRzcHIJSElEMCwgcjMKKwlzeW5jCisjaWZkZWYgQ0ZHX0wyCisJYmwJbDJjYWNoZV9kaXNhYmxlX25vX2ZsdXNoIC8qIHVzZXMgcjMgKi8KKyNlbmRpZgorCW10bHIJcjQJCQkvKiByZXN0b3JlIGxpbmsgcmVnaXN0ZXIgKi8KKwlibHIKKworLyoKKyAqIElzIGRhdGEgY2FjaGUgZW5hYmxlZD8KKyAqLworX0dMT0JBTChkY2FjaGVfc3RhdHVzKQorCW1mc3ByCXIzLCBISUQwCisJYW5kaS4JcjMsIHIzLCBISUQwX0RDRQorCWJscgorCisvKgorICogSW52YWxpZGF0ZSBMMiBjYWNoZSB1c2luZyBMMkksIGFzc3VtZSBMMiBpcyBlbmFibGVkCisgKi8KK19HTE9CQUwobDJjYWNoZV9pbnZhbGlkYXRlKQorCW1mc3ByCXIzLCBsMmNyCisJcmx3aW5tLglyMywgcjMsIDAsIDAsIDAKKwliZXEJMWYKKworCW1mc3ByCXIzLCBsMmNyCisJcmx3aW5tCXIzLCByMywgMCwgMSwgMzEKKworI2lmZGVmCUNPTkZJR19BTFRJVkVDCisJZHNzYWxsCisjZW5kaWYKKwlzeW5jCisJbXRzcHIJbDJjciwgcjMKKwlzeW5jCisxOgltZnNwcglyMywgbDJjcgorCW9yaXMJcjMsIHIzLCBMMkNSX0wySUBoCisJbXRzcHIJbDJjciwgcjMKKworaW52bDI6CisJbWZzcHIJcjMsIGwyY3IKKwlhbmRpLglyMywgcjMsIEwyQ1JfTDJJQGgKKwlibmUJaW52bDIKKwlibHIKKworLyoKKyAqIEVuYWJsZSBMMiBjYWNoZQorICogQ2FsbHMgbDJjYWNoZV9pbnZhbGlkYXRlLiBMUiBpcyBzYXZlZCBpbiByNAorICovCitfR0xPQkFMKGwyY2FjaGVfZW5hYmxlKQorCW1mbHIJcjQJCQkvKiBzYXZlIGxpbmsgcmVnaXN0ZXIgKi8KKwlibAlsMmNhY2hlX2ludmFsaWRhdGUJLyogdXNlcyByMyAqLworCXN5bmMKKwlsaXMJcjMsIEwyX0VOQUJMRUBoCisJb3JpCXIzLCByMywgTDJfRU5BQkxFQGwKKwltdHNwcglsMmNyLCByMworCWlzeW5jCisJbXRscglyNAkJCS8qIHJlc3RvcmUgbGluayByZWdpc3RlciAqLworCWJscgorCisvKgorICogRGlzYWJsZSBMMiBjYWNoZQorICogQ2FsbHMgZmx1c2hfZGF0YV9jYWNoZS4gTFIgaXMgc2F2ZWQgaW4gcjQKKyAqLworX0dMT0JBTChsMmNhY2hlX2Rpc2FibGUpCisJbWZscglyNAkJCS8qIHNhdmUgbGluayByZWdpc3RlciAqLworCWJsCWZsdXNoX2RhdGFfY2FjaGUJLyogdXNlcyByMyBhbmQgcjUgKi8KKwlzeW5jCisJbXRscglyNAkJCS8qIHJlc3RvcmUgbGluayByZWdpc3RlciAqLworbDJjYWNoZV9kaXNhYmxlX25vX2ZsdXNoOgkJLyogcHJvdmlkZSB3YXkgdG8gZGlzYWJsZSBMMiB3L28gZmx1c2hpbmcgKi8KKwlsaXMJcjMsIEwyX0lOSVRAaAorCW9yaQlyMywgcjMsIEwyX0lOSVRAbAorCW10c3ByCWwyY3IsIHIzCisJaXN5bmMKKwlibHIKZGlmZiAtLWdpdCBhL2NwdS9tcGM4Nnh4L2NvbmZpZy5tayBiL2NwdS9tcGM4Nnh4L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzU0ZjRhCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzg2eHgvY29uZmlnLm1rCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorIyBKZWZmIEJyb3duCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK1BMQVRGT1JNX1JFTEZMQUdTICs9IC1mUElDIC1mZml4ZWQtcjE0IC1tZWFiaQorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19NUEM4Nnh4IC1mZml4ZWQtcjIgLWZmaXhlZC1yMjkgLW1zdHJpbmcKZGlmZiAtLWdpdCBhL2NwdS9tcGM4Nnh4L2NwdS5jIGIvY3B1L21wYzg2eHgvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxYjI0MwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4Nnh4L2NwdS5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKKyAqIEplZmYgQnJvd24KKyAqIFNyaWthbnRoIFNyaW5pdmFzYW4gKHNyaWthbnRoLnNyaW5pdmFzYW5AZnJlZXNjYWxlLmNvbSkKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8bXBjODZ4eC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKQorI2luY2x1ZGUgPGZ0X2J1aWxkLmg+CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NUEM4NjQxSFBDTgorZXh0ZXJuIHZvaWQgbXBjODY0MV9yZXNldF9ib2FyZChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywKKwkJCQlpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorCisKK2ludAorY2hlY2tjcHUodm9pZCkKK3sKKwlzeXNfaW5mb190IHN5c2luZm87CisJdWludCBwdnIsIHN2cjsKKwl1aW50IHZlcjsKKwl1aW50IG1ham9yLCBtaW5vcjsKKwl1aW50IGxjcnI7CQkvKiBsb2NhbCBidXMgY2xvY2sgcmF0aW8gcmVnaXN0ZXIgKi8KKwl1aW50IGNsa2RpdjsJCS8qIGNsb2NrIGRpdmlkZXIgcG9ydGlvbiBvZiBsY3JyICovCisKKwlwdXRzKCJGcmVlc2NhbGUgUG93ZXJQQ1xuIik7CisKKwlwdnIgPSBnZXRfcHZyKCk7CisJdmVyID0gUFZSX1ZFUihwdnIpOworCW1ham9yID0gUFZSX01BSihwdnIpOworCW1pbm9yID0gUFZSX01JTihwdnIpOworCisJcHV0cygiQ1BVOlxuIik7CisJcHV0cygiICAgIENvcmU6ICIpOworCisJc3dpdGNoICh2ZXIpIHsKKwljYXNlIFBWUl9WRVIoUFZSXzg2eHgpOgorCQlwdXRzKCJFNjAwIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXB1dHMoIlVua25vd24iKTsKKwkJYnJlYWs7CisJfQorCXByaW50ZigiLCBWZXJzaW9uOiAlZC4lZCwgKDB4JTA4eClcbiIsIG1ham9yLCBtaW5vciwgcHZyKTsKKworCXN2ciA9IGdldF9zdnIoKTsKKwl2ZXIgPSBTVlJfVkVSKHN2cik7CisJbWFqb3IgPSBTVlJfTUFKKHN2cik7CisJbWlub3IgPSBTVlJfTUlOKHN2cik7CisKKwlwdXRzKCIgICAgU3lzdGVtOiAiKTsKKwlzd2l0Y2ggKHZlcikgeworCWNhc2UgU1ZSXzg2NDE6CisJICAgIGlmIChTVlJfU1VCVkVSKHN2cikgPT0gMSkgeworCQlwdXRzKCI4NjQxRCIpOworCSAgICB9IGVsc2UgeworCQlwdXRzKCI4NjQxIik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkJcHV0cygiVW5rbm93biIpOworCQlicmVhazsKKwl9CisJcHJpbnRmKCIsIFZlcnNpb246ICVkLiVkLCAoMHglMDh4KVxuIiwgbWFqb3IsIG1pbm9yLCBzdnIpOworCisJZ2V0X3N5c19pbmZvKCZzeXNpbmZvKTsKKworCXB1dHMoIiAgICBDbG9ja3M6ICIpOworCXByaW50ZigiQ1BVOiU0bHUgTUh6LCAiLCBzeXNpbmZvLmZyZXFQcm9jZXNzb3IgLyAxMDAwMDAwKTsKKwlwcmludGYoIk1QWDolNGx1IE1IeiwgIiwgc3lzaW5mby5mcmVxU3lzdGVtQnVzIC8gMTAwMDAwMCk7CisJcHJpbnRmKCJERFI6JTRsdSBNSHosICIsIHN5c2luZm8uZnJlcVN5c3RlbUJ1cyAvIDIwMDAwMDApOworCisjaWYgZGVmaW5lZChDRkdfTEJDX0xDUlIpCisJbGNyciA9IENGR19MQkNfTENSUjsKKyNlbHNlCisJeworCQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOworCQl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAmaW1tYXAtPmltX2xiYzsKKworCQlsY3JyID0gbGJjLT5sY3JyOworCX0KKyNlbmRpZgorCWNsa2RpdiA9IGxjcnIgJiAweDBmOworCWlmIChjbGtkaXYgPT0gMiB8fCBjbGtkaXYgPT0gNCB8fCBjbGtkaXYgPT0gOCkgeworCQlwcmludGYoIkxCQzolNGx1IE1IelxuIiwKKwkJICAgICAgIHN5c2luZm8uZnJlcVN5c3RlbUJ1cyAvIDEwMDAwMDAgLyBjbGtkaXYpOworCX0gZWxzZSB7CisJCXByaW50ZigiICAgIExCQzogdW5rbm93biAobGNycjogMHglMDh4KVxuIiwgbGNycik7CisJfQorCisJcHV0cygiICAgIEwyOiAiKTsKKwlpZiAoZ2V0X2wyY3IoKSAmIDB4ODAwMDAwMDApCisJCXB1dHMoIkVuYWJsZWRcbiIpOworCWVsc2UKKwkJcHV0cygiRGlzYWJsZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitzb2Z0X3Jlc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyKQoreworI2lmbmRlZiBDT05GSUdfTVBDODY0MUhQQ04KKworCS8qCisJICogU1JSMCBoYXMgc3lzdGVtIHJlc2V0IHZlY3RvciwgU1JSMSBoYXMgZGVmYXVsdCBNU1IgdmFsdWUKKwkgKiByZmkgcmVzdG9yZXMgTVNSIGZyb20gU1JSMSBhbmQgc2V0cyB0aGUgUEMgdG8gdGhlIFNSUjAgdmFsdWUKKwkgKi8KKworCV9fYXNtX18gX192b2xhdGlsZV9fICgibXRzcHIJMjYsICUwIgkJOjogInIiIChhZGRyKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsaQk0LCAoMSA8PCA2KSIJOjo6ICJyNCIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgibXRzcHIJMjcsIDQiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJmaSIpOworCisjZWxzZSAvKiBDT05GSUdfTVBDODY0MUhQQ04gKi8KKworCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1JTVCwgMCk7CisKKyNlbmRpZiAvKiAhQ09ORklHX01QQzg2NDFIUENOICovCisKKwl3aGlsZSAoMSkgOwkJLyogbm90IHJlYWNoZWQgKi8KK30KKworCisvKgorICogTm8gZ2VuZXJpYyB3YXkgdG8gZG8gYm9hcmQgcmVzZXQuIFNpbXBseSBjYWxsIHNvZnRfcmVzZXQuCisgKi8KK3ZvaWQKK2RvX3Jlc2V0KGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworI2lmbmRlZiBDT05GSUdfTVBDODY0MUhQQ04KKworI2lmZGVmIENGR19SRVNFVF9BRERSRVNTCisJdWxvbmcgYWRkciA9IENGR19SRVNFVF9BRERSRVNTOworI2Vsc2UKKwkvKgorCSAqIG5vdGU6IHdoZW4gQ0ZHX01PTklUT1JfQkFTRSBwb2ludHMgdG8gYSBSQU0gYWRkcmVzcywKKwkgKiBDRkdfTU9OSVRPUl9CQVNFIC0gc2l6ZW9mICh1bG9uZykgaXMgdXN1YWxseSBhIHZhbGlkCisJICogYWRkcmVzcy4gQmV0dGVyIHBpY2sgYW4gYWRkcmVzcyBrbm93biB0byBiZSBpbnZhbGlkIG9uIHlvdXIKKwkgKiBzeXN0ZW0gYW5kIGFzc2lnbiBpdCB0byBDRkdfUkVTRVRfQUREUkVTUy4KKwkgKi8KKwl1bG9uZyBhZGRyID0gQ0ZHX01PTklUT1JfQkFTRSAtIHNpemVvZih1bG9uZyk7CisjZW5kaWYKKworCS8qIGZsdXNoIGFuZCBkaXNhYmxlIEkvRCBjYWNoZSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fICgibWZzcHIJMywgMTAwOCIJOjo6ICJyMyIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgib3JpCTUsIDUsIDB4Y2MwMCIJOjo6ICJyNSIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgib3JpCTQsIDMsIDB4YzAwIgk6OjogInI0Iik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJhbmRjCTUsIDMsIDUiCTo6OiAicjUiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm10c3ByCTEwMDgsIDQiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImlzeW5jIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtdHNwcgkxMDA4LCA1Iik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpc3luYyIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCisJc29mdF9yZXN0YXJ0KGFkZHIpOworCisjZWxzZSAvKiBDT05GSUdfTVBDODY0MUhQQ04gKi8KKworCW1wYzg2NDFfcmVzZXRfYm9hcmQoY21kdHAsIGZsYWcsIGFyZ2MsIGFyZ3YpOworCisjZW5kaWYgLyogIUNPTkZJR19NUEM4NjQxSFBDTiAqLworCisJd2hpbGUgKDEpIDsJCS8qIG5vdCByZWFjaGVkICovCit9CisKKworLyoKKyAqIEdldCB0aW1lYmFzZSBjbG9jayBmcmVxdWVuY3kKKyAqLwordW5zaWduZWQgbG9uZworZ2V0X3RiY2xrKHZvaWQpCit7CisJc3lzX2luZm9fdCBzeXNfaW5mbzsKKworCWdldF9zeXNfaW5mbygmc3lzX2luZm8pOworCXJldHVybiAoc3lzX2luZm8uZnJlcVN5c3RlbUJ1cyArIDNMKSAvIDRMOworfQorCisKKyNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKK3ZvaWQKK3dhdGNoZG9nX3Jlc2V0KHZvaWQpCit7Cit9CisjZW5kaWYJLyogQ09ORklHX1dBVENIRE9HICovCisKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCit2b2lkCitkbWFfaW5pdCh2b2lkKQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9kbWFfdCAqZG1hID0gJmltbWFwLT5pbV9kbWE7CisKKwlkbWEtPnNhdHIwID0gMHgwMDA0MDAwMDsKKwlkbWEtPmRhdHIwID0gMHgwMDA0MDAwMDsKKwlhc20oInN5bmM7IGlzeW5jIik7Cit9CisKK3VpbnQKK2RtYV9jaGVjayh2b2lkKQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9kbWFfdCAqZG1hID0gJmltbWFwLT5pbV9kbWE7CisJdm9sYXRpbGUgdWludCBzdGF0dXMgPSBkbWEtPnNyMDsKKworCS8qIFdoaWxlIHRoZSBjaGFubmVsIGlzIGJ1c3ksIHNwaW4gKi8KKwl3aGlsZSAoKHN0YXR1cyAmIDQpID09IDQpIHsKKwkJc3RhdHVzID0gZG1hLT5zcjA7CisJfQorCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXByaW50ZigiRE1BIEVycm9yOiBzdGF0dXMgPSAleFxuIiwgc3RhdHVzKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50CitkbWFfeGZlcih2b2lkICpkZXN0LCB1aW50IGNvdW50LCB2b2lkICpzcmMpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX2RtYV90ICpkbWEgPSAmaW1tYXAtPmltX2RtYTsKKworCWRtYS0+ZGFyMCA9ICh1aW50KSBkZXN0OworCWRtYS0+c2FyMCA9ICh1aW50KSBzcmM7CisJZG1hLT5iY3IwID0gY291bnQ7CisJZG1hLT5tcjAgPSAweGYwMDAwMDQ7CisJYXNtKCJzeW5jO2lzeW5jIik7CisJZG1hLT5tcjAgPSAweGYwMDAwMDU7CisJYXNtKCJzeW5jO2lzeW5jIik7CisJcmV0dXJuIGRtYV9jaGVjaygpOworfQorCisjZW5kaWYJLyogQ09ORklHX0REUl9FQ0MgKi8KKworCisjaWZkZWYgQ09ORklHX09GX0ZMQVRfVFJFRQordm9pZAorZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCXUzMiAqcDsKKwl1bG9uZyBjbG9jazsKKwlpbnQgbGVuOworCisJY2xvY2sgPSBiZC0+YmlfYnVzZnJlcTsKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi9jcHVzLyIgT0ZfQ1BVICIvYnVzLWZyZXF1ZW5jeSIsICZsZW4pOworCWlmIChwICE9IE5VTEwpCisJCSpwID0gY3B1X3RvX2JlMzIoY2xvY2spOworCisJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9zZXJpYWxANDUwMC9jbG9jay1mcmVxdWVuY3kiLCAmbGVuKTsKKwlpZiAocCAhPSBOVUxMKQorCQkqcCA9IGNwdV90b19iZTMyKGNsb2NrKTsKKworCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvc2VyaWFsQDQ2MDAvY2xvY2stZnJlcXVlbmN5IiwgJmxlbik7CisJaWYgKHAgIT0gTlVMTCkKKwkJKnAgPSBjcHVfdG9fYmUzMihjbG9jayk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4NlhYX1RTRUMxKQorCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMjQwMDAvbWFjLWFkZHJlc3MiLCAmbGVuKTsKKwltZW1jcHkocCwgYmQtPmJpX2VuZXRhZGRyLCA2KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDMikKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI1MDAwL21hYy1hZGRyZXNzIiwgJmxlbik7CisJbWVtY3B5KHAsIGJkLT5iaV9lbmV0MWFkZHIsIDYpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM4NlhYX1RTRUMzKQorCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMjYwMDAvbWFjLWFkZHJlc3MiLCAmbGVuKTsKKwltZW1jcHkocCwgYmQtPmJpX2VuZXQyYWRkciwgNik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX01QQzg2WFhfVFNFQzQpCisJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNzAwMC9tYWMtYWRkcmVzcyIsICZsZW4pOworCW1lbWNweShwLCBiZC0+YmlfZW5ldDNhZGRyLCA2KTsKKyNlbmRpZgorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tcGM4Nnh4L2NwdV9pbml0LmMgYi9jcHUvbXBjODZ4eC9jcHVfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NzNkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbXBjODZ4eC9jcHVfaW5pdC5jCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBKZWZmIEJyb3duCisgKiBTcmlrYW50aCBTcmluaXZhc2FuIChzcmlrYW50aC5zcmluaXZhc2FuQGZyZWVzY2FsZS5jb20pCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIGNwdV9pbml0LmMgLSBsb3cgbGV2ZWwgY3B1IGluaXQKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bXBjODZ4eC5oPgorCisvKgorICogQnJlYXRoZSBzb21lIGxpZmUgaW50byB0aGUgQ1BVLi4uCisgKgorICogU2V0IHVwIHRoZSBtZW1vcnkgbWFwCisgKiBpbml0aWFsaXplIGEgYnVuY2ggb2YgcmVnaXN0ZXJzCisgKi8KKwordm9pZCBjcHVfaW5pdF9mKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisJdm9sYXRpbGUgaW1tYXBfdCAgICAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGNjc3JfbGJjX3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbGJjOworCisJLyogUG9pbnRlciBpcyB3cml0YWJsZSBzaW5jZSB3ZSBhbGxvY2F0ZWQgYSByZWdpc3RlciBmb3IgaXQgKi8KKwlnZCA9IChnZF90ICopIChDRkdfSU5JVF9SQU1fQUREUiArIENGR19HQkxfREFUQV9PRkZTRVQpOworCisJLyogQ2xlYXIgaW5pdGlhbCBnbG9iYWwgZGF0YSAqLworCW1lbXNldCAoKHZvaWQgKikgZ2QsIDAsIHNpemVvZiAoZ2RfdCkpOworCisJLyogTWFwIGJhbmtzIDAgYW5kIDEgdG8gdGhlIEZMQVNIIGJhbmtzIDAgYW5kIDEgYXQgcHJlbGltaW5hcnkKKwkgKiBhZGRyZXNzZXMgLSB0aGVzZSBoYXZlIHRvIGJlIG1vZGlmaWVkIGxhdGVyIHdoZW4gRkxBU0ggc2l6ZQorCSAqIGhhcyBiZWVuIGRldGVybWluZWQKKwkgKi8KKworI2lmIGRlZmluZWQoQ0ZHX09SMF9SRU1BUCkKKwltZW1jdGwtPm9yMCA9IENGR19PUjBfUkVNQVA7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENGR19PUjFfUkVNQVApCisJbWVtY3RsLT5vcjEgPSBDRkdfT1IxX1JFTUFQOworI2VuZGlmCisKKwkvKiBub3cgcmVzdHJpY3QgdG8gcHJlbGltaW5hcnkgcmFuZ2UgKi8KKyNpZiBkZWZpbmVkKENGR19CUjBfUFJFTElNKSAmJiBkZWZpbmVkKENGR19PUjBfUFJFTElNKQorCW1lbWN0bC0+YnIwID0gQ0ZHX0JSMF9QUkVMSU07CisJbWVtY3RsLT5vcjAgPSBDRkdfT1IwX1BSRUxJTTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfQlIxX1BSRUxJTSkgJiYgZGVmaW5lZChDRkdfT1IxX1BSRUxJTSkKKwltZW1jdGwtPm9yMSA9IENGR19PUjFfUFJFTElNOworCW1lbWN0bC0+YnIxID0gQ0ZHX0JSMV9QUkVMSU07CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0JSMl9QUkVMSU0pICYmIGRlZmluZWQoQ0ZHX09SMl9QUkVMSU0pCisJbWVtY3RsLT5vcjIgPSBDRkdfT1IyX1BSRUxJTTsKKwltZW1jdGwtPmJyMiA9IENGR19CUjJfUFJFTElNOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19CUjNfUFJFTElNKSAmJiBkZWZpbmVkKENGR19PUjNfUFJFTElNKQorCW1lbWN0bC0+b3IzID0gQ0ZHX09SM19QUkVMSU07CisJbWVtY3RsLT5icjMgPSBDRkdfQlIzX1BSRUxJTTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfQlI0X1BSRUxJTSkgJiYgZGVmaW5lZChDRkdfT1I0X1BSRUxJTSkKKwltZW1jdGwtPm9yNCA9IENGR19PUjRfUFJFTElNOworCW1lbWN0bC0+YnI0ID0gQ0ZHX0JSNF9QUkVMSU07CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0JSNV9QUkVMSU0pICYmIGRlZmluZWQoQ0ZHX09SNV9QUkVMSU0pCisJbWVtY3RsLT5vcjUgPSBDRkdfT1I1X1BSRUxJTTsKKwltZW1jdGwtPmJyNSA9IENGR19CUjVfUFJFTElNOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19CUjZfUFJFTElNKSAmJiBkZWZpbmVkKENGR19PUjZfUFJFTElNKQorCW1lbWN0bC0+b3I2ID0gQ0ZHX09SNl9QUkVMSU07CisJbWVtY3RsLT5icjYgPSBDRkdfQlI2X1BSRUxJTTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfQlI3X1BSRUxJTSkgJiYgZGVmaW5lZChDRkdfT1I3X1BSRUxJTSkKKwltZW1jdGwtPm9yNyA9IENGR19PUjdfUFJFTElNOworCW1lbWN0bC0+YnI3ID0gQ0ZHX0JSN19QUkVMSU07CisjZW5kaWYKKworCS8qIGVuYWJsZSB0aGUgdGltZWJhc2UgYml0IGluIEhJRDAgKi8KKwlzZXRfaGlkMChnZXRfaGlkMCgpIHwgMHg0MDAwMDAwKTsKKworCS8qIGVuYWJsZSBTWU5DQkUgfCBBQkUgYml0cyBpbiAgSElEMSAqLworCXNldF9oaWQxKGdldF9oaWQxKCkgfCAweDAwMDAwQzAwKTsKK30KKworLyoKKyAqIGluaXRpYWxpemUgaGlnaGVyIGxldmVsIHBhcnRzIG9mIENQVSBsaWtlIHRpbWVycworICovCitpbnQgY3B1X2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvaTJjLmMgYi9jcHUvbXBjODZ4eC9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTllY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzg2eHgvaTJjLmMKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMsTW90b3JvbGEgSW5jLgorICogWGlhbmdodWEgWGlhbyA8eC54aWFvQG1vdG9yb2xhLmNvbT4KKyAqIEFkYXB0ZWQgZm9yIE1vdG9yb2xhIDg1eHggY2hpcC4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIEdsZWIgTmF0YXBvdiA8Z25hdGFwb3ZAbXJ2LmNvbT4KKyAqIFNvbWUgYml0cyBhcmUgdGFrZW4gZnJvbSBsaW51eCBkcml2ZXIgd3JpdGVuIGJ5IGFkcmlhbkBodW1ib2xkdC5jby51aworICoKKyAqIE1vZGlmaWVkIGZvciBNUEM4Nnh4IGJ5IEplZmYgQnJvd24KKyAqCisgKiBIYXJkd2FyZSBJMkMgZHJpdmVyIGZvciBNUEMxMDcgUENJIGJyaWRnZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWZkZWYgQ09ORklHX0hBUkRfSTJDCisjaW5jbHVkZSA8aTJjLmg+CisKKyNkZWZpbmUgVElNRU9VVCAoQ0ZHX0haLzQpCisKKyNkZWZpbmUgSTJDX0FkZHIgKCh1OCAqKShDRkdfQ0NTUkJBUiArIDB4MzEwMCkpCisKKyNkZWZpbmUgSTJDQURSICAmSTJDX0FkZHJbMF0KKyNkZWZpbmUgSTJDRkRSICAmSTJDX0FkZHJbNF0KKyNkZWZpbmUgSTJDQ0NSICAmSTJDX0FkZHJbOF0KKyNkZWZpbmUgSTJDQ1NSICAmSTJDX0FkZHJbMTJdCisjZGVmaW5lIEkyQ0NEUiAgJkkyQ19BZGRyWzE2XQorI2RlZmluZSBJMkNERlNSUiAmSTJDX0FkZHJbMjBdCisKKyNkZWZpbmUgSTJDX1JFQUQgIDEKKyNkZWZpbmUgSTJDX1dSSVRFIDAKKwordm9pZAoraTJjX2luaXQoaW50IHNwZWVkLCBpbnQgc2xhdmVhZGQpCit7CisJLyogc3RvcCBJMkMgY29udHJvbGxlciAqLworCXdyaXRlYigweDAsIEkyQ0NDUik7CisKKwkvKiBzZXQgY2xvY2sgKi8KKwl3cml0ZWIoMHgzZiwgSTJDRkRSKTsKKworCS8qIHNldCBkZWZhdWx0IGZpbHRlciAqLworCXdyaXRlYigweDEwLCBJMkNERlNSUik7CisKKwkvKiB3cml0ZSBzbGF2ZSBhZGRyZXNzICovCisJd3JpdGViKHNsYXZlYWRkLCBJMkNBRFIpOworCisJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJd3JpdGViKDB4MCwgSTJDQ1NSKTsKKworCS8qIHN0YXJ0IEkyQyBjb250cm9sbGVyICovCisJd3JpdGViKE1QQzg2eHhfSTJDQ1JfTUVOLCBJMkNDQ1IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK2kyY193YWl0NGJ1cyh2b2lkKQoreworCXVsb25nIHRpbWV2YWwgPSBnZXRfdGltZXIoMCk7CisKKwl3aGlsZSAocmVhZGIoSTJDQ1NSKSAmIE1QQzg2eHhfSTJDU1JfTUJCKSB7CisJCWlmIChnZXRfdGltZXIodGltZXZhbCkgPiBUSU1FT1VUKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50CitpMmNfd2FpdChpbnQgd3JpdGUpCit7CisJdTMyIGNzcjsKKwl1bG9uZyB0aW1ldmFsID0gZ2V0X3RpbWVyKDApOworCisJZG8geworCQljc3IgPSByZWFkYihJMkNDU1IpOworCQlpZiAoIShjc3IgJiBNUEM4Nnh4X0kyQ1NSX01JRikpCisJCQljb250aW51ZTsKKworCQl3cml0ZWIoMHgwLCBJMkNDU1IpOworCisJCWlmIChjc3IgJiBNUEM4Nnh4X0kyQ1NSX01BTCkgeworCQkJZGVidWcoImkyY193YWl0OiBNQUxcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCEoY3NyICYgTVBDODZ4eF9JMkNTUl9NQ0YpKSB7CisJCQlkZWJ1ZygiaTJjX3dhaXQ6IHVuZmluaXNoZWRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHdyaXRlID09IEkyQ19XUklURSAmJiAoY3NyICYgTVBDODZ4eF9JMkNTUl9SWEFLKSkgeworCQkJZGVidWcoImkyY193YWl0OiBObyBSWEFDS1xuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9IHdoaWxlIChnZXRfdGltZXIodGltZXZhbCkgPCBUSU1FT1VUKTsKKworCWRlYnVnKCJpMmNfd2FpdDogdGltZWQgb3V0XG4iKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAoraTJjX3dyaXRlX2FkZHIodTggZGV2LCB1OCBkaXIsIGludCByc3RhKQoreworCXdyaXRlYihNUEM4Nnh4X0kyQ0NSX01FTiB8IE1QQzg2eHhfSTJDQ1JfTVNUQSB8IE1QQzg2eHhfSTJDQ1JfTVRYCisJICAgICAgIHwgKHJzdGEgPyBNUEM4Nnh4X0kyQ0NSX1JTVEEgOiAwKSwKKwkgICAgICAgSTJDQ0NSKTsKKworCXdyaXRlYigoZGV2IDw8IDEpIHwgZGlyLCBJMkNDRFIpOworCisJaWYgKGkyY193YWl0KEkyQ19XUklURSkgPCAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKK19faTJjX3dyaXRlKHU4ICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBpOworCisJd3JpdGViKE1QQzg2eHhfSTJDQ1JfTUVOIHwgTVBDODZ4eF9JMkNDUl9NU1RBIHwgTVBDODZ4eF9JMkNDUl9NVFgsCisJICAgICAgIEkyQ0NDUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJd3JpdGViKGRhdGFbaV0sIEkyQ0NEUik7CisKKwkJaWYgKGkyY193YWl0KEkyQ19XUklURSkgPCAwKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAorX19pMmNfcmVhZCh1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKworCXdyaXRlYihNUEM4Nnh4X0kyQ0NSX01FTiB8IE1QQzg2eHhfSTJDQ1JfTVNUQQorCSAgICAgICB8ICgobGVuZ3RoID09IDEpID8gTVBDODZ4eF9JMkNDUl9UWEFLIDogMCksCisJICAgICAgIEkyQ0NDUik7CisKKwkvKiBkdW1teSByZWFkICovCisJcmVhZGIoSTJDQ0RSKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlpZiAoaTJjX3dhaXQoSTJDX1JFQUQpIDwgMCkKKwkJCWJyZWFrOworCisJCS8qIEdlbmVyYXRlIGFjayBvbiBsYXN0IG5leHQgdG8gbGFzdCBieXRlICovCisJCWlmIChpID09IGxlbmd0aCAtIDIpCisJCQl3cml0ZWIoTVBDODZ4eF9JMkNDUl9NRU4gfCBNUEM4Nnh4X0kyQ0NSX01TVEEKKwkJCSAgICAgICB8IE1QQzg2eHhfSTJDQ1JfVFhBSywgSTJDQ0NSKTsKKworCQkvKiBHZW5lcmF0ZSBzdG9wIG9uIGxhc3QgYnl0ZSAqLworCQlpZiAoaSA9PSBsZW5ndGggLSAxKQorCQkJd3JpdGViKE1QQzg2eHhfSTJDQ1JfTUVOIHwgTVBDODZ4eF9JMkNDUl9UWEFLLCBJMkNDQ1IpOworCisJCWRhdGFbaV0gPSByZWFkYihJMkNDRFIpOworCX0KKworCXJldHVybiBpOworfQorCitpbnQKK2kyY19yZWFkKHU4IGRldiwgdWludCBhZGRyLCBpbnQgYWxlbiwgdTggKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGkgPSAwOworCXU4ICphID0gKHU4ICopICZhZGRyOworCisJaWYgKGkyY193YWl0NGJ1cygpIDwgMCkKKwkJZ290byBleGl0OworCisJaWYgKGkyY193cml0ZV9hZGRyKGRldiwgSTJDX1dSSVRFLCAwKSA9PSAwKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoX19pMmNfd3JpdGUoJmFbNCAtIGFsZW5dLCBhbGVuKSAhPSBhbGVuKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoaTJjX3dyaXRlX2FkZHIoZGV2LCBJMkNfUkVBRCwgMSkgPT0gMCkKKwkJZ290byBleGl0OworCisJaSA9IF9faTJjX3JlYWQoZGF0YSwgbGVuZ3RoKTsKKworZXhpdDoKKwl3cml0ZWIoTVBDODZ4eF9JMkNDUl9NRU4sIEkyQ0NDUik7CisKKwlyZXR1cm4gIShpID09IGxlbmd0aCk7Cit9CisKK2ludAoraTJjX3dyaXRlKHU4IGRldiwgdWludCBhZGRyLCBpbnQgYWxlbiwgdTggKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGkgPSAwOworCXU4ICphID0gKHU4ICopICZhZGRyOworCisJaWYgKGkyY193YWl0NGJ1cygpIDwgMCkKKwkJZ290byBleGl0OworCisJaWYgKGkyY193cml0ZV9hZGRyKGRldiwgSTJDX1dSSVRFLCAwKSA9PSAwKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoX19pMmNfd3JpdGUoJmFbNCAtIGFsZW5dLCBhbGVuKSAhPSBhbGVuKQorCQlnb3RvIGV4aXQ7CisKKwlpID0gX19pMmNfd3JpdGUoZGF0YSwgbGVuZ3RoKTsKKworZXhpdDoKKwl3cml0ZWIoTVBDODZ4eF9JMkNDUl9NRU4sIEkyQ0NDUik7CisKKwlyZXR1cm4gIShpID09IGxlbmd0aCk7Cit9CisKK2ludAoraTJjX3Byb2JlKHVjaGFyIGNoaXApCit7CisJaW50IHRtcDsKKworCS8qCisJICogVHJ5IHRvIHJlYWQgdGhlIGZpcnN0IGxvY2F0aW9uIG9mIHRoZSBjaGlwLiAgVGhlIHVuZGVybHlpbmcKKwkgKiBkcml2ZXIgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCBzZW5kaW5nIGp1c3QgdGhlIGNoaXAgYWRkcmVzcworCSAqIGFuZCBsb29raW5nIGZvciBhbiA8QUNLPiBiYWNrLgorCSAqLworCXVkZWxheSgxMDAwMCk7CisKKwlyZXR1cm4gaTJjX3JlYWQoY2hpcCwgMCwgMSwgKGNoYXIgKikmdG1wLCAxKTsKK30KKwordWNoYXIKK2kyY19yZWdfcmVhZCh1Y2hhciBpMmNfYWRkciwgdWNoYXIgcmVnKQoreworCWNoYXIgYnVmWzFdOworCisJaTJjX3JlYWQoaTJjX2FkZHIsIHJlZywgMSwgYnVmLCAxKTsKKworCXJldHVybiBidWZbMF07Cit9CisKK3ZvaWQKK2kyY19yZWdfd3JpdGUodWNoYXIgaTJjX2FkZHIsIHVjaGFyIHJlZywgdWNoYXIgdmFsKQoreworCWkyY193cml0ZShpMmNfYWRkciwgcmVnLCAxLCAmdmFsLCAxKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19IQVJEX0kyQyAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvaW50ZXJydXB0cy5jIGIvY3B1L21wYzg2eHgvaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjZjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbXBjODZ4eC9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIgKDQ0MCBwb3J0KQorICogU2NvdHQgTWNOdXR0LCBBcnRlc3luIENvbW11bmljYXRpb24gUHJvZHVjcywgc21jbnV0dEBhcnRzeW5jcC5jb20KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMgTW90b3JvbGEgSW5jLiAoTVBDODV4eCBwb3J0KQorICogWGlhbmdodWEgWGlhbyAoWC5YaWFvQG1vdG9yb2xhLmNvbSkKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuIChNUEM4Nnh4IFBvcnQpCisgKiBKZWZmIEJyb3duCisgKiBTcmlrYW50aCBTcmluaXZhc2FuIChzcmlrYW50aC5zcmluaXZhc2FuQGZyZWVzY2FsZS5jb20pCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzg2eHguaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKwordW5zaWduZWQgbG9uZyBkZWNyZW1lbnRlcl9jb3VudDsgICAgLyogY291bnQgdmFsdWUgZm9yIDFlNi9IWiBtaWNyb3NlY29uZHMgKi8KK3Vuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZ2V0X21zcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbXNyOworCisJYXNtIHZvbGF0aWxlICgibWZtc3IgJTAiOiI9ciIgKG1zcik6KTsKKworCXJldHVybiBtc3I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X21zcih1bnNpZ25lZCBsb25nIG1zcikKK3sKKwlhc20gdm9sYXRpbGUgKCJtdG1zciAlMCI6OiJyIiAobXNyKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZ2V0X2RlYyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJYXNtIHZvbGF0aWxlICgibWZkZWMgJTAiOiI9ciIgKHZhbCk6KTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2RlYyh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpZiAodmFsKQorCQlhc20gdm9sYXRpbGUgKCJtdGRlYyAlMCI6OiJyIiAodmFsKSk7Cit9CisKKy8qIGludGVycnVwdCBpcyBub3Qgc3VwcG9ydGVkIHlldCAqLworaW50IGludGVycnVwdF9pbml0X2NwdSh1bnNpZ25lZCAqZGVjcmVtZW50ZXJfY291bnQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpbnRlcnJ1cHRfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiBjYWxsIGNwdSBzcGVjaWZpYyBmdW5jdGlvbiBmcm9tICQoQ1BVKS9pbnRlcnJ1cHRzLmMgKi8KKwlyZXQgPSBpbnRlcnJ1cHRfaW5pdF9jcHUoJmRlY3JlbWVudGVyX2NvdW50KTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZWNyZW1lbnRlcl9jb3VudCA9IGdldF90YmNsaygpIC8gQ0ZHX0haOworCWRlYnVnKCJpbnRlcnJ1cHQgaW5pdDogdGJjbGsoKSA9ICVkIE1IeiwgZGVjcmVtZW50ZXJfY291bnQgPSAlZFxuIiwKKwkgICAgICAoZ2V0X3RiY2xrKCkgLyAxMDAwMDAwKSwKKwkgICAgICBkZWNyZW1lbnRlcl9jb3VudCk7CisKKwlzZXRfZGVjKGRlY3JlbWVudGVyX2NvdW50KTsKKworCXNldF9tc3IoZ2V0X21zcigpIHwgTVNSX0VFKTsKKworCWRlYnVnKCJNU1IgPSAweCUwOGx4LCBEZWNyZW1lbnRlciByZWcgPSAweCUwOGx4XG4iLAorCSAgICAgIGdldF9tc3IoKSwKKwkgICAgICBnZXRfZGVjKCkpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZW5hYmxlX2ludGVycnVwdHModm9pZCkKK3sKKwlzZXRfbXNyKGdldF9tc3IoKSB8IE1TUl9FRSk7Cit9CisKKy8qIHJldHVybnMgZmxhZyBpZiBNU1JfRUUgd2FzIHNldCBiZWZvcmUgKi8KK2ludCBkaXNhYmxlX2ludGVycnVwdHModm9pZCkKK3sKKwl1bG9uZyBtc3IgPSBnZXRfbXNyKCk7CisKKwlzZXRfbXNyKG1zciAmIH5NU1JfRUUpOworCXJldHVybiAobXNyICYgTVNSX0VFKSAhPSAwOworfQorCit2b2lkIGluY3JlbWVudF90aW1lc3RhbXAodm9pZCkKK3sKKwl0aW1lc3RhbXArKzsKK30KKworLyoKKyAqIHRpbWVyX2ludGVycnVwdCAtIGdldHMgY2FsbGVkIHdoZW4gdGhlIGRlY3JlbWVudGVyIG92ZXJmbG93cywKKyAqIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqIFRyaXZpYWwgaW1wbGVtZW50YXRpb24gLSBubyBuZWVkIHRvIGJlIHJlYWxseSBhY2N1cmF0ZS4KKyAqLwordm9pZCB0aW1lcl9pbnRlcnJ1cHRfY3B1KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworfQorCit2b2lkIHRpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwkvKiBjYWxsIGNwdSBzcGVjaWZpYyBmdW5jdGlvbiBmcm9tICQoQ1BVKS9pbnRlcnJ1cHRzLmMgKi8KKwl0aW1lcl9pbnRlcnJ1cHRfY3B1KHJlZ3MpOworCisJdGltZXN0YW1wKys7CisKKwlwcGNEY2JmKCZ0aW1lc3RhbXApOworCisJLyogUmVzdG9yZSBEZWNyZW1lbnRlciBDb3VudCAqLworCXNldF9kZWMoZGVjcmVtZW50ZXJfY291bnQpOworCisjaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpIHx8IGRlZmluZWQgKENPTkZJR19IV19XQVRDSERPRykKKwlpZiAoKHRpbWVzdGFtcCAlIChDRkdfV0FUQ0hET0dfRlJFUSkpID09IDApCisJCVdBVENIRE9HX1JFU0VUKCk7CisjZW5kaWYgLyogQ09ORklHX1dBVENIRE9HIHx8IENPTkZJR19IV19XQVRDSERPRyAqLworCisjaWZkZWYgQ09ORklHX1NUQVRVU19MRUQKKwlzdGF0dXNfbGVkX3RpY2sodGltZXN0YW1wKTsKKyNlbmRpZiAvKiBDT05GSUdfU1RBVFVTX0xFRCAqLworCisjaWZkZWYgQ09ORklHX1NIT1dfQUNUSVZJVFkKKwlib2FyZF9zaG93X2FjdGl2aXR5KHRpbWVzdGFtcCk7CisjZW5kaWYgLyogQ09ORklHX1NIT1dfQUNUSVZJVFkgKi8KKworfQorCit2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCit7CisJdGltZXN0YW1wID0gMDsKK30KKwordWxvbmcgZ2V0X3RpbWVyKHVsb25nIGJhc2UpCit7CisJcmV0dXJuIHRpbWVzdGFtcCAtIGJhc2U7Cit9CisKK3ZvaWQgc2V0X3RpbWVyKHVsb25nIHQpCit7CisJdGltZXN0YW1wID0gdDsKK30KKworLyoKKyAqIEluc3RhbGwgYW5kIGZyZWUgYSBpbnRlcnJ1cHQgaGFuZGxlci4gTm90IGltcGxlbWVudGVkIHlldC4KKyAqLworCit2b2lkIGlycV9pbnN0YWxsX2hhbmRsZXIoaW50IHZlYywgaW50ZXJydXB0X2hhbmRsZXJfdCAqaGFuZGxlciwgdm9pZCAqYXJnKQoreworfQorCit2b2lkIGlycV9mcmVlX2hhbmRsZXIoaW50IHZlYykKK3sKK30KKworLyoKKyAqIGlycWluZm8gLSBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBQQ0kgZGV2aWNlcyxub3QgaW1wbGVtZW50ZWQuCisgKi8KK2ludCBkb19pcnFpbmZvKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXByaW50ZigiXG5JbnRlcnJ1cHQtdW5zdXBwb3J0ZWQ6XG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSGFuZGxlIGV4dGVybmFsIGludGVycnVwdHMKKyAqLwordm9pZCBleHRlcm5hbF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcHV0cygiZXh0ZXJuYWxfaW50ZXJydXB0IChvb3BzISlcbiIpOworfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvcGNpLmMgYi9jcHUvbXBjODZ4eC9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY1NDhkCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzg2eHgvcGNpLmMKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLEluYy4KKyAqIDIwMDUsIDIwMDYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRWQgU3dhcnRob3V0IChlZC5zd2FydGhvdXRAZnJlZXNjYWxlLmNvbSkKKyAqIEphc29uIEppbiAoSmFzb24uamluQGZyZWVzY2FsZS5jb20pCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFBDSUUgQ29uZmlndXJhdGlvbiBzcGFjZSBhY2Nlc3Mgc3VwcG9ydCBmb3IgUENJRSBCcmlkZ2UKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHBjaS5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfUENJKQordm9pZAorcGNpX21wYzg2eHhfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfQ0NTUkJBUjsKKwl2b2xhdGlsZSBjY3NyX3BleF90ICpwY2llMSA9ICZpbW1hcC0+aW1fcGV4MTsKKwl1MTYgdGVtcDE2OworCXUzMiB0ZW1wMzI7CisKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKKwl1aW50IGhvc3QxX2FnZW50ID0gKGd1ci0+cG9yYm1zciAmIE1QQzg2eHhfUE9SQk1TUl9IQSkgPj4gMTc7CisJdWludCBwY2llMV9ob3N0ID0gKGhvc3QxX2FnZW50ID09IDIpIHx8IChob3N0MV9hZ2VudCA9PSAzKTsKKwl1aW50IHBjaWUxX2FnZW50ID0gKGhvc3QxX2FnZW50ID09IDApIHx8IChob3N0MV9hZ2VudCA9PSAxKTsKKwl1aW50IGRldmRpc3IgPSBndXItPmRldmRpc3I7CisJdWludCBpb19zZWwgPSAoZ3VyLT5wb3JkZXZzciAmIE1QQzg2eHhfUE9SREVWU1JfSU9fU0VMKSA+PiAxNjsKKworCWlmICgoaW9fc2VsID09IDIgfHwgaW9fc2VsID09IDMgfHwgaW9fc2VsID09IDUgfHwgaW9fc2VsID09IDYgfHwKKwkgICAgIGlvX3NlbCA9PSA3IHx8IGlvX3NlbCA9PSAweGYpCisJICAgICYmICEoZGV2ZGlzciAmIE1QQzg2eHhfREVWRElTUl9QQ0lFWDEpKSB7CisJCXByaW50ZigiUENJLUVYUFJFU1MgMTogQ29uZmlndXJlZCBhcyAlcyBcbiIsCisJCSAgICAgICBwY2llMV9hZ2VudCA/ICJBZ2VudCIgOiAiSG9zdCIpOworCQlpZiAocGNpZTFfYWdlbnQpCisJCQlyZXR1cm47CS8qRG9uJ3Qgc2NhbiBidXMgd2hlbiBjb25maWd1cmVkIGFzIGFnZW50ICovCisJCXByaW50ZigiICAgICAgICAgICAgICAgU2Nhbm5pbmcgUENJRSBidXMiKTsKKwkJZGVidWcoIjB4JTA4eD0weCUwOHggIiwKKwkJICAgICAgJnBjaWUxLT5wbWVfbXNnX2RldCwKKwkJICAgICAgcGNpZTEtPnBtZV9tc2dfZGV0KTsKKwkJaWYgKHBjaWUxLT5wbWVfbXNnX2RldCkgeworCQkJcGNpZTEtPnBtZV9tc2dfZGV0ID0gMHhmZmZmZmZmZjsKKwkJCWRlYnVnKCIgd2l0aCBlcnJvcnMuICBDbGVhcmluZy4gIE5vdyAweCUwOHgiLAorCQkJICAgICAgcGNpZTEtPnBtZV9tc2dfZGV0KTsKKwkJfQorCQlkZWJ1ZygiXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGYoIlBDSS1FWFBSRVNTIDEgZGlzYWJsZWQhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2V0IGZpcnN0X2J1cz0wIG9ubHkgc2tpcHBlZCBCMDpEMDpGMCB3aGljaCBpcworCSAqIGEgcmVzZXJ2ZWQgZGV2aWNlIGluIE0xNTc1LCBidXQgbWFrZSBpdCBlYXN5IGZvcgorCSAqIG1vc3Qgb2YgdGhlIHNjYW4gcHJvY2Vzcy4KKwkgKi8KKwlob3NlLT5maXJzdF9idXNubyA9IDB4MDA7CisJaG9zZS0+bGFzdF9idXNubyA9IDB4ZmU7CisKKwlwY2llX3NldHVwX2luZGlyZWN0KGhvc2UsIChDRkdfSU1NUiArIDB4ODAwMCksIChDRkdfSU1NUiArIDB4ODAwNCkpOworCisJcGNpX2hvc2VfcmVhZF9jb25maWdfd29yZChob3NlLAorCQkJCSAgUENJX0JERigwLCAwLCAwKSwgUENJX0NPTU1BTkQsICZ0ZW1wMTYpOworCXRlbXAxNiB8PSBQQ0lfQ09NTUFORF9TRVJSIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwKKwkgICAgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfSU87CisJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwKKwkJCQkgICBQQ0lfQkRGKDAsIDAsIDApLCBQQ0lfQ09NTUFORCwgdGVtcDE2KTsKKworCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIFBDSV9CREYoMCwgMCwgMCksIFBDSV9TVEFUVVMsIDB4ZmZmZik7CisJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwKKwkJCQkgICBQQ0lfQkRGKDAsIDAsIDApLCBQQ0lfTEFURU5DWV9USU1FUiwgMHg4MCk7CisKKwlwY2lfaG9zZV9yZWFkX2NvbmZpZ19kd29yZChob3NlLCBQQ0lfQkRGKDAsIDAsIDApLCBQQ0lfUFJJTUFSWV9CVVMsCisJCQkJICAgJnRlbXAzMik7CisJdGVtcDMyID0gKHRlbXAzMiAmIDB4ZmYwMDAwMDApIHwgKDB4ZmYpIHwgKDB4MCA8PCA4KSB8ICgweGZlIDw8IDE2KTsKKwlwY2lfaG9zZV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgUENJX0JERigwLCAwLCAwKSwgUENJX1BSSU1BUllfQlVTLAorCQkJCSAgICB0ZW1wMzIpOworCisJcGNpZTEtPnBvd2FyMSA9IDA7CisJcGNpZTEtPnBvd2FyMiA9IDA7CisJcGNpZTEtPnBpd2FyMSA9IDA7CisJcGNpZTEtPnBpd2FyMSA9IDA7CisKKwlwY2llMS0+cG93YmFyMSA9IChDRkdfUENJMV9NRU1fQkFTRSA+PiAxMikgJiAweDAwMGZmZmZmOworCXBjaWUxLT5wb3dhcjEgPSAweDgwMDQ0MDFjOwkvKiA1MTJNIE1FTSBzcGFjZSAqLworCXBjaWUxLT5wb3RhcjEgPSAoQ0ZHX1BDSTFfTUVNX0JBU0UgPj4gMTIpICYgMHgwMDBmZmZmZjsKKwlwY2llMS0+cG90ZWFyMSA9IDB4MDAwMDAwMDA7CisKKwlwY2llMS0+cG93YmFyMiA9IChDRkdfUENJMV9JT19CQVNFID4+IDEyKSAmIDB4MDAwZmZmZmY7CisJcGNpZTEtPnBvd2FyMiA9IDB4ODAwODgwMTc7CS8qIDE2TSBJTyBzcGFjZSAqLworCXBjaWUxLT5wb3RhcjIgPSAweDAwMDAwMDAwOworCXBjaWUxLT5wb3RlYXIyID0gMHgwMDAwMDAwMDsKKworCXBjaWUxLT5waXRhcjEgPSAweDAwMDAwMDAwOworCXBjaWUxLT5waXdiYXIxID0gMHgwMDAwMDAwMDsKKwkvKiBFbmFibGUsIFByZWZldGNoLCBMb2NhbCBNZW0sICogU25vb3AgUi9XLCAyRyAqLworCXBjaWUxLT5waXdhcjEgPSAweGEwZjU1MDFlOworCisJcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDAsCisJCSAgICAgICBDRkdfUENJX01FTU9SWV9CVVMsCisJCSAgICAgICBDRkdfUENJX01FTU9SWV9QSFlTLAorCQkgICAgICAgQ0ZHX1BDSV9NRU1PUllfU0laRSwKKwkJICAgICAgIFBDSV9SRUdJT05fTUVNIHwgUENJX1JFR0lPTl9NRU1PUlkpOworCisJcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDEsCisJCSAgICAgICBDRkdfUENJMV9NRU1fQkFTRSwKKwkJICAgICAgIENGR19QQ0kxX01FTV9QSFlTLAorCQkgICAgICAgQ0ZHX1BDSTFfTUVNX1NJWkUsCisJCSAgICAgICBQQ0lfUkVHSU9OX01FTSk7CisKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMiwKKwkJICAgICAgIENGR19QQ0kxX0lPX0JBU0UsCisJCSAgICAgICBDRkdfUENJMV9JT19QSFlTLAorCQkgICAgICAgQ0ZHX1BDSTFfSU9fU0laRSwKKwkJICAgICAgIFBDSV9SRUdJT05fSU8pOworCisJaG9zZS0+cmVnaW9uX2NvdW50ID0gMzsKKworCXBjaV9yZWdpc3Rlcl9ob3NlKGhvc2UpOworCisJaG9zZS0+bGFzdF9idXNubyA9IHBjaV9ob3NlX3NjYW4oaG9zZSk7CisJZGVidWcoInBjaWVfbXBjODZ4eF9pbml0OiBsYXN0X2J1c25vICV4XG4iLCBob3NlLT5sYXN0X2J1c25vKTsKKwlkZWJ1ZygicGNpZV9tcGM4Nnh4IGluaXQ6IGN1cnJlbnRfYnVzbm8gJXhcbiAiLCBob3NlLT5jdXJyZW50X2J1c25vKTsKKworCXByaW50ZigiLi4uLlBDSUUxIHNjYW4gJiBlbnVtZXJhdGlvbiBkb25lXG4iKTsKK30KKyNlbmRpZgkJCQkvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9jcHUvbXBjODZ4eC9wY2llX2luZGlyZWN0LmMgYi9jcHUvbXBjODZ4eC9wY2llX2luZGlyZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwYWQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4Nnh4L3BjaWVfaW5kaXJlY3QuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIGluZGlyZWN0IFBDSSBicmlkZ2VzLgorICoKKyAqIENvcHlyaWdodCAoYykgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIDIwMDYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogSmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHBhcnRseSBkZXJpdmVkIGZyb20KKyAqIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3BjaWUuYworICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmZGVmIENPTkZJR19QQ0kKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKworI2RlZmluZSBQQ0lfQ0ZHX09VVCAJb3V0X2JlMzIKKyNkZWZpbmUgUEVYX0ZJWAkJb3V0X2JlMzIoaG9zZS0+Y2ZnX2FkZHIrMHg0LCAweDA0MDBmZmZmKQorCitzdGF0aWMgaW50CitpbmRpcmVjdF9yZWFkX2NvbmZpZ19wY2llKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCSAgcGNpX2Rldl90IGRldiwKKwkJCSAgaW50IG9mZnNldCwKKwkJCSAgaW50IGxlbiwKKwkJCSAgdTMyICp2YWwpCit7CisJaW50IGJ1cyA9IFBDSV9CVVMoZGV2KTsKKworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmNmZ19kYXRhOworCXUzMiB0ZW1wOworCisJUEVYX0ZJWDsKKwlpZiAoYnVzID09IDB4ZmYpIHsKKwkJUENJX0NGR19PVVQoaG9zZS0+Y2ZnX2FkZHIsCisJCQkgICAgZGV2IHwgKG9mZnNldCAmIDB4ZmMpIHwgMHg4MDAwMDAwMSk7CisJfSBlbHNlIHsKKwkJUENJX0NGR19PVVQoaG9zZS0+Y2ZnX2FkZHIsCisJCQkgICAgZGV2IHwgKG9mZnNldCAmIDB4ZmMpIHwgMHg4MDAwMDAwMCk7CisJfQorCS8qCisJICogTm90ZTogdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBjaGVja2VkIHRoYXQgb2Zmc2V0IGlzCisJICogc3VpdGFibHkgYWxpZ25lZCBhbmQgdGhhdCBsZW4gaXMgMSwgMiBvciA0LgorCSAqLworCS8qIEVSUkFUQSBQQ0ktRXggMTIgLSBDb25maWd1cmF0aW9uIEFkZHJlc3MvRGF0YSBBbGlnbm1lbnQgKi8KKwljZmdfZGF0YSA9IGhvc2UtPmNmZ19kYXRhOworCVBFWF9GSVg7CisJdGVtcCA9IGluX2xlMzIoKHUzMiAqKSBjZmdfZGF0YSk7CisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCSp2YWwgPSAodGVtcCA+PiAoKChvZmZzZXQgJiAzKSkgKiA4KSkgJiAweGZmOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWwgPSAodGVtcCA+PiAoKChvZmZzZXQgJiAzKSkgKiA4KSkgJiAweGZmZmY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp2YWwgPSB0ZW1wOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW5kaXJlY3Rfd3JpdGVfY29uZmlnX3BjaWUoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJICAgcGNpX2Rldl90IGRldiwKKwkJCSAgIGludCBvZmZzZXQsCisJCQkgICBpbnQgbGVuLAorCQkJICAgdTMyIHZhbCkKK3sKKwlpbnQgYnVzID0gUENJX0JVUyhkZXYpOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmNmZ19kYXRhOworCXUzMiB0ZW1wOworCisJUEVYX0ZJWDsKKwlpZiAoYnVzID09IDB4ZmYpIHsKKwkJUENJX0NGR19PVVQoaG9zZS0+Y2ZnX2FkZHIsCisJCQkgICAgZGV2IHwgKG9mZnNldCAmIDB4ZmMpIHwgMHg4MDAwMDAwMSk7CisJfSBlbHNlIHsKKwkJUENJX0NGR19PVVQoaG9zZS0+Y2ZnX2FkZHIsCisJCQkgICAgZGV2IHwgKG9mZnNldCAmIDB4ZmMpIHwgMHg4MDAwMDAwMCk7CisJfQorCisJLyoKKwkgKiBOb3RlOiB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGNoZWNrZWQgdGhhdCBvZmZzZXQgaXMKKwkgKiBzdWl0YWJseSBhbGlnbmVkIGFuZCB0aGF0IGxlbiBpcyAxLCAyIG9yIDQuCisJICovCisJLyogRVJSQVRBIFBDSS1FeCAxMiAtIENvbmZpZ3VyYXRpb24gQWRkcmVzcy9EYXRhIEFsaWdubWVudCAqLworCWNmZ19kYXRhID0gaG9zZS0+Y2ZnX2RhdGE7CisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCVBFWF9GSVg7CisJCXRlbXAgPSBpbl9sZTMyKCh1MzIgKikgY2ZnX2RhdGEpOworCQl0ZW1wID0gKHRlbXAgJiB+KDB4ZmYgPDwgKChvZmZzZXQgJiAzKSAqIDgpKSkgfAorCQkgICAgKHZhbCA8PCAoKG9mZnNldCAmIDMpICogOCkpOworCQlQRVhfRklYOworCQlvdXRfbGUzMigodTMyICopIGNmZ19kYXRhLCB0ZW1wKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlQRVhfRklYOworCQl0ZW1wID0gaW5fbGUzMigodTMyICopIGNmZ19kYXRhKTsKKwkJdGVtcCA9ICh0ZW1wICYgfigweGZmZmYgPDwgKChvZmZzZXQgJiAzKSAqIDgpKSk7CisJCXRlbXAgfD0gKHZhbCA8PCAoKG9mZnNldCAmIDMpICogOCkpOworCQlQRVhfRklYOworCQlvdXRfbGUzMigodTMyICopIGNmZ19kYXRhLCB0ZW1wKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUEVYX0ZJWDsKKwkJb3V0X2xlMzIoKHUzMiAqKSBjZmdfZGF0YSwgdmFsKTsKKwkJYnJlYWs7CisJfQorCVBFWF9GSVg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2luZGlyZWN0X3JlYWRfY29uZmlnX2J5dGVfcGNpZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkgICAgICAgcGNpX2Rldl90IGRldiwKKwkJCSAgICAgICBpbnQgb2Zmc2V0LAorCQkJICAgICAgIHU4ICp2YWwpCit7CisJdTMyIHZhbDMyOworCWluZGlyZWN0X3JlYWRfY29uZmlnX3BjaWUoaG9zZSwgZGV2LCBvZmZzZXQsIDEsICZ2YWwzMik7CisJKnZhbCA9ICh1OCkgdmFsMzI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2luZGlyZWN0X3JlYWRfY29uZmlnX3dvcmRfcGNpZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkgICAgICAgcGNpX2Rldl90IGRldiwKKwkJCSAgICAgICBpbnQgb2Zmc2V0LAorCQkJICAgICAgIHUxNiAqdmFsKQoreworCXUzMiB2YWwzMjsKKwlpbmRpcmVjdF9yZWFkX2NvbmZpZ19wY2llKGhvc2UsIGRldiwgb2Zmc2V0LCAyLCAmdmFsMzIpOworCSp2YWwgPSAodTE2KSB2YWwzMjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW5kaXJlY3RfcmVhZF9jb25maWdfZHdvcmRfcGNpZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJcGNpX2Rldl90IGRldiwKKwkJCQlpbnQgb2Zmc2V0LAorCQkJCXUzMiAqdmFsKQoreworCXJldHVybiBpbmRpcmVjdF9yZWFkX2NvbmZpZ19wY2llKGhvc2UsIGRldiwgb2Zmc2V0LCA0LCB2YWwpOworfQorCitzdGF0aWMgaW50CitpbmRpcmVjdF93cml0ZV9jb25maWdfYnl0ZV9wY2llKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQlwY2lfZGV2X3QgZGV2LAorCQkJCWludCBvZmZzZXQsCisJCQkJdTggdmFsKQoreworCXJldHVybiBpbmRpcmVjdF93cml0ZV9jb25maWdfcGNpZShob3NlLCBkZXYsIG9mZnNldCwgMSwgKHUzMikgdmFsKTsKK30KKworc3RhdGljIGludAoraW5kaXJlY3Rfd3JpdGVfY29uZmlnX3dvcmRfcGNpZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJcGNpX2Rldl90IGRldiwKKwkJCQlpbnQgb2Zmc2V0LAorCQkJCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlyZXR1cm4gaW5kaXJlY3Rfd3JpdGVfY29uZmlnX3BjaWUoaG9zZSwgZGV2LCBvZmZzZXQsIDIsICh1MzIpIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQKK2luZGlyZWN0X3dyaXRlX2NvbmZpZ19kd29yZF9wY2llKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgcGNpX2Rldl90IGRldiwKKwkJCQkgaW50IG9mZnNldCwKKwkJCQkgdTMyIHZhbCkKK3sKKwlyZXR1cm4gaW5kaXJlY3Rfd3JpdGVfY29uZmlnX3BjaWUoaG9zZSwgZGV2LCBvZmZzZXQsIDQsIHZhbCk7Cit9CisKK3ZvaWQKK3BjaWVfc2V0dXBfaW5kaXJlY3Qoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCB1MzIgY2ZnX2FkZHIsIHUzMiBjZmdfZGF0YSkKK3sKKwlwY2lfc2V0X29wcyhob3NlLAorCQkgICAgaW5kaXJlY3RfcmVhZF9jb25maWdfYnl0ZV9wY2llLAorCQkgICAgaW5kaXJlY3RfcmVhZF9jb25maWdfd29yZF9wY2llLAorCQkgICAgaW5kaXJlY3RfcmVhZF9jb25maWdfZHdvcmRfcGNpZSwKKwkJICAgIGluZGlyZWN0X3dyaXRlX2NvbmZpZ19ieXRlX3BjaWUsCisJCSAgICBpbmRpcmVjdF93cml0ZV9jb25maWdfd29yZF9wY2llLAorCQkgICAgaW5kaXJlY3Rfd3JpdGVfY29uZmlnX2R3b3JkX3BjaWUpOworCisJaG9zZS0+Y2ZnX2FkZHIgPSAodW5zaWduZWQgaW50ICopY2ZnX2FkZHI7CisJaG9zZS0+Y2ZnX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKWNmZ19kYXRhOworfQorCisjZW5kaWYJCQkJLyogQ09ORklHX1BDSSAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvcmVzZXR2ZWMuUyBiL2NwdS9tcGM4Nnh4L3Jlc2V0dmVjLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE1NTJmNgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4Nnh4L3Jlc2V0dmVjLlMKQEAgLTAsMCArMSwyIEBACisJLnNlY3Rpb24gLnJlc2V0dmVjLCJheCIKKwliIF9zdGFydApkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvc3BkX3NkcmFtLmMgYi9jcHUvbXBjODZ4eC9zcGRfc2RyYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGIwZDQxCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L21wYzg2eHgvc3BkX3NkcmFtLmMKQEAgLTAsMCArMSwxMzMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiAoQykgQ29weXJpZ2h0IDIwMDMgTW90b3JvbGEgSW5jLgorICogWGlhbmdodWEgWGlhbyAoWC5YaWFvQG1vdG9yb2xhLmNvbSkKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGkyYy5oPgorI2luY2x1ZGUgPHNwZC5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQorZXh0ZXJuIHZvaWQgZG1hX2luaXQodm9pZCk7CitleHRlcm4gdWludCBkbWFfY2hlY2sodm9pZCk7CitleHRlcm4gaW50IGRtYV94ZmVyKHZvaWQgKmRlc3QsIHVpbnQgY291bnQsIHZvaWQgKnNyYyk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TUERfRUVQUk9NCisKKyNpZm5kZWYJQ0ZHX1JFQURfU1BECisjZGVmaW5lIENGR19SRUFEX1NQRAlpMmNfcmVhZAorI2VuZGlmCisKKy8qCisgKiBPbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHRocmVlIHNob3VsZCBiZSAxOyBvdGhlcnMgc2hvdWxkIGJlIDAKKyAqIEJ5IGRlZmF1bHQgdGhlIGNhY2hlIGxpbmUgaW50ZXJsZWF2aW5nIGlzIHNlbGVjdGVkIGlmCisgKiB0aGUgQ09ORklHX0REUl9JTlRFUkxFQVZFIGZsYWcgaXMgZGVmaW5lZAorICovCisjZGVmaW5lIENGR19QQUdFX0lOVEVSTEVBVklORwkJMAorI2RlZmluZSBDRkdfQkFOS19JTlRFUkxFQVZJTkcJCTAKKyNkZWZpbmUgQ0ZHX1NVUEVSX0JBTktfSU5URVJMRUFWSU5HCTAKKworLyoKKyAqIENvbnZlcnQgcGljb3NlY29uZHMgaW50byBjbG9jayBjeWNsZXMgKHJvdW5kaW5nIHVwIGlmIG5lZWRlZCkuCisgKi8KKworaW50CitwaWNvc190b19jbGsoaW50IHBpY29zKQoreworCWludCBjbGtzOworCisJY2xrcyA9IHBpY29zIC8gKDIwMDAwMDAwMDAgLyAoZ2V0X2J1c19mcmVxKDApIC8gMTAwMCkpOworCWlmIChwaWNvcyAlICgyMDAwMDAwMDAwIC8gKGdldF9idXNfZnJlcSgwKSAvIDEwMDApKSAhPSAwKSB7CisJCWNsa3MrKzsKKwl9CisKKwlyZXR1cm4gY2xrczsKK30KKworCisvKgorICogQ2FsY3VsYXRlIHRoZSBEZW5zaXR5IG9mIGVhY2ggUGh5c2ljYWwgUmFuay4KKyAqIFJldHVybmVkIHNpemUgaXMgaW4gYnl0ZXMuCisgKgorICogU3R1ZHkgdGhlc2UgdGFibGUgZnJvbSBCeXRlIDMxIG9mIEpFREVDIFNQRCBTcGVjLgorICoKKyAqCQlERFIgSQlERFIgSUkKKyAqCUJpdAlTaXplCVNpemUKKyAqCS0tLQktLS0tLQktLS0tLS0KKyAqCTcgaGlnaAk1MTJNQgk1MTJNQgorICoJNgkyNTZNQgkyNTZNQgorICoJNQkxMjhNQgkxMjhNQgorICoJNAkgNjRNQgkgMTZHQgorICoJMwkgMzJNQgkgIDhHQgorICoJMgkgMTZNQgkgIDRHQgorICoJMQkgIDJHQgkgIDJHQgorICoJMCBsb3cJICAxR0IJICAxR0IKKyAqCisgKiBSZW9yZGVyIFRhYmxlIHRvIGJlIGxpbmVhciBieSBzdHJpcHBpbmcgdGhlIGJvdHRvbQorICogMiBvciA1IGJpdHMgb2ZmIGFuZCBzaGlmdGluZyB0aGVtIHVwIHRvIHRoZSB0b3AuCisgKi8KKwordW5zaWduZWQgaW50Citjb21wdXRlX2JhbmtzaXplKHVuc2lnbmVkIGludCBtZW1fdHlwZSwgdW5zaWduZWQgY2hhciByb3dfZGVucykKK3sKKwl1bnNpZ25lZCBpbnQgYnNpemU7CisKKwlpZiAobWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKSB7CisJCS8qIEJvdHRvbSAyIGJpdHMgdXAgdG8gdGhlIHRvcC4gKi8KKwkJYnNpemUgPSAoKHJvd19kZW5zID4+IDIpIHwgKChyb3dfZGVucyAmIDMpIDw8IDYpKSA8PCAyNDsKKwkJZGVidWcoIkREUjogRERSIEkgcmFuayBkZW5zaXR5ID0gMHglMDh4XG4iLCBic2l6ZSk7CisJfSBlbHNlIHsKKwkJLyogQm90dG9tIDUgYml0cyB1cCB0byB0aGUgdG9wLiAqLworCQlic2l6ZSA9ICgocm93X2RlbnMgPj4gNSkgfCAoKHJvd19kZW5zICYgMzEpIDw8IDMpKSA8PCAyNzsKKwkJZGVidWcoIkREUjogRERSIElJIHJhbmsgZGVuc2l0eSA9IDB4JTA4eFxuIiwgYnNpemUpOworCX0KKwlyZXR1cm4gYnNpemU7Cit9CisKKworLyoKKyAqIENvbnZlcnQgYSB0d28tbmliYmxlIEJDRCB2YWx1ZSBpbnRvIGEgY3ljbGUgdGltZS4KKyAqIFdoaWxlIHRoZSBzcGVjIGNhbGxzIGZvciBuYW5vLXNlY29uZHMsIHBpY29zIGFyZSByZXR1cm5lZC4KKyAqCisgKiBUaGlzIGltcGxlbWVudHMgdGhlIHRhYmxlcyBmb3IgYnl0ZXMgOSwgMjMgYW5kIDI1IGZvciBib3RoCisgKiBERFIgSSBhbmQgSUkuICBObyBhbGxvd2FuY2UgZm9yIGRpc3Rpbmd1aXNoaW5nIHRoZSBpbnZhbGlkCisgKiBmaWVsZHMgYWJzZW50IGZvciBERFIgSSB5ZXQgcHJlc2VudCBpbiBERFIgSUkgaXMgbWFkZS4KKyAqIChUaGF0IGlzLCBjeWNsZSB0aW1lcyBvZiAuMjUsIC4zMywgLjY2IGFuZCAuNzUgbnMgYXJlCisgKiBhbGxvd2VkIGZvciBib3RoIEREUiBJSSBhbmQgSS4pCisgKi8KKwordW5zaWduZWQgaW50Citjb252ZXJ0X2JjZF90ZW50aHNfdG9fY3ljbGVfdGltZV9wcyh1bnNpZ25lZCBpbnQgc3BkX3ZhbCkKK3sKKwkvKgorCSAqIFRhYmxlIGxvb2sgdXAgdGhlIGxvd2VyIG5pYmJsZSwgYWxsb3cgRERSIEkgJiBJSS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdGVudGhzX3BzWzE2XSA9IHsKKwkJMCwKKwkJMTAwLAorCQkyMDAsCisJCTMwMCwKKwkJNDAwLAorCQk1MDAsCisJCTYwMCwKKwkJNzAwLAorCQk4MDAsCisJCTkwMCwKKwkJMjUwLAorCQkzMzAsCisJCTY2MCwKKwkJNzUwLAorCQkwLAkvKiB1bmRlZmluZWQgKi8KKwkJMAkvKiB1bmRlZmluZWQgKi8KKwl9OworCisJdW5zaWduZWQgaW50IHdob2xlX25zID0gKHNwZF92YWwgJiAweEYwKSA+PiA0OworCXVuc2lnbmVkIGludCB0ZW50aF9ucyA9IHNwZF92YWwgJiAweDBGOworCXVuc2lnbmVkIGludCBwcyA9IHdob2xlX25zICogMTAwMCArIHRlbnRoc19wc1t0ZW50aF9uc107CisKKwlyZXR1cm4gcHM7Cit9CisKKworbG9uZyBpbnQKK3NwZF9pbml0KHVuc2lnbmVkIGNoYXIgaTJjX2FkZHJlc3MsIHVuc2lnbmVkIGludCBkZHJfbnVtLAorCSB1bnNpZ25lZCBpbnQgZGltbV9udW0sIHVuc2lnbmVkIGludCBzdGFydF9hZGRyKQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHI7CisJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gJmltbWFwLT5pbV9ndXI7CisJc3BkX2VlcHJvbV90IHNwZDsKKwl1bnNpZ25lZCBpbnQgbl9yYW5rczsKKwl1bnNpZ25lZCBpbnQgcmFua19kZW5zaXR5OworCXVuc2lnbmVkIGludCBvZHRfcmRfY2ZnLCBvZHRfd3JfY2ZnOworCXVuc2lnbmVkIGludCBvZHRfY2ZnLCBtb2RlX29kdF9lbmFibGU7CisJdW5zaWduZWQgaW50IGRxc19jZmc7CisJdW5zaWduZWQgY2hhciB0d3JfY2xrLCB0d3RyX2NsaywgdHdyX2F1dG9fY2xrOworCXVuc2lnbmVkIGludCB0Q0ttaW5fcHMsIHRDS21heF9wczsKKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfcmF0ZTsKKwl1bnNpZ25lZCBpbnQgYnVzZnJlcTsKKwl1bnNpZ25lZCBzZHJhbV9jZmdfMTsKKwl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGNhc2xhdCwgY2FzbGF0X2N0cmw7CisJdW5zaWduZWQgaW50IHRyZmMsIHRyZmNfY2xrLCB0cmZjX2xvdywgdHJmY19oaWdoOworCXVuc2lnbmVkIGludCB0cmNkX2NsazsKKwl1bnNpZ25lZCBpbnQgdHJ0cF9jbGs7CisJdW5zaWduZWQgY2hhciBja2VfbWluX2NsazsKKwl1bnNpZ25lZCBjaGFyIGFkZF9sYXQ7CisJdW5zaWduZWQgY2hhciB3cl9sYXQ7CisJdW5zaWduZWQgY2hhciB3cl9kYXRhX2RlbGF5OworCXVuc2lnbmVkIGNoYXIgZm91cl9hY3Q7CisJdW5zaWduZWQgY2hhciBjcG87CisJdW5zaWduZWQgY2hhciBidXJzdF9sZW47CisJdW5zaWduZWQgaW50IG1vZGVfY2FzbGF0OworCXVuc2lnbmVkIGNoYXIgc2RyYW1fdHlwZTsKKwl1bnNpZ25lZCBjaGFyIGRfaW5pdDsKKwl1bnNpZ25lZCBpbnQgbGF3X3NpemU7CisJdm9sYXRpbGUgY2Nzcl9sb2NhbF9tY21fdCAqbWNtID0gJmltbWFwLT5pbV9sb2NhbF9tY207CisJdW5zaWduZWQgaW50IHRDeWNsZV9wcywgbW9kZnJlcTsKKworCWlmIChkZHJfbnVtID09IDEpCisJCWRkciA9ICZpbW1hcC0+aW1fZGRyMTsKKwllbHNlCisJCWRkciA9ICZpbW1hcC0+aW1fZGRyMjsKKworCS8qCisJICogUmVhZCBTUEQgaW5mb3JtYXRpb24uCisJICovCisKKwlkZWJ1ZygiUGVyZm9ybWluZyBTUEQgcmVhZCBhdCBJMkMgYWRkcmVzcyAweCUwMmx4XG4iLGkyY19hZGRyZXNzKTsKKwltZW1zZXQoKHZvaWQgKikmc3BkLCAwLCBzaXplb2Yoc3BkKSk7CisJQ0ZHX1JFQURfU1BEKGkyY19hZGRyZXNzLCAwLCAxLCAodWNoYXIgKikgJnNwZCwgc2l6ZW9mKHNwZCkpOworCisJLyoKKwkgKiBDaGVjayBmb3Igc3VwcG9ydGVkIG1lbW9yeSBtb2R1bGUgdHlwZXMuCisJICovCisJaWYgKHNwZC5tZW1fdHlwZSAhPSBTUERfTUVNVFlQRV9ERFIgJiYKKwkgICAgc3BkLm1lbV90eXBlICE9IFNQRF9NRU1UWVBFX0REUjIpIHsKKwkJZGVidWcoIldhcm5pbmc6IFVuYWJsZSB0byBsb2NhdGUgRERSIEkgb3IgRERSIElJIG1vZHVsZSBmb3IgRElNTSAlZCBvZiBERFIgY29udHJvbGxlciAlZC5cbiIKKwkJICAgICAgIiAgICAgICAgIEZ1bmRhbWVudGFsIG1lbW9yeSB0eXBlIGlzIDB4JTB4XG4iLAorCQkgICAgICBkaW1tX251bSwKKwkJICAgICAgZGRyX251bSwKKwkJICAgICAgc3BkLm1lbV90eXBlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGVidWcoIlxuRm91bmQgbWVtb3J5IG9mIHR5cGUgMHglMDJseCAgIiwgc3BkLm1lbV90eXBlKTsKKwlpZiAoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUikKKwkJZGVidWcoIkREUiBJXG4iKTsKKwllbHNlCisJCWRlYnVnKCJERFIgSUlcbiIpOworCisJLyoKKwkgKiBUaGVzZSB0ZXN0IGdsb3NzIG92ZXIgRERSIEkgYW5kIElJIGRpZmZlcmVuY2VzIGluIGludGVycHJldGF0aW9uCisJICogb2YgYnl0ZXMgMyBhbmQgNCwgYnV0IGlycmVsZXZhbnRseS4gIE11bHRpcGxlIGFzeW1tZXRyaWMgYmFua3MKKwkgKiBhcmUgbm90IHN1cHBvcnRlZCBvbiBERFIgSTsgYW5kIG5vdCBlbmNvZGVkIG9uIEREUiBJSS4KKwkgKgorCSAqIEFsc28gbm90ZSB0aGF0IHRoZSA4NTQ4IGNvbnRyb2xsZXIgY2FuIHN1cHBvcnQ6CisJICogICAgMTIgPD0gbnJvdyA8PSAxNgorCSAqIGFuZAorCSAqICAgICA4IDw9IG5jb2wgPD0gMTEgKHN0aWxsLCBmb3IgRERSKQorCSAqICAgICA2IDw9IG5jb2wgPD0gIDkgKGZvciBGQ1JBTSkKKwkgKi8KKwlpZiAoc3BkLm5yb3dfYWRkciA8IDEyIHx8IHNwZC5ucm93X2FkZHIgPiAxNCkgeworCQlwcmludGYoIkREUjogVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIFJvdyBBZGRyIGxpbmVzOiAlZC5cbiIsCisJCSAgICAgICBzcGQubnJvd19hZGRyKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChzcGQubmNvbF9hZGRyIDwgOCB8fCBzcGQubmNvbF9hZGRyID4gMTEpIHsKKwkJcHJpbnRmKCJERFI6IFVuc3VwcG9ydGVkIG51bWJlciBvZiBDb2x1bW4gQWRkciBsaW5lczogJWQuXG4iLAorCQkgICAgICAgc3BkLm5jb2xfYWRkcik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgYmFua3MgY29udHJvbGxlZCBieQorCSAqIGRpZmZlcmVudCBDaGlwIFNlbGVjdCBzaWduYWxzLiAgVGhpcyBpcyBub3QgcXVpdGUgdGhlCisJICogc2FtZSBhcyB0aGUgbnVtYmVyIG9mIERJTU0gbW9kdWxlcyBvbiB0aGUgYm9hcmQuICBGZWguCisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJbl9yYW5rcyA9IHNwZC5ucm93czsKKwl9IGVsc2UgeworCQluX3JhbmtzID0gKHNwZC5ucm93cyAmIDB4NykgKyAxOworCX0KKworCWRlYnVnKCJERFI6IG51bWJlciBvZiByYW5rcyA9ICVkXG4iLCBuX3JhbmtzKTsKKworCWlmIChuX3JhbmtzID4gMikgeworCQlwcmludGYoIkREUjogT25seSAyIGNoaXAgc2VsZWN0cyBhcmUgc3VwcG9ydGVkOiAlZFxuIiwKKwkJICAgICAgIG5fcmFua3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEFkanVzdCBERFIgSUkgSU8gdm9sdGFnZSBiaWFzaW5nLiAgSXQganVzdCBtYWtlcyBpdCB3b3JrLgorCSAqLworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSMikgeworCQlndXItPmRkcmlvb3ZjciA9ICgwCisJCQkJICB8IDB4ODAwMDAwMDAJCS8qIEVuYWJsZSAqLworCQkJCSAgfCAweDEwMDAwMDAwCQkvKiBWU0VMIHRvIDEuOFYgKi8KKwkJCQkgICk7CisJfQorCisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIHNpemUgb2YgZWFjaCBSYW5rIGluIGJ5dGVzLgorCSAqLworCXJhbmtfZGVuc2l0eSA9IGNvbXB1dGVfYmFua3NpemUoc3BkLm1lbV90eXBlLCBzcGQucm93X2RlbnMpOworCisJZGVidWcoIlN0YXJ0IGFkZHJlc3MgZm9yIHRoaXMgY29udHJvbGxlciBpcyAweCUwOGx4XG4iLCBzdGFydF9hZGRyKTsKKworCS8qCisJICogT0RUIGNvbmZpZ3VyYXRpb24gcmVjb21tZW5kYXRpb24gZnJvbSBERFIgQ29udHJvbGxlciBDaGFwdGVyLgorCSAqLworCW9kdF9yZF9jZmcgPSAwOwkJCS8qIE5ldmVyIGFzc2VydCBPRFQgKi8KKwlvZHRfd3JfY2ZnID0gMDsJCQkvKiBOZXZlciBhc3NlcnQgT0RUICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIyKSB7CisJCW9kdF93cl9jZmcgPSAxOwkJLyogQXNzZXJ0IE9EVCBvbiB3cml0ZXMgdG8gQ1MwICovCisJfQorCisjaWZkZWYgQ09ORklHX0REUl9JTlRFUkxFQVZFCisKKwlpZiAoZGltbV9udW0gIT0gMSkgeworCQlwcmludGYoIkZvciBpbnRlcmxlYXZpbmcgbWVtb3J5IG9uIEhQQ04sIG5lZWQgdG8gdXNlIERJTU0gMSBmb3IgRERSIENvbnRyb2xsZXIgJWQgIVxuIiwgZGRyX251bSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFNpbmNlIGludGVybGVhdmVkIG1lbW9yeSBvbmx5IHVzZXMgQ1MwLCB0aGUKKwkJICogbWVtb3J5IHN0aWNrcyBoYXZlIHRvIGJlIGlkZW50aWNhbCBpbiBzaXplIGFuZCBxdWFudGl0eQorCQkgKiBvZiByYW5rcy4gIFRoYXQgZXNzZW50aWFsbHkgZ2l2ZXMgZG91YmxlIHRoZSBzaXplIG9uCisJCSAqIG9uZSByYW5rLCBpLmUgb24gQ1MwIGZvciBib3RoIGNvbnRyb2xsZXJzIHB1dCB0b2dldGhlci4KKwkJICogQ29uZmlybSB0aGlzPz8/CisJCSAqLworCQlyYW5rX2RlbnNpdHkgKj0gMjsKKworCQkvKgorCQkgKiBFZzogQm91bmRzOiAweDAwMDBfMDAwMCB0byAweDBmMDAwXzAwMDAJZmlyc3QgMjU2IE1lZworCQkgKi8KKwkJc3RhcnRfYWRkciA9IDA7CisJCWRkci0+Y3MwX2JuZHMgPSAoc3RhcnRfYWRkciA+PiA4KQorCQkJfCAoKChzdGFydF9hZGRyICsgcmFua19kZW5zaXR5IC0gMSkgPj4gMjQpKTsKKwkJLyoKKwkJICogRGVmYXVsdCBpbnRlcmxlYXZpbmcgbW9kZSB0byBjYWNoZS1saW5lIGludGVybGVhdmluZy4KKwkJICovCisJCWRkci0+Y3MwX2NvbmZpZyA9ICggMSA8PCAzMQorI2lmCShDRkdfUEFHRV9JTlRFUkxFQVZJTkcgPT0gMSkKKwkJCQkgICAgfCAoUEFHRV9JTlRFUkxFQVZJTkcpCisjZWxpZgkoQ0ZHX0JBTktfSU5URVJMRUFWSU5HID09IDEpCisJCQkJICAgIHwgKEJBTktfSU5URVJMRUFWSU5HKQorI2VsaWYJKENGR19TVVBFUl9CQU5LX0lOVEVSTEVBVklORyA9PSAxKQorCQkJCSAgICB8IChTVVBFUl9CQU5LX0lOVEVSTEVBVklORykKKyNlbHNlCisJCQkJICAgIHwgKENBQ0hFX0xJTkVfSU5URVJMRUFWSU5HKQorI2VuZGlmCisJCQkJICAgIHwgKG9kdF9yZF9jZmcgPDwgMjApCisJCQkJICAgIHwgKG9kdF93cl9jZmcgPDwgMTYpCisJCQkJICAgIHwgKHNwZC5ucm93X2FkZHIgLSAxMikgPDwgOAorCQkJCSAgICB8IChzcGQubmNvbF9hZGRyIC0gOCkgKTsKKworCQlkZWJ1ZygiRERSOiBjczBfYm5kcyAgID0gMHglMDh4XG4iLCBkZHItPmNzMF9ibmRzKTsKKwkJZGVidWcoIkREUjogY3MwX2NvbmZpZyA9IDB4JTA4eFxuIiwgZGRyLT5jczBfY29uZmlnKTsKKworCQkvKgorCQkgKiBBZGp1c3RtZW50IGZvciBkdWFsIHJhbmsgbWVtb3J5IHRvIGdldCBjb3JyZWN0IG1lbW9yeQorCQkgKiBzaXplIChyZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbikuCisJCSAqLworCQlpZiAobl9yYW5rcyA9PSAyKSB7CisJCQluX3JhbmtzID0gMTsKKwkJCXJhbmtfZGVuc2l0eSAvPSAyOworCQl9IGVsc2UgeworCQkJcmFua19kZW5zaXR5IC89IDI7CisJCX0KKwl9CisjZWxzZQkvKiBDT05GSUdfRERSX0lOVEVSTEVBVkUgKi8KKworCWlmIChkaW1tX251bSA9PSAxKSB7CisJCS8qCisJCSAqIEVnOiBCb3VuZHM6IDB4MDAwMF8wMDAwIHRvIDB4MGYwMDBfMDAwMAlmaXJzdCAyNTYgTWVnCisJCSAqLworCQlkZHItPmNzMF9ibmRzID0gKHN0YXJ0X2FkZHIgPj4gOCkKKwkJCXwgKCgoc3RhcnRfYWRkciArIHJhbmtfZGVuc2l0eSAtIDEpID4+IDI0KSk7CisKKwkJZGRyLT5jczBfY29uZmlnID0gKCAxIDw8IDMxCisJCQkJICAgIHwgKG9kdF9yZF9jZmcgPDwgMjApCisJCQkJICAgIHwgKG9kdF93cl9jZmcgPDwgMTYpCisJCQkJICAgIHwgKHNwZC5ucm93X2FkZHIgLSAxMikgPDwgOAorCQkJCSAgICB8IChzcGQubmNvbF9hZGRyIC0gOCkgKTsKKworCQlkZWJ1ZygiRERSOiBjczBfYm5kcyAgID0gMHglMDh4XG4iLCBkZHItPmNzMF9ibmRzKTsKKwkJZGVidWcoIkREUjogY3MwX2NvbmZpZyA9IDB4JTA4eFxuIiwgZGRyLT5jczBfY29uZmlnKTsKKworCQlpZiAobl9yYW5rcyA9PSAyKSB7CisJCQkvKgorCQkJICogRWc6IEJvdW5kczogMHgxMDAwXzAwMDAgdG8gMHgxZjAwXzAwMDAsCisJCQkgKiBzZWNvbmQgMjU2IE1lZworCQkJICovCisJCQlkZHItPmNzMV9ibmRzID0gKCgoc3RhcnRfYWRkciArIHJhbmtfZGVuc2l0eSkgPj4gOCkKKwkJCQkJfCAoKCBzdGFydF9hZGRyICsgMipyYW5rX2RlbnNpdHkgLSAxKQorCQkJCQkgICA+PiAyNCkpOworCQkJZGRyLT5jczFfY29uZmlnID0gKCAxPDwzMQorCQkJCQkgICAgfCAob2R0X3JkX2NmZyA8PCAyMCkKKwkJCQkJICAgIHwgKG9kdF93cl9jZmcgPDwgMTYpCisJCQkJCSAgICB8IChzcGQubnJvd19hZGRyIC0gMTIpIDw8IDgKKwkJCQkJICAgIHwgKHNwZC5uY29sX2FkZHIgLSA4KSApOworCQkJZGVidWcoIkREUjogY3MxX2JuZHMgICA9IDB4JTA4eFxuIiwgZGRyLT5jczFfYm5kcyk7CisJCQlkZWJ1ZygiRERSOiBjczFfY29uZmlnID0gMHglMDh4XG4iLCBkZHItPmNzMV9jb25maWcpOworCQl9CisKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIGlzIHRoZSAybmQgRElNTSBzbG90IGZvciB0aGlzIGNvbnRyb2xsZXIKKwkJICovCisJCS8qCisJCSAqIEVnOiBCb3VuZHM6IDB4MDAwMF8wMDAwIHRvIDB4MGYwMDBfMDAwMAlmaXJzdCAyNTYgTWVnCisJCSAqLworCQlkZHItPmNzMl9ibmRzID0gKHN0YXJ0X2FkZHIgPj4gOCkKKwkJCXwgKCgoc3RhcnRfYWRkciArIHJhbmtfZGVuc2l0eSAtIDEpID4+IDI0KSk7CisKKwkJZGRyLT5jczJfY29uZmlnID0gKCAxIDw8IDMxCisJCQkJICAgIHwgKG9kdF9yZF9jZmcgPDwgMjApCisJCQkJICAgIHwgKG9kdF93cl9jZmcgPDwgMTYpCisJCQkJICAgIHwgKHNwZC5ucm93X2FkZHIgLSAxMikgPDwgOAorCQkJCSAgICB8IChzcGQubmNvbF9hZGRyIC0gOCkgKTsKKworCQlkZWJ1ZygiRERSOiBjczJfYm5kcyAgID0gMHglMDh4XG4iLCBkZHItPmNzMl9ibmRzKTsKKwkJZGVidWcoIkREUjogY3MyX2NvbmZpZyA9IDB4JTA4eFxuIiwgZGRyLT5jczJfY29uZmlnKTsKKworCQlpZiAobl9yYW5rcyA9PSAyKSB7CisJCQkvKgorCQkJICogRWc6IEJvdW5kczogMHgxMDAwXzAwMDAgdG8gMHgxZjAwXzAwMDAsCisJCQkgKiBzZWNvbmQgMjU2IE1lZworCQkJICovCisJCQlkZHItPmNzM19ibmRzID0gKCgoc3RhcnRfYWRkciArIHJhbmtfZGVuc2l0eSkgPj4gOCkKKwkJCQkJfCAoKCBzdGFydF9hZGRyICsgMipyYW5rX2RlbnNpdHkgLSAxKQorCQkJCQkgICA+PiAyNCkpOworCQkJZGRyLT5jczNfY29uZmlnID0gKCAxPDwzMQorCQkJCQkgICAgfCAob2R0X3JkX2NmZyA8PCAyMCkKKwkJCQkJICAgIHwgKG9kdF93cl9jZmcgPDwgMTYpCisJCQkJCSAgICB8IChzcGQubnJvd19hZGRyIC0gMTIpIDw8IDgKKwkJCQkJICAgIHwgKHNwZC5uY29sX2FkZHIgLSA4KSApOworCQkJZGVidWcoIkREUjogY3MzX2JuZHMgICA9IDB4JTA4eFxuIiwgZGRyLT5jczNfYm5kcyk7CisJCQlkZWJ1ZygiRERSOiBjczNfY29uZmlnID0gMHglMDh4XG4iLCBkZHItPmNzM19jb25maWcpOworCQl9CisJfQorI2VuZGlmIC8qIENPTkZJR19ERFJfSU5URVJMRUFWRSAqLworCisJLyoKKwkgKiBGaW5kIHRoZSBsYXJnZXN0IENBUyBieSBsb2NhdGluZyB0aGUgaGlnaGVzdCAxIGJpdAorCSAqIGluIHRoZSBzcGQuY2FzX2xhdCBmaWVsZC4gIFRyYW5zbGF0ZSBpdCB0byBhIEREUgorCSAqIGNvbnRyb2xsZXIgZmllbGQgdmFsdWU6CisJICoKKwkgKglDQVMgTGF0CUREUiBJCUREUiBJSQlDdHJsCisJICoJQ2xvY2tzCVNQRCBCaXQJU1BEIEJpdAlWYWx1ZQorCSAqCS0tLS0tLS0JLS0tLS0tLQktLS0tLS0tCS0tLS0tCisJICoJMS4wCTAJCTAwMDEKKwkgKgkxLjUJMQkJMDAxMAorCSAqCTIuMAkyCTIJMDAxMQorCSAqCTIuNQkzCQkwMTAwCisJICoJMy4wCTQJMwkwMTAxCisJICoJMy41CTUJCTAxMTAKKwkgKgk0LjAJCTQJMDExMQorCSAqCTQuNQkJCTEwMDAKKwkgKgk1LjAJCTUJMTAwMQorCSAqLworCWNhc2xhdCA9IF9faWxvZzIoc3BkLmNhc19sYXQpOworCWlmICgoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUikKKwkgICAgJiYgKGNhc2xhdCA+IDUpKSB7CisJCXByaW50ZigiRERSIEk6IEludmFsaWQgU1BEIENBUyBMYXRlbmN5OiAweCV4LlxuIiwgc3BkLmNhc19sYXQpOworCQlyZXR1cm4gMDsKKworCX0gZWxzZSBpZiAoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUjIKKwkJICAgJiYgKGNhc2xhdCA8IDIgfHwgY2FzbGF0ID4gNSkpIHsKKwkJcHJpbnRmKCJERFIgSUk6IEludmFsaWQgU1BEIENBUyBMYXRlbmN5OiAweCV4LlxuIiwKKwkJICAgICAgIHNwZC5jYXNfbGF0KTsKKwkJcmV0dXJuIDA7CisJfQorCWRlYnVnKCJERFI6IGNhc2xhdCBTUEQgYml0IGlzICVkXG4iLCBjYXNsYXQpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIE1heGltdW0gRGF0YSBSYXRlIGJhc2VkIG9uIHRoZSBNaW5pbXVtIEN5Y2xlIHRpbWUuCisJICogVGhlIFNQRCBjbGtfY3ljbGUgZmllbGQgKHRDS21pbikgaXMgbWVhc3VyZWQgaW4gdGVudGhzIG9mCisJICogbmFub3NlY29uZHMgYW5kIHJlcHJlc2VudGVkIGFzIEJDRC4KKwkgKi8KKwl0Q0ttaW5fcHMgPSBjb252ZXJ0X2JjZF90ZW50aHNfdG9fY3ljbGVfdGltZV9wcyhzcGQuY2xrX2N5Y2xlKTsKKwlkZWJ1ZygiRERSOiB0Q0ttaW4gPSAlZCBwc1xuIiwgdENLbWluX3BzKTsKKworCS8qCisJICogRG91YmxlLWRhdGEgcmF0ZSwgc2NhbGVkIDEwMDAgdG8gcGljb3NlY29uZHMsIGFuZCBiYWNrIGRvd24gdG8gTUh6LgorCSAqLworCW1heF9kYXRhX3JhdGUgPSAyICogMTAwMCAqIDEwMDAgLyB0Q0ttaW5fcHM7CisJZGVidWcoIkREUjogTW9kdWxlIG1heCBkYXRhIHJhdGUgPSAlZCBNaHpcbiIsIG1heF9kYXRhX3JhdGUpOworCisKKwkvKgorCSAqIEFkanVzdCB0aGUgQ0FTIExhdGVuY3kgdG8gYWxsb3cgZm9yIGJ1cyBzcGVlZHMgdGhhdAorCSAqIGFyZSBzbG93ZXIgdGhhbiB0aGUgRERSIG1vZHVsZS4KKwkgKi8KKwlidXNmcmVxID0gZ2V0X2J1c19mcmVxKDApIC8gMTAwMDAwMDsJLyogTUh6ICovCisKKwlpZiAoKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIyKSAmJiAoYnVzZnJlcSA8IDI2NikpIHsKKwkJcHJpbnRmKCJERFI6IHBsYXRmb3JtIGZyZXF1ZW5jeSB0b28gbG93IGZvciBjb3JyZWN0IEREUjIgY29udHJvbGxlciBvcGVyYXRpb25cbiIpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGJ1c2ZyZXEgPCA5MCkgeworCQlwcmludGYoIkREUjogcGxhdGZvcm0gZnJlcXVlbmN5IHRvbyBsb3cgZm9yIGNvcnJlY3QgRERSMSBvcGVyYXRpb25cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGJ1c2ZyZXEgPD0gbW9kZnJlcSkgJiYgKHNwZC5jYXNfbGF0ICYgKDEgPDwgKGNhc2xhdCAtIDIpKSkpIHsKKwkJY2FzbGF0IC09IDI7CisJfSBlbHNlIHsKKwkJdEN5Y2xlX3BzID0gY29udmVydF9iY2RfdGVudGhzX3RvX2N5Y2xlX3RpbWVfcHMoc3BkLmNsa19jeWNsZTIpOworCQltb2RmcmVxID0gMiAqIDEwMDAgKiAxMDAwIC8gdEN5Y2xlX3BzOworCQlpZiAoKGJ1c2ZyZXEgPD0gbW9kZnJlcSkgJiYgKHNwZC5jYXNfbGF0ICYgKDEgPDwgKGNhc2xhdCAtIDEpKSkpCisJCQljYXNsYXQgLT0gMTsKKwkJZWxzZSBpZiAoYnVzZnJlcSA+IG1heF9kYXRhX3JhdGUpIHsKKwkJCXByaW50ZigiRERSOiBCdXMgZnJlcSAlZCBNSHogaXMgbm90IGZpdCBmb3IgRERSIHJhdGUgJWQgTUh6XG4iLAorCQkgICAgIAlidXNmcmVxLCBtYXhfZGF0YV9yYXRlKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBFbXBpcmljYWxseSBzZXQgfk1DQVMtdG8tcHJlYW1ibGUgb3ZlcnJpZGUgZm9yIEREUiAyLgorCSAqIFlvdXIgbWlsYWdlIHdpbGwgdmFyeS4KKwkgKi8KKwljcG8gPSAwOworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSMikgeworCQlpZiAoYnVzZnJlcSA8PSAzMzMpIHsKKwkJCWNwbyA9IDB4NzsKKwkJfSBlbHNlIGlmIChidXNmcmVxIDw9IDQwMCkgeworCQkJY3BvID0gMHg5OworCQl9IGVsc2UgeworCQkJY3BvID0gMHhhOworCQl9CisJfQorCisJLyoKKwkgKiBDb252ZXJ0IGNhc2xhdCBjbG9ja3MgdG8gRERSIGNvbnRyb2xsZXIgdmFsdWUuCisJICogRm9yY2UgY2FzbGF0X2N0cmwgdG8gYmUgRERSIENvbnRyb2xsZXIgZmllbGQtc2l6ZWQuCisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJY2FzbGF0X2N0cmwgPSAoY2FzbGF0ICsgMSkgJiAweDA3OworCX0gZWxzZSB7CisJCWNhc2xhdF9jdHJsID0gICgyICogY2FzbGF0IC0gMSkgJiAweDBmOworCX0KKworCWRlYnVnKCJERFI6IGNhc2xhdCBTUEQgYml0IGlzICVkLCBjb250cm9sbGVyIGZpZWxkIGlzIDB4JXhcbiIsCisJICAgICAgY2FzbGF0LCBjYXNsYXRfY3RybCk7CisKKwkvKgorCSAqIFRpbWluZyBDb25maWcgMC4KKwkgKiBBdm9pZCB3cml0aW5nIGZvciBERFIgSS4gIFRoZSBuZXcgUFEzOCBERFIgY29udHJvbGxlcgorCSAqIGRyZWFtcyB1cCBub24temVybyBkZWZhdWx0IHZhbHVlcyB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZS4KKwkgKi8KKwlpZiAoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUjIpIHsKKwkJdW5zaWduZWQgY2hhciB0YXhwZF9jbGsgPSA4OwkJLyogQnkgdGhlIGJvb2suICovCisJCXVuc2lnbmVkIGNoYXIgdG1yZF9jbGsgPSAyOwkJLyogQnkgdGhlIGJvb2suICovCisJCXVuc2lnbmVkIGNoYXIgYWN0X3BkX2V4aXQgPSAyOwkJLyogRW1waXJpY2FsPyAqLworCQl1bnNpZ25lZCBjaGFyIHByZV9wZF9leGl0ID0gNjsJCS8qIEVtcGlyaWNhbD8gKi8KKworCQlkZHItPnRpbWluZ19jZmdfMCA9ICgwCisJCQl8ICgoYWN0X3BkX2V4aXQgJiAweDcpIDw8IDIwKQkvKiBBQ1RfUERfRVhJVCAqLworCQkJfCAoKHByZV9wZF9leGl0ICYgMHg3KSA8PCAxNikJLyogUFJFX1BEX0VYSVQgKi8KKwkJCXwgKCh0YXhwZF9jbGsgJiAweGYpIDw8IDgpCS8qIE9EVF9QRF9FWElUICovCisJCQl8ICgodG1yZF9jbGsgJiAweGYpIDw8IDApCS8qIE1SU19DWUMgKi8KKwkJCSk7CisJCWRlYnVnKCJERFI6IHRpbWluZ19jZmdfMCA9IDB4JTA4eFxuIiwgZGRyLT50aW1pbmdfY2ZnXzApOworCisJfQorCisKKwkvKgorCSAqIFNvbWUgVGltaW5nIENvbmZpZyAxIHZhbHVlcyBub3cuCisJICogU25lYWsgRXh0ZW5kZWQgUmVmcmVzaCBSZWNvdmVyeSBpbiBoZXJlIHRvby4KKwkgKi8KKworCS8qCisJICogRm9yIEREUiBJLCBXUlJFQyhUd3IpIGFuZCBXUlRPUkQoVHd0cikgYXJlIG5vdCBpbiBTUEQsCisJICogdXNlIGNvbnNlcnZhdGl2ZSB2YWx1ZS4KKwkgKiBGb3IgRERSIElJLCB0aGV5IGFyZSBieXRlcyAzNiBhbmQgMzcsIGluIHF1YXJ0ZXIgbmFub3MuCisJICovCisKKwlpZiAoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUikgeworCQl0d3JfY2xrID0gMzsJLyogQ2xvY2tzICovCisJCXR3dHJfY2xrID0gMTsJLyogQ2xvY2tzICovCisJfSBlbHNlIHsKKwkJdHdyX2NsayA9IHBpY29zX3RvX2NsayhzcGQudHdyICogMjUwKTsKKwkJdHd0cl9jbGsgPSBwaWNvc190b19jbGsoc3BkLnR3dHIgKiAyNTApOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIFRyZmMsIGluIHBpY29zLgorCSAqIEREUiBJOiAgQnl0ZSA0MiBzdHJhaWdodCB1cCBpbiBucy4KKwkgKiBERFIgSUk6IEJ5dGUgNDAgYW5kIDQyIHN3aXp6bGVkIHNvbWUsIGluIG5zLgorCSAqLworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKSB7CisJCXRyZmMgPSBzcGQudHJmYyAqIDEwMDA7CQkvKiB1cCB0byBwcyAqLworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBieXRlNDBfdGFibGVfcHNbOF0gPSB7CisJCQkwLAorCQkJMjUwLAorCQkJMzMwLAorCQkJNTAwLAorCQkJNjYwLAorCQkJNzUwLAorCQkJMCwKKwkJCTAKKwkJfTsKKworCQl0cmZjID0gKCgoc3BkLnRyY3RyZmNfZXh0ICYgMHgxKSAqIDI1NikgKyBzcGQudHJmYykgKiAxMDAwCisJCQkrIGJ5dGU0MF90YWJsZV9wc1soc3BkLnRyY3RyZmNfZXh0ID4+IDEpICYgMHg3XTsKKwl9CisJdHJmY19jbGsgPSBwaWNvc190b19jbGsodHJmYyk7CisKKwkvKgorCSAqIFRyY2QsIEJ5dGUgMjksIGZyb20gcXVhcnRlciBuYW5vcyB0byBwcyBhbmQgY2xvY2tzLgorCSAqLworCXRyY2RfY2xrID0gcGljb3NfdG9fY2xrKHNwZC50cmNkICogMjUwKSAmIDB4NzsKKworCS8qCisJICogQ29udmVydCB0cmZjX2NsayB0byBERFIgY29udHJvbGxlciBmaWVsZHMuICBERFIgSSBzaG91bGQKKwkgKiBmaXQgaW4gdGhlIFJFRlJFQyBmaWVsZCAoMTYtMTkpIG9mIFRJTUlOR19DRkdfMSwgYnV0IHRoZQorCSAqIDg1NDggY29udHJvbGxlciBoYXMgYW4gZXh0ZW5kZWQgUkVGUkVDIGZpZWxkIG9mIHRocmVlIGJpdHMuCisJICogVGhlIGNvbnRyb2xsZXIgYXV0b21hdGljYWxseSBhZGRzIDggY2xvY2tzIHRvIHRoaXMgdmFsdWUsCisJICogc28gcHJlYWRqdXN0IGl0IGRvd24gOCBmaXJzdCBiZWZvcmUgc3BsaXR0aW5nIGl0IHVwLgorCSAqLworCXRyZmNfbG93ID0gKHRyZmNfY2xrIC0gOCkgJiAweGY7CisJdHJmY19oaWdoID0gKCh0cmZjX2NsayAtIDgpID4+IDQpICYgMHgzOworCisJLyoKKwkgKiBTbmVhayBpbiBzb21lIEV4dGVuZGVkIFJlZnJlc2ggUmVjb3ZlcnkuCisJICovCisJZGRyLT5leHRfcmVmcmVjID0gKHRyZmNfaGlnaCA8PCAxNik7CisJZGVidWcoIkREUjogZXh0X3JlZnJlYyA9IDB4JTA4eFxuIiwgZGRyLT5leHRfcmVmcmVjKTsKKworCWRkci0+dGltaW5nX2NmZ18xID0KKwkgICAgKDAKKwkgICAgIHwgKChwaWNvc190b19jbGsoc3BkLnRycCAqIDI1MCkgJiAweDA3KSA8PCAyOCkJLyogUFJFVE9BQ1QgKi8KKwkgICAgIHwgKChwaWNvc190b19jbGsoc3BkLnRyYXMgKiAxMDAwKSAmIDB4MGYgKSA8PCAyNCkJLyogQUNUVE9QUkUgKi8KKwkgICAgIHwgKHRyY2RfY2xrIDw8IDIwKQkJCQkJLyogQUNUVE9SVyAqLworCSAgICAgfCAoY2FzbGF0X2N0cmwgPDwgMTYpCQkJCS8qIENBU0xBVCAqLworCSAgICAgfCAodHJmY19sb3cgPDwgMTIpCQkJCQkvKiBSRUZFQyAqLworCSAgICAgfCAoKHR3cl9jbGsgJiAweDA3KSA8PCA4KQkJCQkvKiBXUlJSRUMgKi8KKwkgICAgIHwgKChwaWNvc190b19jbGsoc3BkLnRycmQgKiAyNTApICYgMHgwNykgPDwgNCkJLyogQUNUVE9BQ1QgKi8KKwkgICAgIHwgKCh0d3RyX2NsayAmIDB4MDcpIDw8IDApCQkJCS8qIFdSVE9SRCAqLworCSAgICAgKTsKKworCWRlYnVnKCJERFI6IHRpbWluZ19jZmdfMSAgPSAweCUwOHhcbiIsIGRkci0+dGltaW5nX2NmZ18xKTsKKworCisJLyoKKwkgKiBUaW1pbmdfQ29uZmlnXzIKKwkgKiBXYXM6IDB4MDAwMDA4MDA7CisJICovCisKKwkvKgorCSAqIEFkZGl0aXZlIExhdGVuY3kKKwkgKiBGb3IgRERSIEksIDAuCisJICogRm9yIEREUiBJSSwgd2l0aCBPRFQgZW5hYmxlZCwgdXNlICJhIHZhbHVlIiBsZXNzIHRoYW4gQUNUVE9SVywKKwkgKiB3aGljaCBjb21lcyBmcm9tIFRyY2QsIGFuZCBhbHNvIG5vdGUgdGhhdDoKKwkgKglhZGRfbGF0ICsgY2FzbGF0IG11c3QgYmUgPj0gNAorCSAqLworCWFkZF9sYXQgPSAwOworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSMgorCSAgICAmJiAob2R0X3dyX2NmZyB8fCBvZHRfcmRfY2ZnKQorCSAgICAmJiAoY2FzbGF0IDwgNCkpIHsKKwkJYWRkX2xhdCA9IDQgLSBjYXNsYXQ7CisJCWlmIChhZGRfbGF0ID49IHRyY2RfY2xrKSB7CisJCQlhZGRfbGF0ID0gdHJjZF9jbGsgLSAxOworCQl9CisJfQorCisJLyoKKwkgKiBXcml0ZSBEYXRhIERlbGF5CisJICogSGlzdG9yaWNhbGx5IDB4MiA9PSA0LzggY2xvY2sgZGVsYXkuCisJICogRW1waXJpY2FsbHksIDB4MyA9PSA2LzggY2xvY2sgZGVsYXkgaXMgc3VnZ2VzdGVkIGZvciBERFIgSSAyNjYuCisJICovCisJd3JfZGF0YV9kZWxheSA9IDM7CisKKwkvKgorCSAqIFdyaXRlIExhdGVuY3kKKwkgKiBSZWFkIHRvIFByZWNoYXJnZQorCSAqIE1pbmltdW0gQ0tFIFB1bHNlIFdpZHRoLgorCSAqIEZvdXIgQWN0aXZhdGUgV2luZG93CisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhIGxpZS4gIEl0IHNob3VsZCByZWFsbHkgYmUgMSwgYnV0IGlmIGl0IGlzCisJCSAqIHNldCB0byAxLCBiaXRzIG92ZXJsYXAgaW50byB0aGUgb2xkIGNvbnRyb2xsZXIncworCQkgKiBvdGhlcndpc2UgdW51c2VkIEFDU00gZmllbGQuICBJZiB3ZSBsZWF2ZSBpdCAwLCB0aGVuCisJCSAqIHRoZSBIVyB3aWxsIG1hZ2ljYWxseSB0cmVhdCBpdCBhcyAxIGZvciBERFIgMS4gIE9oIFllYS4KKwkJICovCisJCXdyX2xhdCA9IDA7CisKKwkJdHJ0cF9jbGsgPSAyOwkJLyogQnkgdGhlIGJvb2suICovCisJCWNrZV9taW5fY2xrID0gMTsJLyogQnkgdGhlIGJvb2suICovCisJCWZvdXJfYWN0ID0gMTsJCS8qIEJ5IHRoZSBib29rLiAqLworCisJfSBlbHNlIHsKKwkJd3JfbGF0ID0gY2FzbGF0IC0gMTsKKworCQkvKiBDb252ZXJ0IFNQRCB2YWx1ZSBmcm9tIHF1YXJ0ZXIgbmFub3MgdG8gcGljb3MuICovCisJCXRydHBfY2xrID0gcGljb3NfdG9fY2xrKHNwZC50cnRwICogMjUwKTsKKworCQlja2VfbWluX2NsayA9IDM7CS8qIEJ5IHRoZSBib29rLiAqLworCQlmb3VyX2FjdCA9IHBpY29zX3RvX2NsaygzNzUwMCk7CS8qIEJ5IHRoZSBib29rLiAxayBwYWdlcz8gKi8KKwl9CisKKwlkZHItPnRpbWluZ19jZmdfMiA9ICgwCisJCXwgKChhZGRfbGF0ICYgMHg3KSA8PCAyOCkJCS8qIEFERF9MQVQgKi8KKwkJfCAoKGNwbyAmIDB4MWYpIDw8IDIzKQkJCS8qIENQTyAqLworCQl8ICgod3JfbGF0ICYgMHg3KSA8PCAxOSkJCS8qIFdSX0xBVCAqLworCQl8ICgodHJ0cF9jbGsgJiAweDcpIDw8IDEzKQkJLyogUkRfVE9fUFJFICovCisJCXwgKCh3cl9kYXRhX2RlbGF5ICYgMHg3KSA8PCAxMCkJCS8qIFdSX0RBVEFfREVMQVkgKi8KKwkJfCAoKGNrZV9taW5fY2xrICYgMHg3KSA8PCA2KQkJLyogQ0tFX1BMUyAqLworCQl8ICgoZm91cl9hY3QgJiAweDFmKSA8PCAwKQkJLyogRk9VUl9BQ1QgKi8KKwkJKTsKKworCWRlYnVnKCJERFI6IHRpbWluZ19jZmdfMiA9IDB4JTA4eFxuIiwgZGRyLT50aW1pbmdfY2ZnXzIpOworCisKKwkvKgorCSAqIERldGVybWluZSB0aGUgTW9kZSBSZWdpc3RlciBTZXQuCisJICoKKwkgKiBUaGlzIGlzIG5vbWluYWxseSBwYXJ0IHNwZWNpZmljLCBidXQgaXQgYXBwZWFycyB0byBiZQorCSAqIGNvbnNpc3RlbnQgZm9yIGFsbCBERFIgSSBkZXZpY2VzLCBhbmQgZm9yIGFsbCBERFIgSUkgZGV2aWNlcy4KKwkgKgorCSAqICAgICBjYXNsYXQgbXVzdCBiZSBwcm9ncmFtbWVkCisJICogICAgIGJ1cnN0IGxlbmd0aCBpcyBhbHdheXMgNAorCSAqICAgICBidXJzdCB0eXBlIGlzIHNlcXVlbnRpYWwKKwkgKgorCSAqIEZvciBERFIgSToKKwkgKiAgICAgb3BlcmF0aW5nIG1vZGUgaXMgIm5vcm1hbCIKKwkgKgorCSAqIEZvciBERFIgSUk6CisJICogICAgIG90aGVyIHN0dWZmCisJICovCisKKwltb2RlX2Nhc2xhdCA9IDA7CisKKwkvKgorCSAqIFRhYmxlIGxvb2t1cCBmcm9tIEREUiBJIG9yIElJIERldmljZSBPcGVyYXRpb24gU3BlY3MuCisJICovCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJaWYgKDEgPD0gY2FzbGF0ICYmIGNhc2xhdCA8PSA0KSB7CisJCQl1bnNpZ25lZCBjaGFyIG1vZGVfY2FzbGF0X3RhYmxlWzRdID0geworCQkJCTB4NSwJLyogMS41IGNsb2NrcyAqLworCQkJCTB4MiwJLyogMi4wIGNsb2NrcyAqLworCQkJCTB4NiwJLyogMi41IGNsb2NrcyAqLworCQkJCTB4MwkvKiAzLjAgY2xvY2tzICovCisJCQl9OworCQkJbW9kZV9jYXNsYXQgPSBtb2RlX2Nhc2xhdF90YWJsZVtjYXNsYXQgLSAxXTsKKwkJfSBlbHNlIHsKKwkJCXB1dHMoIkREUiBJOiBPbmx5IENBUyBMYXRlbmNpZXMgb2YgMS41LCAyLjAsICIKKwkJCSAgICAgIjIuNSBhbmQgMy4wIGNsb2NrcyBhcmUgc3VwcG9ydGVkLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKDIgPD0gY2FzbGF0ICYmIGNhc2xhdCA8PSA1KSB7CisJCQltb2RlX2Nhc2xhdCA9IGNhc2xhdDsKKwkJfSBlbHNlIHsKKwkJCXB1dHMoIkREUiBJSTogT25seSBDQVMgTGF0ZW5jaWVzIG9mIDIuMCwgMy4wLCAiCisJCQkgICAgICI0LjAgYW5kIDUuMCBjbG9ja3MgYXJlIHN1cHBvcnRlZC5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIEVuY29kZWQgQnVyc3QgTGVuZ3RoIG9mIDQuCisJICovCisJYnVyc3RfbGVuID0gMjsJCQkvKiBGaWF0LiAqLworCisJaWYgKHNwZC5tZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIpIHsKKwkJdHdyX2F1dG9fY2xrID0gMDsJLyogSGlzdG9yaWNhbCAqLworCX0gZWxzZSB7CisJCS8qCisJCSAqIERldGVybWluZSB0Q0sgbWF4IGluIHBpY29zLiAgR3JhYiB0V1IgYW5kIGNvbnZlcnQgdG8gcGljb3MuCisJCSAqIEF1dG8tcHJlY2hhcmdlIHdyaXRlIHJlY292ZXJ5IGlzOgorCQkgKglXUiA9IHJvdW5kdXAodFdSX25zL3RDS21heF9ucykuCisJCSAqCisJCSAqIFBvbmRlcjogSXMgdHdyX2F1dG9fY2xrIGRpZmZlcmVudCB0aGFuIHR3cl9jbGs/CisJCSAqLworCQl0Q0ttYXhfcHMgPSBjb252ZXJ0X2JjZF90ZW50aHNfdG9fY3ljbGVfdGltZV9wcyhzcGQudGNrbWF4KTsKKwkJdHdyX2F1dG9fY2xrID0gKHNwZC50d3IgKiAyNTAgKyB0Q0ttYXhfcHMgLSAxKSAvIHRDS21heF9wczsKKwl9CisKKworCS8qCisJICogTW9kZSBSZWcgaW4gYml0cyAxNiB+IDMxLAorCSAqIEV4dGVuZGVkIE1vZGUgUmVnIDEgaW4gYml0cyAwIH4gMTUuCisJICovCisJbW9kZV9vZHRfZW5hYmxlID0gMHgwOwkJCS8qIERlZmF1bHQgZGlzYWJsZWQgKi8KKwlpZiAob2R0X3dyX2NmZyB8fCBvZHRfcmRfY2ZnKSB7CisJCS8qCisJCSAqIEJpdHMgNiBhbmQgMiBpbiBFeHRlbmRlZCBNUlMoMSkKKwkJICogQml0IDIgPT0gMHgwNCA9PSA3NSBPaG0sIHdpdGggMiBESU1NIG1vZHVsZXMuCisJCSAqIEJpdCA2ID09IDB4NDAgPT0gMTUwIE9obSwgd2l0aCAxIERJTU0gbW9kdWxlLgorCQkgKi8KKwkJbW9kZV9vZHRfZW5hYmxlID0gMHg0MDsJCS8qIDE1MCBPaG0gKi8KKwl9CisKKwlkZHItPnNkcmFtX21vZGVfMSA9CisJCSgwCisJCSB8IChhZGRfbGF0IDw8ICgxNiArIDMpKQkvKiBBZGRpdGl2ZSBMYXRlbmN5IGluIEVNUlMxICovCisJCSB8IChtb2RlX29kdF9lbmFibGUgPDwgMTYpCS8qIE9EVCBFbmFibGUgaW4gRU1SUzEgKi8KKwkJIHwgKHR3cl9hdXRvX2NsayA8PCA5KQkJLyogV3JpdGUgUmVjb3ZlcnkgQXV0b3ByZSAqLworCQkgfCAobW9kZV9jYXNsYXQgPDwgNCkJCS8qIGNhc2xhdCAqLworCQkgfCAoYnVyc3RfbGVuIDw8IDApCQkvKiBCdXJzdCBsZW5ndGggKi8KKwkJICk7CisKKwlkZWJ1ZygiRERSOiBzZHJhbV9tb2RlICAgPSAweCUwOHhcbiIsIGRkci0+c2RyYW1fbW9kZV8xKTsKKworCisJLyoKKwkgKiBDbGVhciBFTVJTMiBhbmQgRU1SUzMuCisJICovCisJZGRyLT5zZHJhbV9tb2RlXzIgPSAwOworCWRlYnVnKCJERFI6IHNkcmFtX21vZGVfMiA9IDB4JTA4eFxuIiwgZGRyLT5zZHJhbV9tb2RlXzIpOworCisKKwkvKgorCSAqIERldGVybWluZSBSZWZyZXNoIFJhdGUuICBJZ25vcmUgc2VsZiByZWZyZXNoIGJpdCBvbiBERFIgSS4KKwkgKiBUYWJsZSBmcm9tIFNQRCBTcGVjLCBCeXRlIDEyLCBjb252ZXJ0ZWQgdG8gcGljb3NlY29uZHMgYW5kCisJICogZmlsbGVkIGluIHdpdGggImRlZmF1bHQiIG5vcm1hbCB2YWx1ZXMuCisJICovCisJeworCQl1bnNpZ25lZCBpbnQgcmVmcmVzaF9jbGs7CisJCXVuc2lnbmVkIGludCByZWZyZXNoX3RpbWVfbnNbOF0gPSB7CisJCQkxNTYyNTAwMCwJLyogMCBOb3JtYWwgICAgMS4wMHggKi8KKwkJCTM5MDAwMDAsCS8qIDEgUmVkdWNlZCAgICAuMjV4ICovCisJCQk3ODAwMDAwLAkvKiAyIEV4dGVuZGVkICAgLjUweCAqLworCQkJMzEzMDAwMDAsCS8qIDMgRXh0ZW5kZWQgIDIuMDB4ICovCisJCQk2MjUwMDAwMCwJLyogNCBFeHRlbmRlZCAgNC4wMHggKi8KKwkJCTEyNTAwMDAwMCwJLyogNSBFeHRlbmRlZCAgOC4wMHggKi8KKwkJCTE1NjI1MDAwLAkvKiA2IE5vcm1hbCAgICAxLjAweCAgZmlsbGVyICovCisJCQkxNTYyNTAwMCwJLyogNyBOb3JtYWwgICAgMS4wMHggIGZpbGxlciAqLworCQl9OworCisJCXJlZnJlc2hfY2xrID0gcGljb3NfdG9fY2xrKHJlZnJlc2hfdGltZV9uc1tzcGQucmVmcmVzaCAmIDB4N10pOworCisJCS8qCisJCSAqIFNldCBCU1RPUFJFIHRvIDB4MTAwIGZvciBwYWdlIG1vZGUKKwkJICogSWYgYXV0by1jaGFyZ2UgaXMgdXNlZCwgc2V0IEJTVE9QUkUgPSAwCisJCSAqLworCQlkZHItPnNkcmFtX2ludGVydmFsID0KKwkJCSgwCisJCQkgfCAocmVmcmVzaF9jbGsgJiAweDNmZmYpIDw8IDE2CisJCQkgfCAweDEwMAorCQkJICk7CisJCWRlYnVnKCJERFI6IHNkcmFtX2ludGVydmFsID0gMHglMDh4XG4iLCBkZHItPnNkcmFtX2ludGVydmFsKTsKKwl9CisKKwkvKgorCSAqIElzIHRoaXMgYW4gRUNDIEREUiBjaGlwPworCSAqIEJ1dCBkb24ndCBtZXNzIHdpdGggaXQgaWYgdGhlIEREUiBjb250cm9sbGVyIHdpbGwgaW5pdCBtZW0uCisJICovCisjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQorCWlmIChzcGQuY29uZmlnID09IDB4MDIpIHsKKwkJZGRyLT5lcnJfZGlzYWJsZSA9IDB4MDAwMDAwMGQ7CisJCWRkci0+ZXJyX3NiZSA9IDB4MDBmZjAwMDA7CisJfQorCWRlYnVnKCJERFI6IGVycl9kaXNhYmxlID0gMHglMDh4XG4iLCBkZHItPmVycl9kaXNhYmxlKTsKKwlkZWJ1ZygiRERSOiBlcnJfc2JlID0gMHglMDh4XG4iLCBkZHItPmVycl9zYmUpOworI2VuZGlmCisKKwlhc20gdm9sYXRpbGUoInN5bmM7aXN5bmMiKTsKKwl1ZGVsYXkoNTAwKTsKKworCS8qCisJICogU0RSQU0gQ2ZnIDIKKwkgKi8KKworCS8qCisJICogV2hlbiBPRFQgaXMgZW5hYmxlZCwgQ2hhcCA5IHN1Z2dlc3RzIGFzc2VydGluZyBPRFQgdG8KKwkgKiBpbnRlcm5hbCBJT3Mgb25seSBkdXJpbmcgcmVhZHMuCisJICovCisJb2R0X2NmZyA9IDA7CisJaWYgKG9kdF9yZF9jZmcgfCBvZHRfd3JfY2ZnKSB7CisJCW9kdF9jZmcgPSAweDI7CQkvKiBPRFQgdG8gSU9zIGR1cmluZyByZWFkcyAqLworCX0KKworCS8qCisJICogVHJ5IHRvIHVzZSBkaWZmZXJlbnRpYWwgRFFTIHdpdGggRERSIElJLgorCSAqLworCWlmIChzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKSB7CisJCWRxc19jZmcgPSAwOwkJLyogTm8gRGlmZmVyZW50aWFsIERRUyBmb3IgRERSIEkgKi8KKwl9IGVsc2UgeworCQlkcXNfY2ZnID0gMHgxOwkJLyogRGlmZmVyZW50aWFsIERRUyBmb3IgRERSIElJICovCisJfQorCisjaWYgZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCisJLyoKKwkgKiBVc2UgdGhlIEREUiBjb250cm9sbGVyIHRvIGF1dG8gaW5pdGlhbGl6ZSBtZW1vcnkuCisJICovCisJZF9pbml0ID0gMTsKKwlkZHItPnNkcmFtX2RhdGFfaW5pdCA9IENPTkZJR19NRU1fSU5JVF9WQUxVRTsKKwlkZWJ1ZygiRERSOiBkZHJfZGF0YV9pbml0ID0gMHglMDh4XG4iLCBkZHItPnNkcmFtX2RhdGFfaW5pdCk7CisjZWxzZQorCS8qCisJICogTWVtb3J5IHdpbGwgYmUgaW5pdGlhbGl6ZWQgdmlhIERNQSwgb3Igbm90IGF0IGFsbC4KKwkgKi8KKwlkX2luaXQgPSAwOworI2VuZGlmCisKKwlkZHItPnNkcmFtX2NmZ18yID0gKDAKKwkJCSAgICB8IChkcXNfY2ZnIDw8IDI2KQkvKiBEaWZmZXJlbnRpYWwgRFFTICovCisJCQkgICAgfCAob2R0X2NmZyA8PCAyMSkJLyogT0RUICovCisJCQkgICAgfCAoZF9pbml0IDw8IDQpCS8qIERfSU5JVCBhdXRvIGluaXQgRERSICovCisJCQkgICAgKTsKKworCWRlYnVnKCJERFI6IHNkcmFtX2NmZ18yICA9IDB4JTA4eFxuIiwgZGRyLT5zZHJhbV9jZmdfMik7CisKKworI2lmZGVmIE1QQzg2eHhfRERSX1NEUkFNX0NMS19DTlRMCisJeworCQl1bnNpZ25lZCBjaGFyIGNsa19hZGp1c3Q7CisKKwkJLyoKKwkJICogU2V0dXAgdGhlIGNsb2NrIGNvbnRyb2wuCisJCSAqIFNEUkFNX0NMS19DTlRMWzBdID0gU291cmNlIHN5bmNocm9ub3VzIGVuYWJsZSA9PSAxCisJCSAqIFNEUkFNX0NMS19DTlRMWzUtN10gPSBDbG9jayBBZGp1c3QKKwkJICoJMDExMAkzLzQgY3ljbGUgbGF0ZQorCQkgKgkwMTExCTcvOCBjeWNsZSBsYXRlCisJCSAqLworCQlpZiAoc3BkLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUikgeworCQkJY2xrX2FkanVzdCA9IDB4NjsKKwkJfSBlbHNlIHsKKwkJCWNsa19hZGp1c3QgPSAweDc7CisJCX0KKworCQlkZHItPnNkcmFtX2Nsa19jbnRsID0gKDAKKwkJCSAgICAgICB8IDB4ODAwMDAwMDAKKwkJCSAgICAgICB8IChjbGtfYWRqdXN0IDw8IDIzKQorCQkJICAgICAgICk7CisJCWRlYnVnKCJERFI6IHNkcmFtX2Nsa19jbnRsID0gMHglMDh4XG4iLCBkZHItPnNkcmFtX2Nsa19jbnRsKTsKKwl9CisjZW5kaWYKKworCisJLyoKKwkgKiBGaWd1cmUgb3V0IG1lbW9yeSBzaXplIGluIE1lZ2FieXRlcy4KKwkgKi8KKwlkZWJ1ZygiIyByYW5rcyA9ICVkLCByYW5rX2RlbnNpdHkgPSAweCUwOGx4XG4iLCBuX3JhbmtzLCByYW5rX2RlbnNpdHkpOworCW1lbXNpemUgPSBuX3JhbmtzICogcmFua19kZW5zaXR5IC8gMHgxMDAwMDA7CisJcmV0dXJuIG1lbXNpemU7Cit9CisKKwordW5zaWduZWQgaW50IGVuYWJsZV9kZHIodW5zaWduZWQgaW50IGRkcl9udW0pCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXNwZF9lZXByb21fdCBzcGQxLHNwZDI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyOworCXVuc2lnbmVkIHNkcmFtX2NmZ18xOworCXVuc2lnbmVkIGNoYXIgc2RyYW1fdHlwZSwgbWVtX3R5cGUsIGNvbmZpZywgbW9kX2F0dHI7CisJdW5zaWduZWQgY2hhciBkX2luaXQ7CisJdW5zaWduZWQgaW50IG5vX2RpbW0xPTAsIG5vX2RpbW0yPTA7CisKKwkvKiBTZXQgdXAgcG9pbnRlciB0byBlbmFibGUgdGhlIGN1cnJlbnQgZGRyIGNvbnRyb2xsZXIgKi8KKwlpZiAoZGRyX251bSA9PSAxKQorCQlkZHIgPSAmaW1tYXAtPmltX2RkcjE7CisJZWxzZQorCQlkZHIgPSAmaW1tYXAtPmltX2RkcjI7CisKKwkvKgorCSAqIFJlYWQgYm90aCBkaW1tIHNsb3RzIGFuZCBkZWNpZGUgd2hldGhlcgorCSAqIG9yIG5vdCB0byBlbmFibGUgdGhpcyBjb250cm9sbGVyLgorCSAqLworCW1lbXNldCgodm9pZCAqKSZzcGQxLDAsc2l6ZW9mKHNwZDEpKTsKKwltZW1zZXQoKHZvaWQgKikmc3BkMiwwLHNpemVvZihzcGQyKSk7CisKKwlpZiAoZGRyX251bSA9PSAxKSB7CisJCUNGR19SRUFEX1NQRChTUERfRUVQUk9NX0FERFJFU1MxLAorCQkJICAgICAwLCAxLCAodWNoYXIgKikgJnNwZDEsIHNpemVvZihzcGQxKSk7CisJCUNGR19SRUFEX1NQRChTUERfRUVQUk9NX0FERFJFU1MyLAorCQkJICAgICAwLCAxLCAodWNoYXIgKikgJnNwZDIsIHNpemVvZihzcGQyKSk7CisJfSBlbHNlIHsKKwkJQ0ZHX1JFQURfU1BEKFNQRF9FRVBST01fQUREUkVTUzMsCisJCQkgICAgIDAsIDEsICh1Y2hhciAqKSAmc3BkMSwgc2l6ZW9mKHNwZDEpKTsKKwkJQ0ZHX1JFQURfU1BEKFNQRF9FRVBST01fQUREUkVTUzQsCisJCQkgICAgIDAsIDEsICh1Y2hhciAqKSAmc3BkMiwgc2l6ZW9mKHNwZDIpKTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBzdXBwb3J0ZWQgbWVtb3J5IG1vZHVsZSB0eXBlcy4KKwkgKi8KKwlpZiAoc3BkMS5tZW1fdHlwZSAhPSBTUERfTUVNVFlQRV9ERFIKKwkgICAgJiYgc3BkMS5tZW1fdHlwZSAhPSBTUERfTUVNVFlQRV9ERFIyKSB7CisJCW5vX2RpbW0xID0gMTsKKwl9IGVsc2UgeworCQlkZWJ1ZygiXG5Gb3VuZCBtZW1vcnkgb2YgdHlwZSAweCUwMmx4ICAiLHNwZDEubWVtX3R5cGUgKTsKKwkJaWYgKHNwZDEubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKQorCQkJZGVidWcoIkREUiBJXG4iKTsKKwkJZWxzZQorCQkJZGVidWcoIkREUiBJSVxuIik7CisJfQorCisJaWYgKHNwZDIubWVtX3R5cGUgIT0gU1BEX01FTVRZUEVfRERSICYmCisJICAgIHNwZDIubWVtX3R5cGUgIT0gU1BEX01FTVRZUEVfRERSMikgeworCQlub19kaW1tMiA9IDE7CisJfSBlbHNlIHsKKwkJZGVidWcoIlxuRm91bmQgbWVtb3J5IG9mIHR5cGUgMHglMDJseCAgIixzcGQyLm1lbV90eXBlICk7CisJCWlmIChzcGQyLm1lbV90eXBlID09IFNQRF9NRU1UWVBFX0REUikKKwkJCWRlYnVnKCJERFIgSVxuIik7CisJCWVsc2UKKwkJCWRlYnVnKCJERFIgSUlcbiIpOworCX0KKworI2lmZGVmIENPTkZJR19ERFJfSU5URVJMRUFWRQorCWlmIChub19kaW1tMSkgeworCQlwcmludGYoIkZvciBpbnRlcmxlYXZlZCBvcGVyYXRpb24gbWVtb3J5IG1vZHVsZXMgbmVlZCB0byBiZSBwcmVzZW50IGluIENTMCBESU1NIHNsb3RzIG9mIGJvdGggRERSIGNvbnRyb2xsZXJzIVxuIik7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiBNZW1vcnkgaXMgbm90IHByZXNlbnQgaW4gRElNTTEgYW5kIERJTU0yIC0gc28gZG8gbm90IGVuYWJsZSBERFJuCisJICovCisJaWYgKG5vX2RpbW0xICAmJiBub19kaW1tMikgeworCQlwcmludGYoIk5vIG1lbW9yeSBtb2R1bGVzIGZvdW5kIGZvciBERFIgY29udHJvbGxlciAlZCEhXG4iLCBkZHJfbnVtKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJbWVtX3R5cGUgPSBub19kaW1tMiA/IHNwZDEubWVtX3R5cGUgOiBzcGQyLm1lbV90eXBlOworCisJCS8qCisJCSAqIEZpZ3VyZSBvdXQgdGhlIHNldHRpbmdzIGZvciB0aGUgc2RyYW1fY2ZnIHJlZ2lzdGVyLgorCQkgKiBCdWlsZCB1cCB0aGUgZW50aXJlIHJlZ2lzdGVyIGluICdzZHJhbV9jZmcnIGJlZm9yZQorCQkgKiB3cml0aW5nIHNpbmNlIHRoZSB3cml0ZSBpbnRvIHRoZSByZWdpc3RlciB3aWxsCisJCSAqIGFjdHVhbGx5IGVuYWJsZSB0aGUgbWVtb3J5IGNvbnRyb2xsZXI7IGFsbCBzZXR0aW5ncworCQkgKiBtdXN0IGJlIGRvbmUgYmVmb3JlIGVuYWJsaW5nLgorCQkgKgorCQkgKiBzZHJhbV9jZmdbMF0gICA9IDEgKGRkciBzZHJhbSBsb2dpYyBlbmFibGUpCisJCSAqIHNkcmFtX2NmZ1sxXSAgID0gMSAoc2VsZi1yZWZyZXNoLWVuYWJsZSkKKwkJICogc2RyYW1fY2ZnWzU6N10gPSAoU0RSQU0gdHlwZSA9IEREUiBTRFJBTSkKKwkJICoJCQkwMTAgRERSIDEgU0RSQU0KKwkJICoJCQkwMTEgRERSIDIgU0RSQU0KKwkJICovCisJCXNkcmFtX3R5cGUgPSAobWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSKSA/IDIgOiAzOworCQlzZHJhbV9jZmdfMSA9ICgwCisJCQkgICAgICAgfCAoMSA8PCAzMSkJCS8qIEVuYWJsZSAqLworCQkJICAgICAgIHwgKDEgPDwgMzApCQkvKiBTZWxmIHJlZnJlc2ggKi8KKwkJCSAgICAgICB8IChzZHJhbV90eXBlIDw8IDI0KQkvKiBTRFJBTSB0eXBlICovCisJCQkgICAgICAgKTsKKworCQkvKgorCQkgKiBzZHJhbV9jZmdbM10gPSBSRF9FTiAtIHJlZ2lzdGVyZWQgRElNTSBlbmFibGUKKwkJICogICBBIHZhbHVlIG9mIDB4MjYgaW5kaWNhdGVzIG1pY3JvbiByZWdpc3RlcmVkCisJCSAqICAgRElNTVMgKG1pY3Jvbi5jb20pCisJCSAqLworCQltb2RfYXR0ciA9IG5vX2RpbW0yID8gc3BkMS5tb2RfYXR0ciA6IHNwZDIubW9kX2F0dHI7CisJCWlmIChtZW1fdHlwZSA9PSBTUERfTUVNVFlQRV9ERFIgJiYgbW9kX2F0dHIgPT0gMHgyNikgeworCQkJc2RyYW1fY2ZnXzEgfD0gMHgxMDAwMDAwMDsJCS8qIFJEX0VOICovCisJCX0KKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCisKKwkJY29uZmlnID0gbm9fZGltbTIgPyBzcGQxLmNvbmZpZyA6IHNwZDIuY29uZmlnOworCisJCS8qCisJCSAqIElmIHRoZSB1c2VyIHdhbnRlZCBFQ0MgKGVuYWJsZWQgdmlhIHNkcmFtX2NmZ1syXSkKKwkJICovCisJCWlmIChjb25maWcgPT0gMHgwMikgeworCQkJZGRyLT5lcnJfZGlzYWJsZSA9IDB4MDAwMDAwMDA7CisJCQlhc20gdm9sYXRpbGUoInN5bmM7aXN5bmM7Iik7CisJCQlkZHItPmVycl9zYmUgPSAweDAwZmYwMDAwOworCQkJZGRyLT5lcnJfaW50X2VuID0gMHgwMDAwMDAwZDsKKwkJCXNkcmFtX2NmZ18xIHw9IDB4MjAwMDAwMDA7CQkvKiBFQ0NfRU4gKi8KKwkJfQorI2VuZGlmCisKKwkJLyoKKwkJICogU2V0IDFUIG9yIDJUIHRpbWluZyBiYXNlZCBvbiAxIG9yIDIgbW9kdWxlcworCQkgKi8KKwkJeworCQkJaWYgKCEobm9fZGltbTEgfHwgbm9fZGltbTIpKSB7CisJCQkJLyoKKwkJCQkgKiAyVCB0aW1pbmcsYmVjYXVzZSBib3RoIERJTU1TIGFyZSBwcmVzZW50LgorCQkJCSAqIEVuYWJsZSAyVCB0aW1pbmcgYnkgc2V0dGluZyBzZHJhbV9jZmdbMTZdLgorCQkJCSAqLworCQkJCXNkcmFtX2NmZ18xIHw9IDB4ODAwMDsJCS8qIDJUX0VOICovCisJCQl9CisJCX0KKworCQkvKgorCQkgKiAyMDAgcGFpbmZ1bCBtaWNyby1zZWNvbmRzIG11c3QgZWxhcHNlIGJldHdlZW4KKwkJICogdGhlIEREUiBjbG9jayBzZXR1cCBhbmQgdGhlIEREUiBjb25maWcgZW5hYmxlLgorCQkgKi8KKwkJdWRlbGF5KDIwMCk7CisKKwkJLyoKKwkJICogR28hCisJCSAqLworCQlkZHItPnNkcmFtX2NmZ18xID0gc2RyYW1fY2ZnXzE7CisKKwkJYXNtIHZvbGF0aWxlKCJzeW5jO2lzeW5jIik7CisJCXVkZWxheSg1MDApOworCisJCWRlYnVnKCJERFI6IHNkcmFtX2NmZyAgID0gMHglMDh4XG4iLCBkZHItPnNkcmFtX2NmZ18xKTsKKworCisjaWYgZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCisJCWRfaW5pdCA9IDE7CisJCWRlYnVnKCJERFI6IG1lbW9yeSBpbml0aWFsaXppbmdcbiIpOworCisJCS8qCisJCSAqIFBvbGwgdW50aWwgbWVtb3J5IGlzIGluaXRpYWxpemVkLgorCQkgKiA1MTIgTWVnIGF0IDQwMCBtaWdodCBoaXQgdGhpcyAyMDAgdGltZXMgb3Igc28uCisJCSAqLworCQl3aGlsZSAoKGRkci0+c2RyYW1fY2ZnXzIgJiAoZF9pbml0IDw8IDQpKSAhPSAwKSB7CisJCQl1ZGVsYXkoMTAwMCk7CisJCX0KKwkJZGVidWcoIkREUjogbWVtb3J5IGluaXRpYWxpemVkXG5cbiIpOworI2VuZGlmCisKKwkJZGVidWcoIkVuYWJsZWQgRERSIENvbnRyb2xsZXIgJWRcbiIsIGRkcl9udW0pOworCQlyZXR1cm4gMTsKKwl9Cit9CisKKworbG9uZyBpbnQKK3NwZF9zZHJhbSh2b2lkKQoreworCWludCBtZW1zaXplX2RkcjFfZGltbTEgPSAwOworCWludCBtZW1zaXplX2RkcjFfZGltbTIgPSAwOworCWludCBtZW1zaXplX2RkcjJfZGltbTEgPSAwOworCWludCBtZW1zaXplX2RkcjJfZGltbTIgPSAwOworCWludCBtZW1zaXplX3RvdGFsID0gMDsKKwlpbnQgbWVtc2l6ZV9kZHIxID0gMDsKKwlpbnQgbWVtc2l6ZV9kZHIyID0gMDsKKwl1bnNpZ25lZCBpbnQgZGRyMV9lbmFibGVkID0gMDsKKwl1bnNpZ25lZCBpbnQgZGRyMl9lbmFibGVkID0gMDsKKwl1bnNpZ25lZCBpbnQgbGF3X3NpemVfZGRyMTsKKwl1bnNpZ25lZCBpbnQgbGF3X3NpemVfZGRyMjsKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyMSA9ICZpbW1hcC0+aW1fZGRyMTsKKwl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHIyID0gJmltbWFwLT5pbV9kZHIyOworCXZvbGF0aWxlIGNjc3JfbG9jYWxfbWNtX3QgKm1jbSA9ICZpbW1hcC0+aW1fbG9jYWxfbWNtOworCisjaWZkZWYgQ09ORklHX0REUl9JTlRFUkxFQVZFCisJdW5zaWduZWQgaW50IGxhd19zaXplX2ludGVybGVhdmVkOworCisJbWVtc2l6ZV9kZHIxX2RpbW0xID0gc3BkX2luaXQoU1BEX0VFUFJPTV9BRERSRVNTMSwKKwkJCQkgICAgICAxLCAxLAorCQkJCSAgICAgICh1bnNpZ25lZCBpbnQpbWVtc2l6ZV90b3RhbCAqIDEwMjQqMTAyNCk7CisJbWVtc2l6ZV90b3RhbCArPSBtZW1zaXplX2RkcjFfZGltbTE7CisKKwltZW1zaXplX2RkcjJfZGltbTEgPSBzcGRfaW5pdChTUERfRUVQUk9NX0FERFJFU1MzLAorCQkJCSAgICAgIDIsIDEsCisJCQkJICAgICAgKHVuc2lnbmVkIGludCltZW1zaXplX3RvdGFsICogMTAyNCoxMDI0KTsKKwltZW1zaXplX3RvdGFsICs9IG1lbXNpemVfZGRyMl9kaW1tMTsKKworCWlmIChtZW1zaXplX2RkcjFfZGltbTEgIT0gbWVtc2l6ZV9kZHIyX2RpbW0xKSB7CisJCWlmIChtZW1zaXplX2RkcjFfZGltbTEgPCAgbWVtc2l6ZV9kZHIyX2RpbW0xKQorCQkJbWVtc2l6ZV90b3RhbCAtPSBtZW1zaXplX2RkcjFfZGltbTE7CisJCWVsc2UKKwkJCW1lbXNpemVfdG90YWwgLT0gbWVtc2l6ZV9kZHIyX2RpbW0xOworCQlkZWJ1ZygiVG90YWwgbWVtb3J5IGF2YWlsYWJsZSBmb3IgaW50ZXJsZWF2aW5nIDB4JTA4bHhcbiIsCisJCSAgICAgIG1lbXNpemVfdG90YWwgKiAxMDI0ICogMTAyNCk7CisJCWRlYnVnKCJBZGp1c3RpbmcgQ1MwX0JORFMgdG8gYWNjb3VudCBmb3IgdW5lcXVhbCBESU1NIHNpemVzIGluIGludGVybGVhdmVkIG1lbW9yeVxuIik7CisJCWRkcjEtPmNzMF9ibmRzID0gKChtZW1zaXplX3RvdGFsICogMTAyNCAqIDEwMjQpIC0gMSkgPj4gMjQ7CisJCWRkcjItPmNzMF9ibmRzID0gKChtZW1zaXplX3RvdGFsICogMTAyNCAqIDEwMjQpIC0gMSkgPj4gMjQ7CisJCWRlYnVnKCJERFIxOiBjczBfYm5kcyAgID0gMHglMDh4XG4iLCBkZHIxLT5jczBfYm5kcyk7CisJCWRlYnVnKCJERFIyOiBjczBfYm5kcyAgID0gMHglMDh4XG4iLCBkZHIyLT5jczBfYm5kcyk7CisJfQorCisJZGRyMV9lbmFibGVkID0gZW5hYmxlX2RkcigxKTsKKwlkZHIyX2VuYWJsZWQgPSBlbmFibGVfZGRyKDIpOworCisJLyoKKwkgKiBCb3RoIGNvbnRyb2xsZXJzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaW50ZXJsZWF2aW5nLgorCSAqLworCWlmIChkZHIxX2VuYWJsZWQgJiYgZGRyMl9lbmFibGVkKSB7CisJCWxhd19zaXplX2ludGVybGVhdmVkID0gMTkgKyBfX2lsb2cyKG1lbXNpemVfdG90YWwpOworCisJCS8qCisJCSAqIFNldCB1cCBMQVdCQVIgZm9yIEREUiAxIHNwYWNlLgorCQkgKi8KKwkJbWNtLT5sYXdiYXIxID0gKChDRkdfRERSX1NEUkFNX0JBU0UgPj4gMTIpICYgMHhmZmZmZik7CisJCW1jbS0+bGF3YXIxID0gKExBV0FSX0VOCisJCQkgICAgICAgfCBMQVdBUl9UUkdUX0lGX0REUl9JTlRFUkxFQVZFRAorCQkJICAgICAgIHwgKExBV0FSX1NJWkUgJiBsYXdfc2l6ZV9pbnRlcmxlYXZlZCkpOworCQlkZWJ1ZygiRERSOiBMQVdCQVIxPTB4JTA4eFxuIiwgbWNtLT5sYXdiYXIxKTsKKwkJZGVidWcoIkREUjogTEFXQVIxPTB4JTA4eFxuIiwgbWNtLT5sYXdhcjEpOworCQlkZWJ1ZygiSW50ZXJsZWF2ZWQgbWVtb3J5IHNpemUgaXMgMHglMDhseFxuIiwgbWVtc2l6ZV90b3RhbCk7CisKKyNpZmRlZglDT05GSUdfRERSX0lOVEVSTEVBVkUKKyNpZiAoQ0ZHX1BBR0VfSU5URVJMRUFWSU5HID09IDEpCisJCXByaW50ZigiUGFnZSAiKTsKKyNlbGlmIChDRkdfQkFOS19JTlRFUkxFQVZJTkcgPT0gMSkKKwkJcHJpbnRmKCJCYW5rICIpOworI2VsaWYgKENGR19TVVBFUl9CQU5LX0lOVEVSTEVBVklORyA9PSAxKQorCQlwcmludGYoIlN1cGVyLWJhbmsgIik7CisjZWxzZQorCQlwcmludGYoIkNhY2hlLWxpbmUgIik7CisjZW5kaWYKKyNlbmRpZgorCQlwcmludGYoIkludGVybGVhdmVkIik7CisJCXJldHVybiBtZW1zaXplX3RvdGFsICogMTAyNCAqIDEwMjQ7CisJfSAgZWxzZSB7CisJCXByaW50ZigiSW50ZXJsZWF2ZWQgbWVtb3J5IG5vdCBlbmFibGVkIC0gY2hlY2sgQ1MwIERJTU0gc2xvdHMgZm9yIGJvdGggY29udHJvbGxlcnMuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisjZWxzZQorCS8qCisJICogQ2FsbCBzcGRfc2RyYW0oKSByb3V0aW5lIHRvIGluaXQgZGRyMSAtIHBhc3MgSTJjIGFkZHJlc3MsCisJICogY29udHJvbGxlciBudW1iZXIsIGRpbW0gbnVtYmVyLCBhbmQgc3RhcnRpbmcgYWRkcmVzcy4KKwkgKi8KKwltZW1zaXplX2RkcjFfZGltbTEgPSBzcGRfaW5pdChTUERfRUVQUk9NX0FERFJFU1MxLAorCQkJCSAgICAgIDEsIDEsCisJCQkJICAgICAgKHVuc2lnbmVkIGludCltZW1zaXplX3RvdGFsICogMTAyNCoxMDI0KTsKKwltZW1zaXplX3RvdGFsICs9IG1lbXNpemVfZGRyMV9kaW1tMTsKKworCW1lbXNpemVfZGRyMV9kaW1tMiA9IHNwZF9pbml0KFNQRF9FRVBST01fQUREUkVTUzIsCisJCQkJICAgICAgMSwgMiwKKwkJCQkgICAgICAodW5zaWduZWQgaW50KW1lbXNpemVfdG90YWwgKiAxMDI0KjEwMjQpOworCW1lbXNpemVfdG90YWwgKz0gbWVtc2l6ZV9kZHIxX2RpbW0yOworCisJLyoKKwkgKiBFbmFibGUgdGhlIEREUiBjb250cm9sbGVyIC0gcGFzcyBkZHIgY29udHJvbGxlciBudW1iZXIuCisJICovCisJZGRyMV9lbmFibGVkID0gZW5hYmxlX2RkcigxKTsKKworCS8qIEtlZXAgdHJhY2sgb2YgbWVtb3J5IHRvIGJlIGFkZHJlc3NlZCBieSBERFIxICovCisJbWVtc2l6ZV9kZHIxID0gbWVtc2l6ZV9kZHIxX2RpbW0xICsgbWVtc2l6ZV9kZHIxX2RpbW0yOworCisJLyoKKwkgKiBGaXJzdCBzdXBwb3J0ZWQgTEFXIHNpemUgaXMgMTZNLCBhdCBMQVdBUl9TSVpFXzE2TSA9PSAyMy4gIEZub3JkLgorCSAqLworCWlmIChkZHIxX2VuYWJsZWQpIHsKKwkJbGF3X3NpemVfZGRyMSA9IDE5ICsgX19pbG9nMihtZW1zaXplX2RkcjEpOworCisJCS8qCisJCSAqIFNldCB1cCBMQVdCQVIgZm9yIEREUiAxIHNwYWNlLgorCQkgKi8KKwkJbWNtLT5sYXdiYXIxID0gKChDRkdfRERSX1NEUkFNX0JBU0UgPj4gMTIpICYgMHhmZmZmZik7CisJCW1jbS0+bGF3YXIxID0gKExBV0FSX0VOCisJCQkgICAgICAgfCBMQVdBUl9UUkdUX0lGX0REUjEKKwkJCSAgICAgICB8IChMQVdBUl9TSVpFICYgbGF3X3NpemVfZGRyMSkpOworCQlkZWJ1ZygiRERSOiBMQVdCQVIxPTB4JTA4eFxuIiwgbWNtLT5sYXdiYXIxKTsKKwkJZGVidWcoIkREUjogTEFXQVIxPTB4JTA4eFxuIiwgbWNtLT5sYXdhcjEpOworCX0KKworI2lmICAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPiAxKQorCW1lbXNpemVfZGRyMl9kaW1tMSA9IHNwZF9pbml0KFNQRF9FRVBST01fQUREUkVTUzMsCisJCQkJICAgICAgMiwgMSwKKwkJCQkgICAgICAodW5zaWduZWQgaW50KW1lbXNpemVfdG90YWwgKiAxMDI0KjEwMjQpOworCW1lbXNpemVfdG90YWwgKz0gbWVtc2l6ZV9kZHIyX2RpbW0xOworCisJbWVtc2l6ZV9kZHIyX2RpbW0yID0gc3BkX2luaXQoU1BEX0VFUFJPTV9BRERSRVNTNCwKKwkJCQkgICAgICAyLCAyLAorCQkJCSAgICAgICh1bnNpZ25lZCBpbnQpbWVtc2l6ZV90b3RhbCAqIDEwMjQqMTAyNCk7CisJbWVtc2l6ZV90b3RhbCArPSBtZW1zaXplX2RkcjJfZGltbTI7CisKKwlkZHIyX2VuYWJsZWQgPSBlbmFibGVfZGRyKDIpOworCisJLyogS2VlcCB0cmFjayBvZiBtZW1vcnkgdG8gYmUgYWRkcmVzc2VkIGJ5IEREUjIgKi8KKwltZW1zaXplX2RkcjIgPSBtZW1zaXplX2RkcjJfZGltbTEgKyBtZW1zaXplX2RkcjJfZGltbTI7CisKKwlpZiAoZGRyMl9lbmFibGVkKSB7CisJCWxhd19zaXplX2RkcjIgPSAxOSArIF9faWxvZzIobWVtc2l6ZV9kZHIyKTsKKworCQkvKgorCQkgKiBTZXQgdXAgTEFXQkFSIGZvciBERFIgMiBzcGFjZS4KKwkJICovCisJCWlmIChkZHIxX2VuYWJsZWQpCisJCQltY20tPmxhd2JhcjggPSAoKChtZW1zaXplX2RkcjEgKiAxMDI0ICogMTAyNCkgPj4gMTIpCisJCQkJCSYgMHhmZmZmZik7CisJCWVsc2UKKwkJCW1jbS0+bGF3YmFyOCA9ICgoQ0ZHX0REUl9TRFJBTV9CQVNFID4+IDEyKSAmIDB4ZmZmZmYpOworCisJCW1jbS0+bGF3YXI4ID0gKExBV0FSX0VOCisJCQkgICAgICAgfCBMQVdBUl9UUkdUX0lGX0REUjIKKwkJCSAgICAgICB8IChMQVdBUl9TSVpFICYgbGF3X3NpemVfZGRyMikpOworCQlkZWJ1ZygiXG5ERFI6IExBV0JBUjg9MHglMDh4XG4iLCBtY20tPmxhd2JhcjgpOworCQlkZWJ1ZygiRERSOiBMQVdBUjg9MHglMDh4XG4iLCBtY20tPmxhd2FyOCk7CisJfQorI2VuZGlmIC8qIENPTkZJR19OVU1fRERSX0NPTlRST0xMRVJTID4gMSAqLworCisJZGVidWcoIlxuTWVtb3J5IHNpemVzIGFyZSBERFIxID0gMHglMDhseCwgRERSMiA9IDB4JTA4bHhcbiIsCisJICAgICAgbWVtc2l6ZV9kZHIxLCBtZW1zaXplX2RkcjIpOworCisJLyoKKwkgKiBJZiBuZWl0aGVyIEREUiBjb250cm9sbGVyIGlzIGVuYWJsZWQgcmV0dXJuIDAuCisJICovCisJaWYgKCFkZHIxX2VuYWJsZWQgJiYgIWRkcjJfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisJZWxzZSB7CisJCXByaW50ZigiTm9uLWludGVybGVhdmVkIik7CisJCXJldHVybiBtZW1zaXplX3RvdGFsICogMTAyNCAqIDEwMjQ7CisJfQorCisjZW5kaWYgLyogQ09ORklHX0REUl9JTlRFUkxFQVZFICovCit9CisKKworI2VuZGlmIC8qIENPTkZJR19TUERfRUVQUk9NICovCisKKworI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKKworLyoKKyAqIEluaXRpYWxpemUgYWxsIG9mIG1lbW9yeSBmb3IgRUNDLCB0aGVuIGVuYWJsZSBlcnJvcnMuCisgKi8KKwordm9pZAorZGRyX2VuYWJsZV9lY2ModW5zaWduZWQgaW50IGRyYW1fc2l6ZSkKK3sKKwl1aW50ICpwID0gMDsKKwl1aW50IGkgPSAwOworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHIxPSAmaW1tYXAtPmltX2RkcjE7CisKKwlkbWFfaW5pdCgpOworCisJZm9yICgqcCA9IDA7IHAgPCAodWludCAqKSg4ICogMTAyNCk7IHArKykgeworCQlpZiAoKCh1bnNpZ25lZCBpbnQpcCAmIDB4MWYpID09IDApIHsKKwkJCXBwY0RjYnooKHVuc2lnbmVkIGxvbmcpIHApOworCQl9CisJCSpwID0gKHVuc2lnbmVkIGludClDT05GSUdfTUVNX0lOSVRfVkFMVUU7CisJCWlmICgoKHVuc2lnbmVkIGludClwICYgMHgxYykgPT0gMHgxYykgeworCQkJcHBjRGNiZigodW5zaWduZWQgbG9uZykgcCk7CisJCX0KKwl9CisKKwkvKiA4SyAqLworCWRtYV94ZmVyKCh1aW50ICopMHgyMDAwLCAweDIwMDAsICh1aW50ICopMCk7CisJLyogMTZLICovCisJZG1hX3hmZXIoKHVpbnQgKikweDQwMDAsIDB4NDAwMCwgKHVpbnQgKikwKTsKKwkvKiAzMksgKi8KKwlkbWFfeGZlcigodWludCAqKTB4ODAwMCwgMHg4MDAwLCAodWludCAqKTApOworCS8qIDY0SyAqLworCWRtYV94ZmVyKCh1aW50ICopMHgxMDAwMCwgMHgxMDAwMCwgKHVpbnQgKikwKTsKKwkvKiAxMjhrICovCisJZG1hX3hmZXIoKHVpbnQgKikweDIwMDAwLCAweDIwMDAwLCAodWludCAqKTApOworCS8qIDI1NmsgKi8KKwlkbWFfeGZlcigodWludCAqKTB4NDAwMDAsIDB4NDAwMDAsICh1aW50ICopMCk7CisJLyogNTEyayAqLworCWRtYV94ZmVyKCh1aW50ICopMHg4MDAwMCwgMHg4MDAwMCwgKHVpbnQgKikwKTsKKwkvKiAxTSAqLworCWRtYV94ZmVyKCh1aW50ICopMHgxMDAwMDAsIDB4MTAwMDAwLCAodWludCAqKTApOworCS8qIDJNICovCisJZG1hX3hmZXIoKHVpbnQgKikweDIwMDAwMCwgMHgyMDAwMDAsICh1aW50ICopMCk7CisJLyogNE0gKi8KKwlkbWFfeGZlcigodWludCAqKTB4NDAwMDAwLCAweDQwMDAwMCwgKHVpbnQgKikwKTsKKworCWZvciAoaSA9IDE7IGkgPCBkcmFtX3NpemUgLyAweDgwMDAwMDsgaSsrKSB7CisJCWRtYV94ZmVyKCh1aW50ICopKDB4ODAwMDAwKmkpLCAweDgwMDAwMCwgKHVpbnQgKikwKTsKKwl9CisKKwkvKgorCSAqIEVuYWJsZSBlcnJvcnMgZm9yIEVDQy4KKwkgKi8KKwlkZWJ1ZygiRE1BIEREUjogZXJyX2Rpc2FibGUgPSAweCUwOHhcbiIsIGRkcjEtPmVycl9kaXNhYmxlKTsKKwlkZHIxLT5lcnJfZGlzYWJsZSA9IDB4MDAwMDAwMDA7CisJYXNtIHZvbGF0aWxlKCJzeW5jO2lzeW5jIik7CisJZGVidWcoIkRNQSBERFI6IGVycl9kaXNhYmxlID0gMHglMDh4XG4iLCBkZHIxLT5lcnJfZGlzYWJsZSk7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfRERSX0VDQyAgJiYgISBDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIgKi8KZGlmZiAtLWdpdCBhL2NwdS9tcGM4Nnh4L3NwZWVkLmMgYi9jcHUvbXBjODZ4eC9zcGVlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmNhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbXBjODZ4eC9zcGVlZC5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBKZWZmIEJyb3duCisgKiBTcmlrYW50aCBTcmluaXZhc2FuIChzcmlrYW50aC5zcmluaXZhc2FuQGZyZWVzY2FsZS5jb20pCisgKgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzg2eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKwordm9pZCBnZXRfc3lzX2luZm8oc3lzX2luZm9fdCAqc3lzSW5mbykKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOworCXVpbnQgcGxhdF9yYXRpbywgZTYwMF9yYXRpbzsKKworCXBsYXRfcmF0aW8gPSAoZ3VyLT5wb3JwbGxzcikgJiAweDAwMDAwMDNlOworCXBsYXRfcmF0aW8gPj49IDE7CisKKwlzd2l0Y2ggKHBsYXRfcmF0aW8pIHsKKwljYXNlIDB4MDoKKwkJc3lzSW5mby0+ZnJlcVN5c3RlbUJ1cyA9IDE2ICogQ09ORklHX1NZU19DTEtfRlJFUTsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCWNhc2UgMHgwMzoKKwljYXNlIDB4MDQ6CisJY2FzZSAweDA1OgorCWNhc2UgMHgwNjoKKwljYXNlIDB4MDg6CisJY2FzZSAweDA5OgorCWNhc2UgMHgwYToKKwljYXNlIDB4MGM6CisJY2FzZSAweDEwOgorCQlzeXNJbmZvLT5mcmVxU3lzdGVtQnVzID0gcGxhdF9yYXRpbyAqIENPTkZJR19TWVNfQ0xLX0ZSRVE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN5c0luZm8tPmZyZXFTeXN0ZW1CdXMgPSAwOworCQlicmVhazsKKwl9CisKKwllNjAwX3JhdGlvID0gKGd1ci0+cG9ycGxsc3IpICYgMHgwMDNmMDAwMDsKKwllNjAwX3JhdGlvID4+PSAxNjsKKworCXN3aXRjaCAoZTYwMF9yYXRpbykgeworCWNhc2UgMHgxMDoKKwkJc3lzSW5mby0+ZnJlcVByb2Nlc3NvciA9IDIgKiBzeXNJbmZvLT5mcmVxU3lzdGVtQnVzOworCQlicmVhazsKKwljYXNlIDB4MTk6CisJCXN5c0luZm8tPmZyZXFQcm9jZXNzb3IgPSA1ICogc3lzSW5mby0+ZnJlcVN5c3RlbUJ1cyAvIDI7CisJCWJyZWFrOworCWNhc2UgMHgyMDoKKwkJc3lzSW5mby0+ZnJlcVByb2Nlc3NvciA9IDMgKiBzeXNJbmZvLT5mcmVxU3lzdGVtQnVzOworCQlicmVhazsKKwljYXNlIDB4Mzk6CisJCXN5c0luZm8tPmZyZXFQcm9jZXNzb3IgPSA3ICogc3lzSW5mby0+ZnJlcVN5c3RlbUJ1cyAvIDI7CisJCWJyZWFrOworCWNhc2UgMHgyODoKKwkJc3lzSW5mby0+ZnJlcVByb2Nlc3NvciA9IDQgKiBzeXNJbmZvLT5mcmVxU3lzdGVtQnVzOworCQlicmVhazsKKwljYXNlIDB4MWQ6CisJCXN5c0luZm8tPmZyZXFQcm9jZXNzb3IgPSA5ICogc3lzSW5mby0+ZnJlcVN5c3RlbUJ1cyAvIDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN5c0luZm8tPmZyZXFQcm9jZXNzb3IgPSBlNjAwX3JhdGlvICsgc3lzSW5mby0+ZnJlcVN5c3RlbUJ1czsKKwkJYnJlYWs7CisJfQorfQorCisKKy8qCisgKiBNZWFzdXJlIENQVSBjbG9jayBzcGVlZCAoY29yZSBjbG9jayBHQ0xLMSwgR0NMSzIpCisgKiAoQXBwcm94LiBHQ0xLIGZyZXF1ZW5jeSBpbiBIeikKKyAqLworCitpbnQgZ2V0X2Nsb2Nrcyh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCXN5c19pbmZvX3Qgc3lzX2luZm87CisKKwlnZXRfc3lzX2luZm8oJnN5c19pbmZvKTsKKwlnZC0+Y3B1X2NsayA9IHN5c19pbmZvLmZyZXFQcm9jZXNzb3I7CisJZ2QtPmJ1c19jbGsgPSBzeXNfaW5mby5mcmVxU3lzdGVtQnVzOworCisJaWYgKGdkLT5jcHVfY2xrICE9IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKKworLyoKKyAqIGdldF9idXNfZnJlcQorICoJUmV0dXJuIHN5c3RlbSBidXMgZnJlcSBpbiBIegorICovCisKK3Vsb25nIGdldF9idXNfZnJlcSh1bG9uZyBkdW1teSkKK3sKKwl1bG9uZyB2YWw7CisJc3lzX2luZm9fdCBzeXNfaW5mbzsKKworCWdldF9zeXNfaW5mbygmc3lzX2luZm8pOworCXZhbCA9IHN5c19pbmZvLmZyZXFTeXN0ZW1CdXM7CisKKwlyZXR1cm4gdmFsOworfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvc3RhcnQuUyBiL2NwdS9tcGM4Nnh4L3N0YXJ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzN2RjYgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4Nnh4L3N0YXJ0LlMKQEAgLTAsMCArMSwxMjI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBTcmlrYW50aCBTcmluaXZhc2FuIDxzcmlrYW50aC5zcmluaXZhYW5AZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKiAgVS1Cb290IC0gU3RhcnR1cCBDb2RlIGZvciA4Nnh4IFBvd2VyUEMgYmFzZWQgRW1iZWRkZWQgQm9hcmRzCisgKgorICoKKyAqICBUaGUgcHJvY2Vzc29yIHN0YXJ0cyBhdCAweGZmZjAwMTAwIGFuZCB0aGUgY29kZSBpcyBleGVjdXRlZAorICogIGZyb20gZmxhc2guIFRoZSBjb2RlIGlzIG9yZ2FuaXplZCB0byBiZSBhdCBhbiBvdGhlciBhZGRyZXNzCisgKiAgaW4gbWVtb3J5LCBidXQgYXMgbG9uZyB3ZSBkb24ndCBqdW1wIGFyb3VuZCBiZWZvcmUgcmVsb2NhdGluZy4KKyAqICBib2FyZF9pbml0IGxpZXMgYXQgYSBxdWl0ZSBoaWdoIGFkZHJlc3MgYW5kIHdoZW4gdGhlIGNwdSBoYXMKKyAqICBqdW1wZWQgdGhlcmUsIGV2ZXJ5dGhpbmcgaXMgb2suCisgKi8KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxtcGM4Nnh4Lmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorCisjaW5jbHVkZSA8cHBjX2FzbS50bXBsPgorI2luY2x1ZGUgPHBwY19kZWZzLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisKKyNpZm5kZWYgIENPTkZJR19JREVOVF9TVFJJTkcKKyNkZWZpbmUgIENPTkZJR19JREVOVF9TVFJJTkcgIiIKKyNlbmRpZgorCisvKiBXZSBkb24ndCB3YW50IHRoZSAgTU1VIHlldC4KKyovCisjdW5kZWYJTVNSX0tFUk5FTAorLyogTWFjaGluZSBDaGVjayBhbmQgUmVjb3ZlcmFibGUgSW50ZXJyLiAqLworI2RlZmluZSBNU1JfS0VSTkVMICggTVNSX01FIHwgTVNSX1JJICkKKworLyoKKyAqIFNldCB1cCBHT1Q6IEdsb2JhbCBPZmZzZXQgVGFibGUKKyAqCisgKiBVc2UgcjE0IHRvIGFjY2VzcyB0aGUgR09UCisgKi8KKwlTVEFSVF9HT1QKKwlHT1RfRU5UUlkoX0dPVDJfVEFCTEVfKQorCUdPVF9FTlRSWShfRklYVVBfVEFCTEVfKQorCisJR09UX0VOVFJZKF9zdGFydCkKKwlHT1RfRU5UUlkoX3N0YXJ0X29mX3ZlY3RvcnMpCisJR09UX0VOVFJZKF9lbmRfb2ZfdmVjdG9ycykKKwlHT1RfRU5UUlkodHJhbnNmZXJfdG9faGFuZGxlcikKKworCUdPVF9FTlRSWShfX2luaXRfZW5kKQorCUdPVF9FTlRSWShfZW5kKQorCUdPVF9FTlRSWShfX2Jzc19zdGFydCkKKwlFTkRfR09UCisKKy8qCisgKiByMyAtIDFzdCBhcmcgdG8gYm9hcmRfaW5pdCgpOiBJTU1QIHBvaW50ZXIKKyAqIHI0IC0gMm5kIGFyZyB0byBib2FyZF9pbml0KCk6IGJvb3QgZmxhZworICovCisJLnRleHQKKwkubG9uZwkweDI3MDUxOTU2CQkvKiBVLUJvb3QgTWFnaWMgTnVtYmVyICovCisJLmdsb2JsCXZlcnNpb25fc3RyaW5nCit2ZXJzaW9uX3N0cmluZzoKKwkuYXNjaWkJVV9CT09UX1ZFUlNJT04KKwkuYXNjaWkJIiAoIiwgX19EQVRFX18sICIgLSAiLCBfX1RJTUVfXywgIikiCisJLmFzY2lpCUNPTkZJR19JREVOVF9TVFJJTkcsICJcMCIKKworCS4gPSBFWENfT0ZGX1NZU19SRVNFVAorCS5nbG9ibAlfc3RhcnQKK19zdGFydDoKKwlsaQlyMjEsIEJPT1RGTEFHX0NPTEQJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggKi8KKwliCWJvb3RfY29sZAorCXN5bmMKKworCS4gPSBFWENfT0ZGX1NZU19SRVNFVCArIDB4MTAKKworCS5nbG9ibAlfc3RhcnRfd2FybQorX3N0YXJ0X3dhcm06CisJbGkJcjIxLCBCT09URkxBR19XQVJNCS8qIFNvZnR3YXJlIHJlYm9vdCAqLworCWIJYm9vdF93YXJtCisJc3luYworCisJLyogdGhlIGJvb3QgY29kZSBpcyBsb2NhdGVkIGJlbG93IHRoZSBleGNlcHRpb24gdGFibGUgKi8KKworCS5nbG9ibAlfc3RhcnRfb2ZfdmVjdG9ycworX3N0YXJ0X29mX3ZlY3RvcnM6CisKKy8qIE1hY2hpbmUgY2hlY2sgKi8KKwlTVERfRVhDRVBUSU9OKDB4MjAwLCBNYWNoaW5lQ2hlY2ssIE1hY2hpbmVDaGVja0V4Y2VwdGlvbikKKworLyogRGF0YSBTdG9yYWdlIGV4Y2VwdGlvbi4gKi8KKwlTVERfRVhDRVBUSU9OKDB4MzAwLCBEYXRhU3RvcmFnZSwgVW5rbm93bkV4Y2VwdGlvbikKKworLyogSW5zdHJ1Y3Rpb24gU3RvcmFnZSBleGNlcHRpb24uICovCisJU1REX0VYQ0VQVElPTigweDQwMCwgSW5zdFN0b3JhZ2UsIFVua25vd25FeGNlcHRpb24pCisKKy8qIEV4dGVybmFsIEludGVycnVwdCBleGNlcHRpb24uICovCisJU1REX0VYQ0VQVElPTigweDUwMCwgRXh0SW50ZXJydXB0LCBleHRlcm5hbF9pbnRlcnJ1cHQpCisKKy8qIEFsaWdubWVudCBleGNlcHRpb24uICovCisJLiA9IDB4NjAwCitBbGlnbm1lbnQ6CisJRVhDRVBUSU9OX1BST0xPRworCW1mc3ByCXI0LERBUgorCXN0dwlyNCxfREFSKHIyMSkKKwltZnNwcglyNSxEU0lTUgorCXN0dwlyNSxfRFNJU1IocjIxKQorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlsaQlyMjAsTVNSX0tFUk5FTAorCXJsd2ltaQlyMjAscjIzLDAsMTYsMTYJCS8qIGNvcHkgRUUgYml0IGZyb20gc2F2ZWQgTVNSICovCisJbHd6CXI2LEdPVCh0cmFuc2Zlcl90b19oYW5kbGVyKQorCW10bHIJcjYKKwlibHJsCisuTF9BbGlnbm1lbnQ6CisJLmxvbmcJQWxpZ25tZW50RXhjZXB0aW9uIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKwkubG9uZwlpbnRfcmV0dXJuIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKworLyogUHJvZ3JhbSBjaGVjayBleGNlcHRpb24gKi8KKwkuID0gMHg3MDAKK1Byb2dyYW1DaGVjazoKKwlFWENFUFRJT05fUFJPTE9HCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWxpCXIyMCxNU1JfS0VSTkVMCisJcmx3aW1pCXIyMCxyMjMsMCwxNiwxNgkJLyogY29weSBFRSBiaXQgZnJvbSBzYXZlZCBNU1IgKi8KKwlsd3oJcjYsR09UKHRyYW5zZmVyX3RvX2hhbmRsZXIpCisJbXRscglyNgorCWJscmwKKy5MX1Byb2dyYW1DaGVjazoKKwkubG9uZwlQcm9ncmFtQ2hlY2tFeGNlcHRpb24gLSBfc3RhcnQgKyBFWENfT0ZGX1NZU19SRVNFVAorCS5sb25nCWludF9yZXR1cm4gLSBfc3RhcnQgKyBFWENfT0ZGX1NZU19SRVNFVAorCisJU1REX0VYQ0VQVElPTigweDgwMCwgRlBVbmF2YWlsYWJsZSwgVW5rbm93bkV4Y2VwdGlvbikKKworCS8qIEkgZ3Vlc3Mgd2UgY291bGQgaW1wbGVtZW50IGRlY3JlbWVudGVyLCBhbmQgbWF5IGhhdmUKKwkgKiB0byBzb21lZGF5IGZvciB0aW1la2VlcGluZy4KKwkgKi8KKwlTVERfRVhDRVBUSU9OKDB4OTAwLCBEZWNyZW1lbnRlciwgdGltZXJfaW50ZXJydXB0KQorCVNURF9FWENFUFRJT04oMHhhMDAsIFRyYXBfMGEsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweGIwMCwgVHJhcF8wYiwgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4YzAwLCBTeXN0ZW1DYWxsLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHhkMDAsIFNpbmdsZVN0ZXAsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweGUwMCwgVHJhcF8wZSwgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4ZjAwLCBUcmFwXzBmLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxMDAwLCBTb2Z0RW11LCBTb2Z0RW11RXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxMTAwLCBJbnN0cnVjdGlvblRMQk1pc3MsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweDEyMDAsIERhdGFUTEJNaXNzLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxMzAwLCBJbnN0cnVjdGlvblRMQkVycm9yLCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxNDAwLCBEYXRhVExCRXJyb3IsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweDE1MDAsIFJlc2VydmVkNSwgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4MTYwMCwgUmVzZXJ2ZWQ2LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxNzAwLCBSZXNlcnZlZDcsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweDE4MDAsIFJlc2VydmVkOCwgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4MTkwMCwgUmVzZXJ2ZWQ5LCBVbmtub3duRXhjZXB0aW9uKQorCVNURF9FWENFUFRJT04oMHgxYTAwLCBSZXNlcnZlZEEsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweDFiMDAsIFJlc2VydmVkQiwgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4MWMwMCwgRGF0YUJyZWFrcG9pbnQsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweDFkMDAsIEluc3RydWN0aW9uQnJlYWtwb2ludCwgVW5rbm93bkV4Y2VwdGlvbikKKwlTVERfRVhDRVBUSU9OKDB4MWUwMCwgUGVyaXBoZXJhbEJyZWFrcG9pbnQsIFVua25vd25FeGNlcHRpb24pCisJU1REX0VYQ0VQVElPTigweDFmMDAsIERldlBvcnRCcmVha3BvaW50LCBVbmtub3duRXhjZXB0aW9uKQorCisJLmdsb2JsCV9lbmRfb2ZfdmVjdG9ycworX2VuZF9vZl92ZWN0b3JzOgorCisJLiA9IDB4MjAwMAorCitib290X2NvbGQ6Citib290X3dhcm06CisKKwkvKiBpZiB0aGlzIGlzIGEgbXVsdGktY29yZSBzeXN0ZW0gd2UgbmVlZCB0byBjaGVjayB3aGljaCBjcHUKKwkgKiB0aGlzIGlzLCBpZiBpdCBpcyBub3QgY3B1IDAgc2VuZCB0aGUgY3B1IHRvIHRoZSBsaW51eCByZXNldAorCSAqIHZlY3RvciAqLworI2lmIChDT05GSUdfTlVNX0NQVVMgPiAxKQorCW1mc3ByCXIwLCBNU1NDUjAKKwlhbmRpLglyMCwgcjAsIDB4MDAyMAorICAgICAgICBybHdpbm0gIHIwLHIwLDI3LDMxLDMxCisgICAgICAgIG10c3ByCVBJUiwgcjAKKwliZXEJMWYKKworICAgICAgCWJsCXNlY29uZGFyeV9jcHVfc2V0dXAKKyNlbmRpZgorCisJLyogZGlzYWJsZSBldmVyeXRoaW5nICovCisxOglsaQlyMCwgMAorCW10c3ByCUhJRDAsIHIwCisJc3luYworCW10bXNyCTAKKwlibAlpbnZhbGlkYXRlX2JhdHMKKwlzeW5jCisKKyNpZmRlZiBDRkdfTDIKKwkvKiBpbml0IHRoZSBMMiBjYWNoZSAqLworCWFkZGlzCXIzLCByMCwgTDJfSU5JVEBoCisJb3JpCXIzLCByMywgTDJfSU5JVEBsCisJbXRzcHIJbDJjciwgcjMKKwkvKiBpbnZhbGlkYXRlIHRoZSBMMiBjYWNoZSAqLworCWJsCWwyY2FjaGVfaW52YWxpZGF0ZQorCXN5bmMKKyNlbmRpZgorCisJLyoKKwkgKiBDYWxjdWxhdGUgYWJzb2x1dGUgYWRkcmVzcyBpbiBGTEFTSCBhbmQganVtcCB0aGVyZQorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsaXMJcjMsIENGR19NT05JVE9SX0JBU0VAaAorCW9yaQlyMywgcjMsIENGR19NT05JVE9SX0JBU0VAbAorCWFkZGkJcjMsIHIzLCBpbl9mbGFzaCAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJbXRscglyMworCWJscgorCitpbl9mbGFzaDoKKwkvKiBsZXQgdGhlIEMtY29kZSBzZXQgdXAgdGhlIHJlc3QJCQkqLworCS8qCQkJCQkJCSovCisJLyogQmUgY2FyZWZ1bCB0byBrZWVwIGNvZGUgcmVsb2NhdGFibGUgIQkJKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyogcGVyZm9ybSBsb3ctbGV2ZWwgaW5pdCAqLworCisJLyogZW5hYmxlIGV4dGVuZGVkIGFkZHJlc3NpbmcgKi8KKwlibAllbmFibGVfZXh0X2FkZHIKKworCS8qIHNldHVwIHRoZSBiYXRzICovCisJYmwJc2V0dXBfYmF0cworCXN5bmMKKworI2lmIChDRkdfQ0NTUkJBUl9ERUZBVUxUICE9IENGR19DQ1NSQkFSKQorCS8qIHNldHVwIGNjc3JiYXIgKi8KKwlibAlzZXR1cF9jY3NyYmFyCisjZW5kaWYKKworCS8qIEZpeCBmb3IgU01QIGxpbnV4IC0gQ2hhbmdpbmcgYXJiaXRyYXRpb24gdG8gcm91bmQtcm9iaW4gKi8KKwlsaXMJcjMsIENGR19DQ1NSQkFSQGgKKwlvcmkJcjMsIHIzLCAweDEwMDAKKwl4b3IJcjQsIHI0LCByNAorCWxpCXI0LCAweDEwMDAKKwlzdHcJcjQsIDAocjMpCisKKwkvKiBzZXR1cCB0aGUgbGF3IGVudHJpZXMgKi8KKwlibCAJbGF3X2VudHJ5CisJc3luYworCisJLyogRG9uJ3QgdXNlIHRoaXMgZmVhdHVyZSBkdWUgdG8gYnVnIGluIDg2NDFEIFBENCAqLworCS8qIERpc2FibGUgRVJEX0RJUyAqLworCWxpcwlyMywgQ0ZHX0NDU1JCQVJAaAorCW9yaQlyMywgcjMsIDB4MTAwOAorCWx3eglyNCwgMChyMykKKwlvcmlzCXI0LCByNCwgMHg0MDAwCisJc3R3CXI0LCAwKHIzKQorCXN5bmMKKworI2lmIChFTVVMQVRPUl9SVU4gPT0gMSkKKwkvKiBPbiB0aGUgZW11bGF0b3Igd2Ugd2FudCB0byBhZGp1c3QgdGhlc2UgQVNBUCAqLworCS8qIG90aGVyd2lzZSB0aGluZ3MgYXJlIHNsb29vb3cgKi8KKwkvKiBTZXR1cCBPUjAgKExBTEUgRklYKSovCisJbGlzCXIzLCBDRkdfQ0NTUkJBUkBoCisJb3JpCXIzLCByMywgMHg1MDA0CisJbGkJcjQsIDB4MEZGMworCXN0dwlyNCwgMChyMykKKwlzeW5jCisKKwkvKiBTZXR1cCBMQ1JSICovCisJbGlzCXIzLCBDRkdfQ0NTUkJBUkBoCisJb3JpCXIzLCByMywgMHg1MEQ0CisJbGlzCXI0LCAweDgwMDAKKwlvcmkJcjQsIHI0LCAweDAwMDIKKwlzdHcJcjQsIDAocjMpCisJc3luYworI2VuZGlmCisjaWYgMQorCS8qIG1ha2Ugc3VyZSB0aW1lciBlbmFibGVkIGluIGd1dHMgcmVnaXN0ZXIgdG9vICovCisJbGlzCXIzLCBDRkdfQ0NTUkJBUkBoCisJb3JpcwlyMyxyMywgMHhFCisJb3JpCXIzLHIzLDB4MDA3MAorCWx3eglyNCwgMChyMykKKwlsaXMJcjUsMHhGRkZDCisJb3JpCXI1LHI1LDB4NUZGRgorCWFuZAlyNCxyNCxyNQorCXN0dwlyNCwwKHIzKQorI2VuZGlmCisJLyoKKwkgKiBDYWNoZSBtdXN0IGJlIGVuYWJsZWQgaGVyZSBmb3Igc3RhY2staW4tY2FjaGUgdHJpY2suCisJICogVGhpcyBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgQkFUUy4KKwkgKiBDYWNoZSBzaG91bGQgYmUgdHVybmVkIG9uIGFmdGVyIEJBVHMsIHNpbmNlIGJ5IGRlZmF1bHQKKwkgKiBldmVyeXRoaW5nIGlzIHdyaXRlLXRocm91Z2guCisJICovCisKKwkvKiBlbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiAqLworCWJsCWVuYWJsZV9hZGRyX3RyYW5zCisJc3luYworCisJLyogZW5hYmxlIGFuZCBpbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlICovCisvKglibAlsMWRjYWNoZV9lbmFibGUgKi8KKyAgICAgICAgYmwgICAgICBkY2FjaGVfZW5hYmxlCisJc3luYworCisjaWYgMQorCWJsCWljYWNoZV9lbmFibGUKKyNlbmRpZgorCisjaWZkZWYgQ0ZHX0lOSVRfUkFNX0xPQ0sKKwlibAlsb2NrX3JhbV9pbl9jYWNoZQorCXN5bmMKKyNlbmRpZgorCisJLyogc2V0IHVwIHRoZSBzdGFjayBwb2ludGVyIGluIG91ciBuZXdseSBjcmVhdGVkCisJICogY2FjaGUtcmFtIChyMSkgKi8KKwlsaXMJcjEsIChDRkdfSU5JVF9SQU1fQUREUiArIENGR19HQkxfREFUQV9PRkZTRVQpQGgKKwlvcmkJcjEsIHIxLCAoQ0ZHX0lOSVRfUkFNX0FERFIgKyBDRkdfR0JMX0RBVEFfT0ZGU0VUKUBsCisKKwlsaQlyMCwgMAkJLyogTWFrZSByb29tIGZvciBzdGFjayBmcmFtZSBoZWFkZXIgYW5kCSovCisJc3R3dQlyMCwgLTQocjEpCS8qIGNsZWFyIGZpbmFsIHN0YWNrIGZyYW1lIHNvIHRoYXQJKi8KKwlzdHd1CXIwLCAtNChyMSkJLyogc3RhY2sgYmFja3RyYWNlcyB0ZXJtaW5hdGUgY2xlYW5seQkqLworCisJR0VUX0dPVAkJCS8qIGluaXRpYWxpemUgR09UIGFjY2VzcwkqLworCisJLyogcnVuIGxvdy1sZXZlbCBDUFUgaW5pdCBjb2RlICAgICAoZnJvbSBGbGFzaCkJKi8KKwlibAljcHVfaW5pdF9mCisJc3luYworCisjaWZkZWYgIFJVTl9ESUFHCisKKyAgICAgICAgLyogU3JpOiAgQ29kZSB0byBydW4gdGhlIGRpYWdub3N0aWMgYXV0b21hdGljYWxseSAqLworCisgICAgICAgIC8qIExvYWQgUFhfQVVYIHJlZ2lzdGVyIGFkZHJlc3MgaW4gcjQgKi8KKyAgICAgICAgbGlzICAgICByNCwgMHhmODEwCisgICAgICAgIG9yaSAgICAgcjQsIHI0LCAweDYKKyAgICAgICAgLyogTG9hZCBjb250ZW50cyBvZiBQWF9BVVggaW4gcjMgYml0cyAyNCB0byAzMSovCisgICAgICAgIGxieiAgICAgcjMsIDAocjQpCisKKyAgICAgICAgLyogTWFzayBhbmQgb2J0YWluIHRoZSBiaXQgaW4gcjMgKi8KKyAgICAgICAgcmx3aW5tLiByMywgcjMsIDAsIDI0LCAyNAorICAgICAgICAvKiBJZiBub3QgemVybywganVtcCBhbmQgY29udGludWUgd2l0aCB1LWJvb3QgKi8KKyAgICAgICAgYm5lICAgICBkaWFnX2RvbmUKKworICAgICAgICAvKiBMb2FkIGJhY2sgY29udGVudHMgb2YgUFhfQVVYIGluIHIzIGJpdHMgMjQgdG8gMzEgKi8KKyAgICAgICAgbGJ6ICAgICByMywgMChyNCkKKyAgICAgICAgLyogU2V0IHRoZSBNU0Igb2YgdGhlIHJlZ2lzdGVyIHZhbHVlICovCisgICAgICAgIG9yaSAgICAgcjMsIHIzLCAweDgwCisgICAgICAgIC8qIFdyaXRlIHZhbHVlIGluIHIzIGJhY2sgdG8gUFhfQVVYICovCisgICAgICAgIHN0YiAgICAgcjMsIDAocjQpCisKKyAgICAgICAgLyogR2V0IHRoZSBhZGRyZXNzIHRvIGp1bXAgdG8gaW4gcjMqLworICAgICAgICBsaXMgICAgIHIzLCBDRkdfRElBR19BRERSQGgKKyAgICAgICAgb3JpICAgICByMywgcjMsIENGR19ESUFHX0FERFJAbAorCisgICAgICAgIC8qIExvYWQgdGhlIExSIHdpdGggdGhlIGJyYW5jaCBhZGRyZXNzICovCisgICAgICAgIG10bHIgICAgcjMKKworICAgICAgICAvKiBCcmFuY2ggdG8gZGlhZ25vc3RpYyAqLworICAgICAgICBibHIKKworZGlhZ19kb25lOgorI2VuZGlmCisKKyAgLyogICAgICBibCAgICAgIGwyY2FjaGVfZW5hYmxlKi8KKyAgICAgICAgbXIJcjMsIHIyMQorCisJLyogcjM6IEJPT1RGTEFHICovCisJLyogcnVuIDFzdCBwYXJ0IG9mIGJvYXJkIGluaXQgY29kZSAoZnJvbSBGbGFzaCkgICAqLworCWJsCWJvYXJkX2luaXRfZgorCXN5bmMKKworCS8qIE5PVFJFQUNIRUQgKi8KKworCS5nbG9ibAlpbnZhbGlkYXRlX2JhdHMKK2ludmFsaWRhdGVfYmF0czoKKworCS8qIGludmFsaWRhdGUgQkFUcyAqLworCW10c3ByCUlCQVQwVSwgcjAKKwltdHNwcglJQkFUMVUsIHIwCisJbXRzcHIJSUJBVDJVLCByMAorCW10c3ByCUlCQVQzVSwgcjAKKwltdHNwciAgIElCQVQ0VSwgcjAKKwltdHNwciAgIElCQVQ1VSwgcjAKKwltdHNwciAgIElCQVQ2VSwgcjAKKwltdHNwciAgIElCQVQ3VSwgcjAKKworCWlzeW5jCisJbXRzcHIJREJBVDBVLCByMAorCW10c3ByCURCQVQxVSwgcjAKKwltdHNwcglEQkFUMlUsIHIwCisJbXRzcHIJREJBVDNVLCByMAorCW10c3ByICAgREJBVDRVLCByMAorCW10c3ByICAgREJBVDVVLCByMAorCW10c3ByICAgREJBVDZVLCByMAorCW10c3ByICAgREJBVDdVLCByMAorCisJaXN5bmMKKwlzeW5jCisJYmxyCisKKworCS8qIHNldHVwX2JhdHMgLSBzZXQgdGhlbSB1cCB0byBzb21lIGluaXRpYWwgc3RhdGUgKi8KKwkuZ2xvYmwJc2V0dXBfYmF0cworc2V0dXBfYmF0czoKKworCWFkZGlzCXIwLCByMCwgMHgwMDAwCisKKwkvKiBJQkFUIDAgKi8KKwlhZGRpcwlyNCwgcjAsIENGR19JQkFUMExAaAorCW9yaQlyNCwgcjQsIENGR19JQkFUMExAbAorCWFkZGlzCXIzLCByMCwgQ0ZHX0lCQVQwVUBoCisJb3JpCXIzLCByMywgQ0ZHX0lCQVQwVUBsCisJbXRzcHIJSUJBVDBMLCByNAorCW10c3ByCUlCQVQwVSwgcjMKKwlpc3luYworCisJLyogREJBVCAwICovCisJYWRkaXMJcjQsIHIwLCBDRkdfREJBVDBMQGgKKwlvcmkJcjQsIHI0LCBDRkdfREJBVDBMQGwKKwlhZGRpcwlyMywgcjAsIENGR19EQkFUMFVAaAorCW9yaQlyMywgcjMsIENGR19EQkFUMFVAbAorCW10c3ByCURCQVQwTCwgcjQKKwltdHNwcglEQkFUMFUsIHIzCisJaXN5bmMKKworCS8qIElCQVQgMSAqLworCWFkZGlzCXI0LCByMCwgQ0ZHX0lCQVQxTEBoCisJb3JpCXI0LCByNCwgQ0ZHX0lCQVQxTEBsCisJYWRkaXMJcjMsIHIwLCBDRkdfSUJBVDFVQGgKKwlvcmkJcjMsIHIzLCBDRkdfSUJBVDFVQGwKKwltdHNwcglJQkFUMUwsIHI0CisJbXRzcHIJSUJBVDFVLCByMworCWlzeW5jCisKKwkvKiBEQkFUIDEgKi8KKwlhZGRpcwlyNCwgcjAsIENGR19EQkFUMUxAaAorCW9yaQlyNCwgcjQsIENGR19EQkFUMUxAbAorCWFkZGlzCXIzLCByMCwgQ0ZHX0RCQVQxVUBoCisJb3JpCXIzLCByMywgQ0ZHX0RCQVQxVUBsCisJbXRzcHIJREJBVDFMLCByNAorCW10c3ByCURCQVQxVSwgcjMKKwlpc3luYworCisJLyogSUJBVCAyICovCisJYWRkaXMJcjQsIHIwLCBDRkdfSUJBVDJMQGgKKwlvcmkJcjQsIHI0LCBDRkdfSUJBVDJMQGwKKwlhZGRpcwlyMywgcjAsIENGR19JQkFUMlVAaAorCW9yaQlyMywgcjMsIENGR19JQkFUMlVAbAorCW10c3ByCUlCQVQyTCwgcjQKKwltdHNwcglJQkFUMlUsIHIzCisJaXN5bmMKKworCS8qIERCQVQgMiAqLworCWFkZGlzCXI0LCByMCwgQ0ZHX0RCQVQyTEBoCisJb3JpCXI0LCByNCwgQ0ZHX0RCQVQyTEBsCisJYWRkaXMJcjMsIHIwLCBDRkdfREJBVDJVQGgKKwlvcmkJcjMsIHIzLCBDRkdfREJBVDJVQGwKKwltdHNwcglEQkFUMkwsIHI0CisJbXRzcHIJREJBVDJVLCByMworCWlzeW5jCisKKwkvKiBJQkFUIDMgKi8KKwlhZGRpcwlyNCwgcjAsIENGR19JQkFUM0xAaAorCW9yaQlyNCwgcjQsIENGR19JQkFUM0xAbAorCWFkZGlzCXIzLCByMCwgQ0ZHX0lCQVQzVUBoCisJb3JpCXIzLCByMywgQ0ZHX0lCQVQzVUBsCisJbXRzcHIJSUJBVDNMLCByNAorCW10c3ByCUlCQVQzVSwgcjMKKwlpc3luYworCisJLyogREJBVCAzICovCisJYWRkaXMJcjQsIHIwLCBDRkdfREJBVDNMQGgKKwlvcmkJcjQsIHI0LCBDRkdfREJBVDNMQGwKKwlhZGRpcwlyMywgcjAsIENGR19EQkFUM1VAaAorCW9yaQlyMywgcjMsIENGR19EQkFUM1VAbAorCW10c3ByCURCQVQzTCwgcjQKKwltdHNwcglEQkFUM1UsIHIzCisJaXN5bmMKKworCS8qIElCQVQgNCAqLworCWFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDRMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQ0TEBsCisJYWRkaXMgICByMywgcjAsIENGR19JQkFUNFVAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDRVQGwKKwltdHNwciAgIElCQVQ0TCwgcjQKKwltdHNwciAgIElCQVQ0VSwgcjMKKwlpc3luYworCisJLyogREJBVCA0ICovCisJYWRkaXMgICByNCwgcjAsIENGR19EQkFUNExAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfREJBVDRMQGwKKwlhZGRpcyAgIHIzLCByMCwgQ0ZHX0RCQVQ0VUBoCisJb3JpICAgICByMywgcjMsIENGR19EQkFUNFVAbAorCW10c3ByICAgREJBVDRMLCByNAorCW10c3ByICAgREJBVDRVLCByMworCWlzeW5jCisKKwkvKiBJQkFUIDUgKi8KKwlhZGRpcyAgIHI0LCByMCwgQ0ZHX0lCQVQ1TEBoCisJb3JpICAgICByNCwgcjQsIENGR19JQkFUNUxAbAorCWFkZGlzICAgcjMsIHIwLCBDRkdfSUJBVDVVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0lCQVQ1VUBsCisJbXRzcHIgICBJQkFUNUwsIHI0CisJbXRzcHIgICBJQkFUNVUsIHIzCisJaXN5bmMKKworCS8qIERCQVQgNSAqLworCWFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDVMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0RCQVQ1TEBsCisJYWRkaXMgICByMywgcjAsIENGR19EQkFUNVVAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDVVQGwKKwltdHNwciAgIERCQVQ1TCwgcjQKKwltdHNwciAgIERCQVQ1VSwgcjMKKwlpc3luYworCisJLyogSUJBVCA2ICovCisJYWRkaXMgICByNCwgcjAsIENGR19JQkFUNkxAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDZMQGwKKwlhZGRpcyAgIHIzLCByMCwgQ0ZHX0lCQVQ2VUBoCisJb3JpICAgICByMywgcjMsIENGR19JQkFUNlVAbAorCW10c3ByICAgSUJBVDZMLCByNAorCW10c3ByICAgSUJBVDZVLCByMworCWlzeW5jCisKKwkvKiBEQkFUIDYgKi8KKwlhZGRpcyAgIHI0LCByMCwgQ0ZHX0RCQVQ2TEBoCisJb3JpICAgICByNCwgcjQsIENGR19EQkFUNkxAbAorCWFkZGlzICAgcjMsIHIwLCBDRkdfREJBVDZVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0RCQVQ2VUBsCisJbXRzcHIgICBEQkFUNkwsIHI0CisJbXRzcHIgICBEQkFUNlUsIHIzCisJaXN5bmMKKworCS8qIElCQVQgNyAqLworCWFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDdMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQ3TEBsCisJYWRkaXMgICByMywgcjAsIENGR19JQkFUN1VAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDdVQGwKKwltdHNwciAgIElCQVQ3TCwgcjQKKwltdHNwciAgIElCQVQ3VSwgcjMKKwlpc3luYworCisJLyogREJBVCA3ICovCisJYWRkaXMgICByNCwgcjAsIENGR19EQkFUN0xAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfREJBVDdMQGwKKwlhZGRpcyAgIHIzLCByMCwgQ0ZHX0RCQVQ3VUBoCisJb3JpICAgICByMywgcjMsIENGR19EQkFUN1VAbAorCW10c3ByICAgREJBVDdMLCByNAorCW10c3ByICAgREJBVDdVLCByMworCWlzeW5jCisKKzE6CisJYWRkaXMJcjMsIDAsIDB4MDAwMAorCWFkZGlzCXI1LCAwLCAweDQgICAgLyogdXBwZXIgYm91bmQgb2YgMHgwMDA0MDAwMCBmb3IgNzQwMC83NTAgKi8KKwlpc3luYworCit0bGJscDoKKwl0bGJpZQlyMworCXN5bmMKKwlhZGRpCXIzLCByMywgMHgxMDAwCisJY21wCTAsIDAsIHIzLCByNQorCWJsdCB0bGJscAorCisJYmxyCisKKwkuZ2xvYmwgZW5hYmxlX2FkZHJfdHJhbnMKK2VuYWJsZV9hZGRyX3RyYW5zOgorCS8qIGVuYWJsZSBhZGRyZXNzIHRyYW5zbGF0aW9uICovCisJbWZtc3IJcjUKKwlvcmkJcjUsIHI1LCAoTVNSX0lSIHwgTVNSX0RSKQorCW10bXNyCXI1CisJaXN5bmMKKwlibHIKKworCS5nbG9ibCBkaXNhYmxlX2FkZHJfdHJhbnMKK2Rpc2FibGVfYWRkcl90cmFuczoKKwkvKiBkaXNhYmxlIGFkZHJlc3MgdHJhbnNsYXRpb24gKi8KKwltZmxyCXI0CisJbWZtc3IJcjMKKwlhbmRpLglyMCwgcjMsIChNU1JfSVIgfCBNU1JfRFIpCisJYmVxbHIKKwlhbmRjCXIzLCByMywgcjAKKwltdHNwcglTUlIwLCByNAorCW10c3ByCVNSUjEsIHIzCisJcmZpCisKKy8qCisgKiBUaGlzIGNvZGUgZmluaXNoZXMgc2F2aW5nIHRoZSByZWdpc3RlcnMgdG8gdGhlIGV4Y2VwdGlvbiBmcmFtZQorICogYW5kIGp1bXBzIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGZvciB0aGUgZXhjZXB0aW9uLgorICogUmVnaXN0ZXIgcjIxIGlzIHBvaW50ZXIgaW50byB0cmFwIGZyYW1lLCByMSBoYXMgbmV3IHN0YWNrIHBvaW50ZXIuCisgKi8KKwkuZ2xvYmwJdHJhbnNmZXJfdG9faGFuZGxlcgordHJhbnNmZXJfdG9faGFuZGxlcjoKKwlzdHcJcjIyLF9OSVAocjIxKQorCWxpcwlyMjIsTVNSX1BPV0BoCisJYW5kYwlyMjMscjIzLHIyMgorCXN0dwlyMjMsX01TUihyMjEpCisJU0FWRV9HUFIoNywgcjIxKQorCVNBVkVfNEdQUlMoOCwgcjIxKQorCVNBVkVfOEdQUlMoMTIsIHIyMSkKKwlTQVZFXzhHUFJTKDI0LCByMjEpCisJbWZscglyMjMKKwlhbmRpLglyMjQscjIzLDB4M2YwMAkJLyogZ2V0IHZlY3RvciBvZmZzZXQgKi8KKwlzdHcJcjI0LFRSQVAocjIxKQorCWxpCXIyMiwwCisJc3R3CXIyMixSRVNVTFQocjIxKQorCW10c3ByCVNQUkcyLHIyMgkJLyogcjEgaXMgbm93IGtlcm5lbCBzcCAqLworCWx3eglyMjQsMChyMjMpCQkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgaGFuZGxlciAqLworCWx3eglyMjMsNChyMjMpCQkvKiB3aGVyZSB0byBnbyB3aGVuIGRvbmUgKi8KKwltdHNwcglTUlIwLHIyNAorCW10c3ByCVNSUjEscjIwCisJbXRscglyMjMKKwlTWU5DCisJcmZpCQkJCS8qIGp1bXAgdG8gaGFuZGxlciwgZW5hYmxlIE1NVSAqLworCitpbnRfcmV0dXJuOgorCW1mbXNyCXIyOAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJbGkJcjQsMAorCW9yaQlyNCxyNCxNU1JfRUUKKwlhbmRjCXIyOCxyMjgscjQKKwlTWU5DCQkJLyogU29tZSBjaGlwIHJldnMgbmVlZCB0aGlzLi4uICovCisJbXRtc3IJcjI4CisJU1lOQworCWx3eglyMixfQ1RSKHIxKQorCWx3eglyMCxfTElOSyhyMSkKKwltdGN0cglyMgorCW10bHIJcjAKKwlsd3oJcjIsX1hFUihyMSkKKwlsd3oJcjAsX0NDUihyMSkKKwltdHNwcglYRVIscjIKKwltdGNyZgkweEZGLHIwCisJUkVTVF8xMEdQUlMoMywgcjEpCisJUkVTVF8xMEdQUlMoMTMsIHIxKQorCVJFU1RfOEdQUlMoMjMsIHIxKQorCVJFU1RfR1BSKDMxLCByMSkKKwlsd3oJcjIsX05JUChyMSkJLyogUmVzdG9yZSBlbnZpcm9ubWVudCAqLworCWx3eglyMCxfTVNSKHIxKQorCW10c3ByCVNSUjAscjIKKwltdHNwcglTUlIxLHIwCisJbHd6CXIwLEdQUjAocjEpCisJbHd6CXIyLEdQUjIocjEpCisJbHd6CXIxLEdQUjEocjEpCisJU1lOQworCXJmaQorCisJLmdsb2JsCWRjX3JlYWQKK2RjX3JlYWQ6CisJYmxyCisKKwkuZ2xvYmwgZ2V0X3B2cgorZ2V0X3B2cjoKKwltZnNwcglyMywgUFZSCisJYmxyCisKKwkuZ2xvYmwgZ2V0X3N2cgorZ2V0X3N2cjoKKwltZnNwcglyMywgU1ZSCisJYmxyCisKKworLyoKKyAqIEZ1bmN0aW9uOgkgaW44CisgKiBEZXNjcmlwdGlvbjoJIElucHV0IDggYml0cworICovCisJLmdsb2JsCWluOAoraW44OgorCWxieglyMywweDAwMDAocjMpCisJYmxyCisKKy8qCisgKiBGdW5jdGlvbjoJIG91dDgKKyAqIERlc2NyaXB0aW9uOgkgT3V0cHV0IDggYml0cworICovCisJLmdsb2JsCW91dDgKK291dDg6CisJc3RiCXI0LDB4MDAwMChyMykKKwlibHIKKworLyoKKyAqIEZ1bmN0aW9uOgkgb3V0MTYKKyAqIERlc2NyaXB0aW9uOgkgT3V0cHV0IDE2IGJpdHMKKyAqLworCS5nbG9ibAlvdXQxNgorb3V0MTY6CisJc3RoCXI0LDB4MDAwMChyMykKKwlibHIKKworLyoKKyAqIEZ1bmN0aW9uOgkgb3V0MTZyCisgKiBEZXNjcmlwdGlvbjoJIEJ5dGUgcmV2ZXJzZSBhbmQgb3V0cHV0IDE2IGJpdHMKKyAqLworCS5nbG9ibAlvdXQxNnIKK291dDE2cjoKKwlzdGhicngJcjQscjAscjMKKwlibHIKKworLyoKKyAqIEZ1bmN0aW9uOgkgb3V0MzIKKyAqIERlc2NyaXB0aW9uOgkgT3V0cHV0IDMyIGJpdHMKKyAqLworCS5nbG9ibAlvdXQzMgorb3V0MzI6CisJc3R3CXI0LDB4MDAwMChyMykKKwlibHIKKworLyoKKyAqIEZ1bmN0aW9uOgkgb3V0MzJyCisgKiBEZXNjcmlwdGlvbjoJIEJ5dGUgcmV2ZXJzZSBhbmQgb3V0cHV0IDMyIGJpdHMKKyAqLworCS5nbG9ibAlvdXQzMnIKK291dDMycjoKKwlzdHdicngJcjQscjAscjMKKwlibHIKKworLyoKKyAqIEZ1bmN0aW9uOgkgaW4xNgorICogRGVzY3JpcHRpb246CSBJbnB1dCAxNiBiaXRzCisgKi8KKwkuZ2xvYmwJaW4xNgoraW4xNjoKKwlsaHoJcjMsMHgwMDAwKHIzKQorCWJscgorCisvKgorICogRnVuY3Rpb246CSBpbjE2cgorICogRGVzY3JpcHRpb246CSBJbnB1dCAxNiBiaXRzIGFuZCBieXRlIHJldmVyc2UKKyAqLworCS5nbG9ibAlpbjE2cgoraW4xNnI6CisJbGhicngJcjMscjAscjMKKwlibHIKKworLyoKKyAqIEZ1bmN0aW9uOgkgaW4zMgorICogRGVzY3JpcHRpb246CSBJbnB1dCAzMiBiaXRzCisgKi8KKwkuZ2xvYmwJaW4zMgoraW4zMjoKKwlsd3oJMywweDAwMDAoMykKKwlibHIKKworLyoKKyAqIEZ1bmN0aW9uOgkgaW4zMnIKKyAqIERlc2NyaXB0aW9uOgkgSW5wdXQgMzIgYml0cyBhbmQgYnl0ZSByZXZlcnNlCisgKi8KKwkuZ2xvYmwJaW4zMnIKK2luMzJyOgorCWx3YnJ4CXIzLHIwLHIzCisJYmxyCisKKy8qCisgKiBGdW5jdGlvbjoJIHBwY0RjYmYKKyAqIERlc2NyaXB0aW9uOgkgRGF0YSBDYWNoZSBibG9jayBmbHVzaAorICogSW5wdXQ6CSByMyA9IGVmZmVjdGl2ZSBhZGRyZXNzCisgKiBPdXRwdXQ6CSBub25lLgorICovCisJLmdsb2JsCXBwY0RjYmYKK3BwY0RjYmY6CisJZGNiZglyMCxyMworCWJscgorCisvKgorICogRnVuY3Rpb246CSBwcGNEY2JpCisgKiBEZXNjcmlwdGlvbjoJIERhdGEgQ2FjaGUgYmxvY2sgSW52YWxpZGF0ZQorICogSW5wdXQ6CSByMyA9IGVmZmVjdGl2ZSBhZGRyZXNzCisgKiBPdXRwdXQ6CSBub25lLgorICovCisJLmdsb2JsCXBwY0RjYmkKK3BwY0RjYmk6CisJZGNiaQlyMCxyMworCWJscgorCisvKgorICogRnVuY3Rpb246CSBwcGNEY2J6CisgKiBEZXNjcmlwdGlvbjoJIERhdGEgQ2FjaGUgYmxvY2sgemVyby4KKyAqIElucHV0OgkgcjMgPSBlZmZlY3RpdmUgYWRkcmVzcworICogT3V0cHV0Ogkgbm9uZS4KKyAqLworCS5nbG9ibAlwcGNEY2J6CitwcGNEY2J6OgorCWRjYnoJcjAscjMKKwlibHIKKworLyoKKyAqIEZ1bmN0aW9uOgkgcHBjU3luYworICogRGVzY3JpcHRpb246CSBQcm9jZXNzb3IgU3luY2hyb25pemUKKyAqIElucHV0Ogkgbm9uZS4KKyAqIE91dHB1dDoJIG5vbmUuCisgKi8KKwkuZ2xvYmwJcHBjU3luYworcHBjU3luYzoKKwlzeW5jCisJYmxyCisKKy8qCisgKiB2b2lkIHJlbG9jYXRlX2NvZGUgKGFkZHJfc3AsIGdkLCBhZGRyX21vbmkpCisgKgorICogVGhpcyAiZnVuY3Rpb24iIGRvZXMgbm90IHJldHVybiwgaW5zdGVhZCBpdCBjb250aW51ZXMgaW4gUkFNCisgKiBhZnRlciByZWxvY2F0aW5nIHRoZSBtb25pdG9yIGNvZGUuCisgKgorICogcjMgPSBkZXN0CisgKiByNCA9IHNyYworICogcjUgPSBsZW5ndGggaW4gYnl0ZXMKKyAqIHI2ID0gY2FjaGVsaW5lc2l6ZQorICovCisJLmdsb2JsCXJlbG9jYXRlX2NvZGUKK3JlbG9jYXRlX2NvZGU6CisKKyAgICAgICAgbXIJcjEsICByMwkJLyogU2V0IG5ldyBzdGFjayBwb2ludGVyCQkqLworCW1yCXI5LCAgcjQJCS8qIFNhdmUgY29weSBvZiBHbG9iYWwgRGF0YSBwb2ludGVyCSovCisJbXIJcjI5LCByOQkJLyogU2F2ZSBmb3IgREVDTEFSRV9HTE9CQUxfREFUQV9QVFIJKi8KKwltcglyMTAsIHI1CQkvKiBTYXZlIGNvcHkgb2YgRGVzdGluYXRpb24gQWRkcmVzcwkqLworCisJbXIJcjMsICByNQkJCQkvKiBEZXN0aW5hdGlvbiBBZGRyZXNzCSovCisJbGlzCXI0LCBDRkdfTU9OSVRPUl9CQVNFQGgJCS8qIFNvdXJjZSAgICAgIEFkZHJlc3MJKi8KKwlvcmkJcjQsIHI0LCBDRkdfTU9OSVRPUl9CQVNFQGwKKwlsd3oJcjUsIEdPVChfX2luaXRfZW5kKQorCXN1YglyNSwgcjUsIHI0CisJbGkJcjYsIENGR19DQUNIRUxJTkVfU0laRQkJLyogQ2FjaGUgTGluZSBTaXplCSovCisKKwkvKgorCSAqIEZpeCBHT1QgcG9pbnRlcjoKKwkgKgorCSAqIE5ldyBHT1QtUFRSID0gKG9sZCBHT1QtUFRSIC0gQ0ZHX01PTklUT1JfQkFTRSkgKyBEZXN0aW5hdGlvbiBBZGRyZXNzCisJICoKKwkgKiBPZmZzZXQ6CisJICovCisJc3ViCXIxNSwgcjEwLCByNAorCisJLyogRmlyc3Qgb3VyIG93biBHT1QgKi8KKwlhZGQJcjE0LCByMTQsIHIxNQorCS8qIHRoZW4gdGhlIG9uZSB1c2VkIGJ5IHRoZSBDIGNvZGUgKi8KKwlhZGQJcjMwLCByMzAsIHIxNQorCisJLyoKKwkgKiBOb3cgcmVsb2NhdGUgY29kZQorCSAqLworI2lmZGVmIENPTkZJR19FQ0MKKwlibAlib2FyZF9yZWxvY2F0ZV9yb20KKwlzeW5jCisJbXIJcjMsIHIxMAkJCQkvKiBEZXN0aW5hdGlvbiBBZGRyZXNzCSovCisJbGlzCXI0LCBDRkdfTU9OSVRPUl9CQVNFQGgJCS8qIFNvdXJjZSAgICAgIEFkZHJlc3MJKi8KKwlvcmkJcjQsIHI0LCBDRkdfTU9OSVRPUl9CQVNFQGwKKwlsd3oJcjUsIEdPVChfX2luaXRfZW5kKQorCXN1YglyNSwgcjUsIHI0CisJbGkJcjYsIENGR19DQUNIRUxJTkVfU0laRQkJLyogQ2FjaGUgTGluZSBTaXplCSovCisjZWxzZQorCWNtcGx3CWNyMSxyMyxyNAorCWFkZGkJcjAscjUsMworCXNyd2kuCXIwLHIwLDIKKwliZXEJY3IxLDRmCQkvKiBJbiBwbGFjZSBjb3B5IGlzIG5vdCBuZWNlc3NhcnkJKi8KKwliZXEJN2YJCS8qIFByb3RlY3QgYWdhaW5zdCAwIGNvdW50CQkqLworCW10Y3RyCXIwCisJYmdlCWNyMSwyZgorCisJbGEJcjgsLTQocjQpCisJbGEJcjcsLTQocjMpCisxOglsd3p1CXIwLDQocjgpCisJc3R3dQlyMCw0KHI3KQorCWJkbnoJMWIKKwliCTRmCisKKzI6CXNsd2kJcjAscjAsMgorCWFkZAlyOCxyNCxyMAorCWFkZAlyNyxyMyxyMAorMzoJbHd6dQlyMCwtNChyOCkKKwlzdHd1CXIwLC00KHI3KQorCWJkbnoJM2IKKyNlbmRpZgorLyoKKyAqIE5vdyBmbHVzaCB0aGUgY2FjaGU6IG5vdGUgdGhhdCB3ZSBtdXN0IHN0YXJ0IGZyb20gYSBjYWNoZSBhbGlnbmVkCisgKiBhZGRyZXNzLiBPdGhlcndpc2Ugd2UgbWlnaHQgbWlzcyBvbmUgY2FjaGUgbGluZS4KKyAqLworNDoJY21wd2kJcjYsMAorCWFkZAlyNSxyMyxyNQorCWJlcQk3ZgkJLyogQWx3YXlzIGZsdXNoIHByZWZldGNoIHF1ZXVlIGluIGFueSBjYXNlICovCisJc3ViaQlyMCxyNiwxCisJYW5kYwlyMyxyMyxyMAorCW1yCXI0LHIzCis1OglkY2JzdAkwLHI0CisJYWRkCXI0LHI0LHI2CisJY21wbHcJcjQscjUKKwlibHQJNWIKKwlzeW5jCQkJLyogV2FpdCBmb3IgYWxsIGRjYnN0IHRvIGNvbXBsZXRlIG9uIGJ1cyAqLworCW1yCXI0LHIzCis2OglpY2JpCTAscjQKKwlhZGQJcjQscjQscjYKKwljbXBsdwlyNCxyNQorCWJsdAk2YgorNzoJc3luYwkJCS8qIFdhaXQgZm9yIGFsbCBpY2JpIHRvIGNvbXBsZXRlIG9uIGJ1cwkqLworCWlzeW5jCisKKy8qCisgKiBXZSBhcmUgZG9uZS4gRG8gbm90IHJldHVybiwgaW5zdGVhZCBicmFuY2ggdG8gc2Vjb25kIHBhcnQgb2YgYm9hcmQKKyAqIGluaXRpYWxpemF0aW9uLCBub3cgcnVubmluZyBmcm9tIFJBTS4KKyAqLworCWFkZGkJcjAsIHIxMCwgaW5fcmFtIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKwltdGxyCXIwCisJYmxyCisKK2luX3JhbToKKyNpZmRlZiBDT05GSUdfRUNDCisJYmwJYm9hcmRfaW5pdF9lY2MKKyNlbmRpZgorCS8qCisJICogUmVsb2NhdGlvbiBGdW5jdGlvbiwgcjE0IHBvaW50IHRvIGdvdDIrMHg4MDAwCisJICoKKwkgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCisJICogYWxyZWFkeSBwdXRzIGEgZmV3IGVudHJpZXMgaW4gdGhlIHRhYmxlLgorCSAqLworCWxpCXIwLF9fZ290Ml9lbnRyaWVzQHNlY3RvZmZAbAorCWxhCXIzLEdPVChfR09UMl9UQUJMRV8pCisJbHd6CXIxMSxHT1QoX0dPVDJfVEFCTEVfKQorCW10Y3RyCXIwCisJc3ViCXIxMSxyMyxyMTEKKwlhZGRpCXIzLHIzLC00CisxOglsd3p1CXIwLDQocjMpCisJYWRkCXIwLHIwLHIxMQorCXN0dwlyMCwwKHIzKQorCWJkbnoJMWIKKworCS8qCisJICogTm93IGFkanVzdCB0aGUgZml4dXBzIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlIGZpeHVwcworCSAqIGluIGNhc2Ugd2UgbmVlZCB0byBtb3ZlIG91cnNlbHZlcyBhZ2Fpbi4KKwkgKi8KKzI6CWxpCXIwLF9fZml4dXBfZW50cmllc0BzZWN0b2ZmQGwKKwlsd3oJcjMsR09UKF9GSVhVUF9UQUJMRV8pCisJY21wd2kJcjAsMAorCW10Y3RyCXIwCisJYWRkaQlyMyxyMywtNAorCWJlcQk0ZgorMzoJbHd6dQlyNCw0KHIzKQorCWx3enV4CXIwLHI0LHIxMQorCWFkZAlyMCxyMCxyMTEKKwlzdHcJcjEwLDAocjMpCisJc3R3CXIwLDAocjQpCisJYmRuegkzYgorNDoKKy8qIGNsZWFyX2JzczogKi8KKwkvKgorCSAqIE5vdyBjbGVhciBCU1Mgc2VnbWVudAorCSAqLworCWx3eglyMyxHT1QoX19ic3Nfc3RhcnQpCisJbHd6CXI0LEdPVChfZW5kKQorCisJY21wbHcJMCwgcjMsIHI0CisJYmVxCTZmCisKKwlsaQlyMCwgMAorNToKKwlzdHcJcjAsIDAocjMpCisJYWRkaQlyMywgcjMsIDQKKwljbXBsdwkwLCByMywgcjQKKwlibmUJNWIKKzY6CisJbXIJcjMsIHI5CQkvKiBJbml0IERhdGUgcG9pbnRlcgkJKi8KKwltcglyNCwgcjEwCQkvKiBEZXN0aW5hdGlvbiBBZGRyZXNzCQkqLworCWJsCWJvYXJkX2luaXRfcgorCisJLyogbm90IHJlYWNoZWQgLSBlbmQgcmVsb2NhdGVfY29kZSAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwkvKgorCSAqIENvcHkgZXhjZXB0aW9uIHZlY3RvciBjb2RlIHRvIGxvdyBtZW1vcnkKKwkgKgorCSAqIHIzOiBkZXN0X2FkZHIKKwkgKiByNzogc291cmNlIGFkZHJlc3MsIHI4OiBlbmQgYWRkcmVzcywgcjk6IHRhcmdldCBhZGRyZXNzCisJICovCisJLmdsb2JsCXRyYXBfaW5pdAordHJhcF9pbml0OgorCWx3eglyNywgR09UKF9zdGFydCkKKwlsd3oJcjgsIEdPVChfZW5kX29mX3ZlY3RvcnMpCisKKwlsaQlyOSwgMHgxMDAJCS8qIHJlc2V0IHZlY3RvciBhbHdheXMgYXQgMHgxMDAgKi8KKworCWNtcGx3CTAsIHI3LCByOAorCWJnZWxyCQkJCS8qIHJldHVybiBpZiByNz49cjggLSBqdXN0IGluIGNhc2UgKi8KKworCW1mbHIJcjQJCQkvKiBzYXZlIGxpbmsgcmVnaXN0ZXIJCSovCisxOgorCWx3eglyMCwgMChyNykKKwlzdHcJcjAsIDAocjkpCisJYWRkaQlyNywgcjcsIDQKKwlhZGRpCXI5LCByOSwgNAorCWNtcGx3CTAsIHI3LCByOAorCWJuZQkxYgorCisJLyoKKwkgKiByZWxvY2F0ZSBgaGRscicgYW5kIGBpbnRfcmV0dXJuJyBlbnRyaWVzCisJICovCisJbGkJcjcsIC5MX01hY2hpbmVDaGVjayAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJbGkJcjgsIEFsaWdubWVudCAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisyOgorCWJsCXRyYXBfcmVsb2MKKwlhZGRpCXI3LCByNywgMHgxMDAJCS8qIG5leHQgZXhjZXB0aW9uIHZlY3RvcgkqLworCWNtcGx3CTAsIHI3LCByOAorCWJsdAkyYgorCisJbGkJcjcsIC5MX0FsaWdubWVudCAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJYmwJdHJhcF9yZWxvYworCisJbGkJcjcsIC5MX1Byb2dyYW1DaGVjayAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJYmwJdHJhcF9yZWxvYworCisJbGkJcjcsIC5MX0ZQVW5hdmFpbGFibGUgLSBfc3RhcnQgKyBFWENfT0ZGX1NZU19SRVNFVAorCWxpCXI4LCBTeXN0ZW1DYWxsIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQKKzM6CisJYmwJdHJhcF9yZWxvYworCWFkZGkJcjcsIHI3LCAweDEwMAkJLyogbmV4dCBleGNlcHRpb24gdmVjdG9yCSovCisJY21wbHcJMCwgcjcsIHI4CisJYmx0CTNiCisKKwlsaQlyNywgLkxfU2luZ2xlU3RlcCAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJbGkJcjgsIF9lbmRfb2ZfdmVjdG9ycyAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCis0OgorCWJsCXRyYXBfcmVsb2MKKwlhZGRpCXI3LCByNywgMHgxMDAJCS8qIG5leHQgZXhjZXB0aW9uIHZlY3RvcgkqLworCWNtcGx3CTAsIHI3LCByOAorCWJsdAk0YgorCisJLyogZW5hYmxlIGV4ZWNwdGlvbnMgZnJvbSBSQU0gdmVjdG9ycyAqLworCW1mbXNyCXI3CisJbGkJcjgsTVNSX0lQCisJYW5kYwlyNyxyNyxyOAorCW10bXNyCXI3CisKKwltdGxyCXI0CQkJLyogcmVzdG9yZSBsaW5rIHJlZ2lzdGVyCSovCisJYmxyCisKKwkvKgorCSAqIEZ1bmN0aW9uOiByZWxvY2F0ZSBlbnRyaWVzIGZvciBvbmUgZXhjZXB0aW9uIHZlY3RvcgorCSAqLwordHJhcF9yZWxvYzoKKwlsd3oJcjAsIDAocjcpCQkvKiBoZGxyIC4uLgkJCSovCisJYWRkCXIwLCByMCwgcjMJCS8qICAuLi4gKz0gZGVzdF9hZGRyCQkqLworCXN0dwlyMCwgMChyNykKKworCWx3eglyMCwgNChyNykJCS8qIGludF9yZXR1cm4gLi4uCQkqLworCWFkZAlyMCwgcjAsIHIzCQkvKiAgLi4uICs9IGRlc3RfYWRkcgkJKi8KKwlzdHcJcjAsIDQocjcpCisKKwlzeW5jCisJaXN5bmMKKworCWJscgorCisuZ2xvYmwgZW5hYmxlX2V4dF9hZGRyCitlbmFibGVfZXh0X2FkZHI6CisJbWZzcHIJcjAsIEhJRDAKKwlsaXMgICAgIHIwLCAoSElEMF9ISUdIX0JBVF9FTiB8IEhJRDBfWEJTRU4gfCBISUQwX1hBRU4pQGgKKwlvcmkJcjAsIHIwLCAoSElEMF9ISUdIX0JBVF9FTiB8IEhJRDBfWEJTRU4gfCBISUQwX1hBRU4pQGwKKwltdHNwciAgIEhJRDAsIHIwCisJc3luYworCWlzeW5jCisJYmxyCisKKyNpZiAoQ0ZHX0NDU1JCQVJfREVGQVVMVCAhPSBDRkdfQ0NTUkJBUikKKy5nbG9ibCBzZXR1cF9jY3NyYmFyCitzZXR1cF9jY3NyYmFyOgorCS8qIFNwZWNpYWwgc2VxdWVuY2UgbmVlZGVkIHRvIHVwZGF0ZSBDQ1NSQkFSIGl0c2VsZiAqLworCWxpcwlyNCwgQ0ZHX0NDU1JCQVJfREVGQVVMVEBoCisJb3JpCXI0LCByNCwgQ0ZHX0NDU1JCQVJfREVGQVVMVEBsCisKKwlsaXMgICAJcjUsIENGR19DQ1NSQkFSQGgKKwlvcmkgICAJcjUsIHI1LCBDRkdfQ0NTUkJBUkBsCisJc3J3aQlyNixyNSwxMgorCXN0dwlyNiwgMChyNCkKKwlpc3luYworCisJbGlzCXI1LCAweGZmZmYKKwlvcmkJcjUscjUsMHhmMDAwCisJbHd6CXI1LCAwKHI1KQorCWlzeW5jCisKKwlsaXMJcjMsIENGR19DQ1NSQkFSQGgKKwlsd3oJcjUsIENGR19DQ1NSQkFSQGwocjMpCisJaXN5bmMKKworCWJscgorI2VuZGlmCisKKyNpZmRlZiBDRkdfSU5JVF9SQU1fTE9DSworbG9ja19yYW1faW5fY2FjaGU6CisJLyogQWxsb2NhdGUgSW5pdGlhbCBSQU0gaW4gZGF0YSBjYWNoZS4KKwkgKi8KKwlsaXMJcjMsIChDRkdfSU5JVF9SQU1fQUREUiAmIH4zMSlAaAorCW9yaQlyMywgcjMsIChDRkdfSU5JVF9SQU1fQUREUiAmIH4zMSlAbAorCWxpCXIyLCAoKENGR19JTklUX1JBTV9FTkQgJiB+MzEpICsgXAorCQkgICAgIChDRkdfSU5JVF9SQU1fQUREUiAmIDMxKSArIDMxKSAvIDMyCisJbXRjdHIJcjIKKzE6CisJZGNieglyMCwgcjMKKwlhZGRpCXIzLCByMywgMzIKKwliZG56CTFiCisjaWYgMQorLyogTG9jayB0aGUgZGF0YSBjYWNoZSAqLworCW1mc3ByCXIwLCBISUQwCisJb3JpCXIwLCByMCwgMHgxMDAwCisJc3luYworCW10c3ByCUhJRDAsIHIwCisJc3luYworCWJscgorI2VuZGlmCisjaWYgMAorCS8qIExvY2sgdGhlIGZpcnN0IHdheSBvZiB0aGUgZGF0YSBjYWNoZSAqLworCW1mc3ByCXIwLCBMRFNUQ1IKKwlvcmkJcjAsIHIwLCAweDAwODAKKyNpZiBkZWZpbmVkKENPTkZJR19BTFRJVkVDKQorCWRzc2FsbAorI2VuZGlmCisJc3luYworCW10c3ByCUxEU1RDUiwgcjAKKwlzeW5jCisJaXN5bmMKKwlibHIKKyNlbmRpZgorCisuZ2xvYmwgdW5sb2NrX3JhbV9pbl9jYWNoZQordW5sb2NrX3JhbV9pbl9jYWNoZToKKwkvKiBpbnZhbGlkYXRlIHRoZSBJTklUX1JBTSBzZWN0aW9uICovCisJbGlzCXIzLCAoQ0ZHX0lOSVRfUkFNX0FERFIgJiB+MzEpQGgKKwlvcmkJcjMsIHIzLCAoQ0ZHX0lOSVRfUkFNX0FERFIgJiB+MzEpQGwKKwlsaQlyMiwgKChDRkdfSU5JVF9SQU1fRU5EICYgfjMxKSArIFwKKwkJICAgICAoQ0ZHX0lOSVRfUkFNX0FERFIgJiAzMSkgKyAzMSkgLyAzMgorCW10Y3RyCXIyCisxOglpY2JpCXIwLCByMworCWFkZGkJcjMsIHIzLCAzMgorCWJkbnoJMWIKKwlzeW5jCQkJLyogV2FpdCBmb3IgYWxsIGljYmkgdG8gY29tcGxldGUgb24gYnVzCSovCisJaXN5bmMKKyNpZiAxCisvKiBVbmxvY2sgdGhlIGRhdGEgY2FjaGUgYW5kIGludmFsaWRhdGUgaXQgKi8KKwltZnNwciAgIHIwLCBISUQwCisJbGkgICAgICByMywweDEwMDAKKwlhbmRjICAgIHIwLHIwLHIzCisJbGkJcjMsMHgwNDAwCisJb3IJcjAscjAscjMKKwlzeW5jCisJbXRzcHIgICBISUQwLCByMAorCXN5bmMKKwlibHIKKyNlbmRpZgorI2lmIDAKKwkvKiBVbmxvY2sgdGhlIGZpcnN0IHdheSBvZiB0aGUgZGF0YSBjYWNoZSAqLworCW1mc3ByICAgcjAsIExEU1RDUgorCWxpICAgICAgcjMsMHgwMDgwCisJYW5kYyAgICByMCxyMCxyMworI2lmZGVmIENPTkZJR19BTFRJVkVDCisJZHNzYWxsCisjZW5kaWYKKwlzeW5jCisJbXRzcHIgICBMRFNUQ1IsIHIwCisJc3luYworCWlzeW5jCisJbGkJcjMsMHgwNDAwCisJb3IJcjAscjAscjMKKwlzeW5jCisJbXRzcHIgICBISUQwLCByMAorCXN5bmMKKwlibHIKKyNlbmRpZgorI2VuZGlmCisKKy8qIElmIHRoaXMgaXMgYSBtdWx0aS1jcHUgc3lzdGVtIHRoZW4gd2UgbmVlZCB0byBoYW5kbGUgdGhlCisgKiAybmQgY3B1LiAgVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgMm5kIGNwdSBpcyBiZWluZworICogaGVsZCBpbiBib290IGhvbGRvZmYgbW9kZSB1bnRpbCB0aGUgMXN0IGNwdSB1bmxvY2tzIGl0CisgKiBmcm9tIExpbnV4LiAgV2UnbGwgZG8gc29tZSBiYXNpYyBjcHUgaW5pdCBhbmQgdGhlbiBwYXNzCisgKiBpdCB0byB0aGUgTGludXggUmVzZXQgVmVjdG9yLgorICogU3JpOiAgTXVjaCBvZiB0aGlzIGluaXRpYWxpemF0aW9uIGlzIG5vdCByZXF1aXJlZC4gTGludXgKKyAqIHJld3JpdGVzIHRoZSBiYXRzLCBhbmQgdGhlIHNwcnMgYW5kIGFsc28gZW5hYmxlcyB0aGUgTDEgY2FjaGUuCisgKi8KKyNpZiAoQ09ORklHX05VTV9DUFVTID4gMSkKKy5nbG9ibCBzZWNvbmRhcnlfY3B1X3NldHVwCitzZWNvbmRhcnlfY3B1X3NldHVwOgorCS8qIERvIG9ubHkgY29yZSBzZXR1cCBvbiBhbGwgY29yZXMgZXhjZXB0IGNwdTAgKi8KKwlibAlpbnZhbGlkYXRlX2JhdHMKKwlzeW5jCisJYmwJZW5hYmxlX2V4dF9hZGRyCisKKyNpZmRlZiBDRkdfTDIKKwkvKiBpbml0IHRoZSBMMiBjYWNoZSAqLworCWFkZGlzCXIzLCByMCwgTDJfSU5JVEBoCisJb3JpCXIzLCByMywgTDJfSU5JVEBsCisJc3luYworCW10c3ByCWwyY3IsIHIzCisjaWZkZWYgQ09ORklHX0FMVElWRUMKKwlkc3NhbGwKKyNlbmRpZgorCS8qIGludmFsaWRhdGUgdGhlIEwyIGNhY2hlICovCisJYmwJbDJjYWNoZV9pbnZhbGlkYXRlCisJc3luYworI2VuZGlmCisKKwkvKiBlbmFibGUgYW5kIGludmFsaWRhdGUgdGhlIGRhdGEgY2FjaGUgKi8KKwlibAlkY2FjaGVfZW5hYmxlCisJc3luYworCisgICAgICAgIC8qIGVuYWJsZSBhbmQgaW52YWxpZGF0ZSB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUqLworICAgICAgICBibCAgICAgIGljYWNoZV9lbmFibGUKKyAgICAgICAgc3luYworCisgICAgICAgIC8qIFRCRU4gIGluIEhJRDAgKi8KKwltZnNwcglyNCwgSElEMAorICAgICAgICBvcmlzICAgIHI0LCByNCwgMHgwNDAwCisgICAgICAgIG10c3ByICAgSElEMCwgcjQKKyAgICAgICAgc3luYworICAgICAgICBpc3luYworCisgICAgICAgIC8qU1lOQ0JFfEFCRSBpbiBISUQxKi8KKyAgICAgICAgbWZzcHIJcjQsIEhJRDEKKyAgICAgICAgb3JpICAgICByNCwgcjQsIDB4MEMwMAorICAgICAgICBtdHNwciAgIEhJRDEsIHI0CisgICAgICAgIHN5bmMKKyAgICAgICAgaXN5bmMKKworICAgICAgICBsaXMJcjMsIENPTkZJR19MSU5VWF9SRVNFVF9WRUNAaAorCW9yaQlyMywgcjMsIENPTkZJR19MSU5VWF9SRVNFVF9WRUNAbAorCW10bHIgICAgcjMKKwlibHIKKworCS8qIE5ldmVyIFJldHVybnMsIFJ1bm5pbmcgaW4gTGludXggTm93ICovCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg2eHgvdHJhcHMuYyBiL2NwdS9tcGM4Nnh4L3RyYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhMTRlNQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4Nnh4L3RyYXBzLmMKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiAgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCisgKgorICogTW9kaWZpZWQgYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkKKyAqIGFuZCBQYXVsIE1hY2tlcnJhcyAocGF1bHVzQGNzLmFudS5lZHUuYXUpCisgKgorICogKEMpIENvcHlyaWdodCAyMDAwCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBoYXJkd2FyZSBleGNlcHRpb25zCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQoraW50ICgqZGVidWdnZXJfZXhjZXB0aW9uX2hhbmRsZXIpKHN0cnVjdCBwdF9yZWdzICopID0gMDsKKyNlbmRpZgorCisvKiBSZXR1cm5zIDAgaWYgZXhjZXB0aW9uIG5vdCBmb3VuZCBhbmQgZml4dXAgb3RoZXJ3aXNlLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHNlYXJjaF9leGNlcHRpb25fdGFibGUodW5zaWduZWQgbG9uZyk7CisKKyNkZWZpbmUgRU5EX09GX01FTSAoZ2QtPmJkLT5iaV9tZW1zdGFydCArIGdkLT5iZC0+YmlfbWVtc2l6ZSkKKworLyoKKyAqIFRyYXAgJiBFeGNlcHRpb24gc3VwcG9ydAorICovCisKK3ZvaWQKK3ByaW50X2JhY2t0cmFjZSh1bnNpZ25lZCBsb25nICpzcCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWludCBjbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgaTsKKworCXByaW50ZigiQ2FsbCBiYWNrdHJhY2U6ICIpOworCXdoaWxlIChzcCkgeworCQlpZiAoKHVpbnQpIHNwID4gRU5EX09GX01FTSkKKwkJCWJyZWFrOworCisJCWkgPSBzcFsxXTsKKwkJaWYgKGNudCsrICUgNyA9PSAwKQorCQkJcHJpbnRmKCJcbiIpOworCQlwcmludGYoIiUwOGxYICIsIGkpOworCQlpZiAoY250ID4gMzIpCisJCQlicmVhazsKKwkJc3AgPSAodW5zaWduZWQgbG9uZyAqKSpzcDsKKwl9CisJcHJpbnRmKCJcbiIpOworfQorCit2b2lkCitzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGk7CisKKwlwcmludGYoIk5JUDogJTA4bFggWEVSOiAlMDhsWCBMUjogJTA4bFggUkVHUzoiCisJICAgICAgICIgJXAgVFJBUDogJTA0bHggREFSOiAlMDhsWFxuIiwKKwkgICAgICAgcmVncy0+bmlwLCByZWdzLT54ZXIsIHJlZ3MtPmxpbmssIHJlZ3MsIHJlZ3MtPnRyYXAsIHJlZ3MtPmRhcik7CisJcHJpbnRmKCJNU1I6ICUwOGx4IEVFOiAlMDF4IFBSOiAlMDF4IEZQOiIKKwkgICAgICAgIiAlMDF4IE1FOiAlMDF4IElSL0RSOiAlMDF4JTAxeFxuIiwKKwkgICAgICAgcmVncy0+bXNyLCByZWdzLT5tc3IgJiBNU1JfRUUgPyAxIDogMCwKKwkgICAgICAgcmVncy0+bXNyICYgTVNSX1BSID8gMSA6IDAsIHJlZ3MtPm1zciAmIE1TUl9GUCA/IDEgOiAwLAorCSAgICAgICByZWdzLT5tc3IgJiBNU1JfTUUgPyAxIDogMCwgcmVncy0+bXNyICYgTVNSX0lSID8gMSA6IDAsCisJICAgICAgIHJlZ3MtPm1zciAmIE1TUl9EUiA/IDEgOiAwKTsKKworCXByaW50ZigiXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoKGkgJSA4KSA9PSAwKSB7CisJCQlwcmludGYoIkdQUiUwMmQ6ICIsIGkpOworCQl9CisKKwkJcHJpbnRmKCIlMDhsWCAiLCByZWdzLT5ncHJbaV0pOworCQlpZiAoKGkgJSA4KSA9PSA3KSB7CisJCQlwcmludGYoIlxuIik7CisJCX0KKwl9Cit9CisKKwordm9pZAorX2V4Y2VwdGlvbihpbnQgc2lnbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXNob3dfcmVncyhyZWdzKTsKKwlwcmludF9iYWNrdHJhY2UoKHVuc2lnbmVkIGxvbmcgKilyZWdzLT5ncHJbMV0pOworCXBhbmljKCJFeGNlcHRpb24gaW4ga2VybmVsIHBjICVseCBzaWduYWwgJWQiLCByZWdzLT5uaXAsIHNpZ25yKTsKK30KKwordm9pZAorTWFjaGluZUNoZWNrRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgZml4dXA7CisKKwkvKiBQcm9iaW5nIFBDSSB1c2luZyBjb25maWcgY3ljbGVzIGNhdXNlIHRoaXMgZXhjZXB0aW9uCisJICogd2hlbiBhIGRldmljZSBpcyBub3QgcHJlc2VudC4gIENhdGNoIGl0IGFuZCByZXR1cm4gdG8KKwkgKiB0aGUgUENJIGV4Y2VwdGlvbiBoYW5kbGVyLgorCSAqLworCWlmICgoZml4dXAgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlKHJlZ3MtPm5pcCkpICE9IDApIHsKKwkJcmVncy0+bmlwID0gZml4dXA7CisJCXJldHVybjsKKwl9CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorCWlmIChkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlciAmJiAoKmRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyKSAocmVncykpCisJCXJldHVybjsKKyNlbmRpZgorCisJcHJpbnRmKCJNYWNoaW5lIGNoZWNrIGluIGtlcm5lbCBtb2RlLlxuIik7CisJcHJpbnRmKCJDYXVzZWQgYnkgKGZyb20gbXNyKTogIik7CisJcHJpbnRmKCJyZWdzICVwICIsIHJlZ3MpOworCXN3aXRjaCAocmVncy0+bXNyICYgMHgwMDBGMDAwMCkgeworCWNhc2UgKDB4ODAwMDAwMDAgPj4gMTIpOgorCQlwcmludGYoIk1hY2hpbmUgY2hlY2sgc2lnbmFsIC0gcHJvYmFibHkgZHVlIHRvIG1tIGZhdWx0XG4iCisJCSAgICAgICAid2l0aCBtbXUgb2ZmXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAoMHg4MDAwMDAwMCA+PiAxMyk6CisJCXByaW50ZigiVHJhbnNmZXIgZXJyb3IgYWNrIHNpZ25hbFxuIik7CisJCWJyZWFrOworCWNhc2UgKDB4ODAwMDAwMDAgPj4gMTQpOgorCQlwcmludGYoIkRhdGEgcGFyaXR5IHNpZ25hbFxuIik7CisJCWJyZWFrOworCWNhc2UgKDB4ODAwMDAwMDAgPj4gMTUpOgorCQlwcmludGYoIkFkZHJlc3MgcGFyaXR5IHNpZ25hbFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiVW5rbm93biB2YWx1ZXMgaW4gbXNyXG4iKTsKKwl9CisJc2hvd19yZWdzKHJlZ3MpOworCXByaW50X2JhY2t0cmFjZSgodW5zaWduZWQgbG9uZyAqKXJlZ3MtPmdwclsxXSk7CisJcGFuaWMoIm1hY2hpbmUgY2hlY2siKTsKK30KKwordm9pZAorQWxpZ25tZW50RXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisJaWYgKGRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyICYmICgqZGVidWdnZXJfZXhjZXB0aW9uX2hhbmRsZXIpIChyZWdzKSkKKwkJcmV0dXJuOworI2VuZGlmCisJc2hvd19yZWdzKHJlZ3MpOworCXByaW50X2JhY2t0cmFjZSgodW5zaWduZWQgbG9uZyAqKXJlZ3MtPmdwclsxXSk7CisJcGFuaWMoIkFsaWdubWVudCBFeGNlcHRpb24iKTsKK30KKwordm9pZAorUHJvZ3JhbUNoZWNrRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGNoYXIgKnAgPSByZWdzID8gKHVuc2lnbmVkIGNoYXIgKikocmVncy0+bmlwKSA6IE5VTEw7CisJaW50IGksIGo7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorCWlmIChkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlciAmJiAoKmRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyKSAocmVncykpCisJCXJldHVybjsKKyNlbmRpZgorCXNob3dfcmVncyhyZWdzKTsKKworCXAgPSAodW5zaWduZWQgY2hhciAqKSgodW5zaWduZWQgbG9uZylwICYgMHhGRkZGRkZFMCk7CisJcCAtPSAzMjsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDE2KSB7CisJCXByaW50ZigiJTA4eDogIiwgKHVuc2lnbmVkIGludClwICsgaSk7CisJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7CisJCQlwcmludGYoIiUwMnggIiwgcFtpICsgal0pOworCQl9CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwlwcmludF9iYWNrdHJhY2UoKHVuc2lnbmVkIGxvbmcgKilyZWdzLT5ncHJbMV0pOworCXBhbmljKCJQcm9ncmFtIENoZWNrIEV4Y2VwdGlvbiIpOworfQorCit2b2lkCitTb2Z0RW11RXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisJaWYgKGRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyICYmICgqZGVidWdnZXJfZXhjZXB0aW9uX2hhbmRsZXIpIChyZWdzKSkKKwkJcmV0dXJuOworI2VuZGlmCisJc2hvd19yZWdzKHJlZ3MpOworCXByaW50X2JhY2t0cmFjZSgodW5zaWduZWQgbG9uZyAqKXJlZ3MtPmdwclsxXSk7CisJcGFuaWMoIlNvZnR3YXJlIEVtdWxhdGlvbiBFeGNlcHRpb24iKTsKK30KKwordm9pZAorVW5rbm93bkV4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorCWlmIChkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlciAmJiAoKmRlYnVnZ2VyX2V4Y2VwdGlvbl9oYW5kbGVyKSAocmVncykpCisJCXJldHVybjsKKyNlbmRpZgorCXByaW50ZigiQmFkIHRyYXAgYXQgUEM6ICVseCwgU1I6ICVseCwgdmVjdG9yPSVseFxuIiwKKwkgICAgICAgcmVncy0+bmlwLCByZWdzLT5tc3IsIHJlZ3MtPnRyYXApOworCV9leGNlcHRpb24oMCwgcmVncyk7Cit9CisKKy8qCisgKiBQcm9iZSBhbiBhZGRyZXNzIGJ5IHJlYWRpbmcuCisgKiBJZiBub3QgcHJlc2VudCwgcmV0dXJuIC0xLAorICogb3RoZXJ3aXNlIHJldHVybiAwLgorICovCitpbnQKK2FkZHJfcHJvYmUodWludCAqYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvTWFrZWZpbGUgYi9jcHUvbXBjOHh4L01ha2VmaWxlCmluZGV4IGRlNzVmYWQuLjY0NTFlMDUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvTWFrZWZpbGUKKysrIGIvY3B1L21wYzh4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNSwyNSArMjUsMjkgQEAKIAogIyBDRkxBR1MgKz0gLURFVF9ERUJVRwogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vIGtnZGIubwotT0JKUwk9IGJlZGJ1Z184NjAubyBjb21tcHJvYy5vIGNwdS5vIGNwdV9pbml0Lm8JXAorQ09CSlMJPSBiZWRidWdfODYwLm8gY29tbXByb2MubyBjcHUubyBjcHVfaW5pdC5vCVwKIAkgIGZlYy5vIGkyYy5vIGludGVycnVwdHMubyBsY2QubyBzY2MubwkJXAogCSAgc2VyaWFsLm8gc3BlZWQubyBzcGkubyBcCiAJICB0cmFwcy5vIHVwYXRjaC5vIHZpZGVvLm8KIFNPQkpTCT0gcGxwcmNyX3dyaXRlLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCiAKLSQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpIGtnZGIubworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKG9iailrZ2RiLm8KIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpICQoU09CSlM6Lm89LlMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpICQoU09CSlM6Lm89LlMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9jcHVfaW5pdC5jIGIvY3B1L21wYzh4eC9jcHVfaW5pdC5jCmluZGV4IDFhNzExMWYuLmM3OWU1NzggMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvY3B1X2luaXQuYworKysgYi9jcHUvbXBjOHh4L2NwdV9pbml0LmMKQEAgLTE2MSw2ICsxNjEsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX1JNVSkJCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKQl8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfUlBYTElURSkJfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1NQQzE5MjApCXx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TUEQ4MjNUUykKIAogCW1lbWN0bC0+bWVtY19icjAgPSBDRkdfQlIwX1BSRUxJTTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvZmVjLmMgYi9jcHUvbXBjOHh4L2ZlYy5jCmluZGV4IDYwMDY0NzguLjZkMjc1NWUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvZmVjLmMKKysrIGIvY3B1L21wYzh4eC9mZWMuYwpAQCAtMzk2LDggKzM5NiwxMCBAQAogCSAqICogdG8gMi41IE1Iei4KIAkgKiAqIFRoaXMgTURDIGZyZXF1ZW5jeSBpcyBlcXVhbCB0byBzeXN0ZW0gY2xvY2sgLyAoMiAqIE1JSV9TUEVFRCkuCiAJICogKiBUaGVuIE1JSV9TUEVFRCA9IHN5c3RlbV9jbG9jayAvIDIgKiAyLDUgTWh6LgorCSAqCisJICogQWxsIE1JSSBjb25maWd1cmF0aW9uIGlzIGRvbmUgdmlhIEZFQzEgcmVnaXN0ZXJzOgogCSAqLwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSAoKGJkLT5iaV9pbnRmcmVxICsgNDk5OTk5OSkgLyA1MDAwMDAwKSA8PCAxOworCWltbXItPmltX2NwbS5jcF9mZWMxLmZlY19taWlfc3BlZWQgPSAoKGJkLT5iaV9pbnRmcmVxICsgNDk5OTk5OSkgLyA1MDAwMDAwKSA8PCAxOwogCiAjaWYgZGVmaW5lZChDT05GSUdfTkVUVEEpIHx8IGRlZmluZWQoQ09ORklHX05FVFBIT05FKSB8fCBkZWZpbmVkKENPTkZJR19ORVRUQTIpCiAJLyogb3VyIFBIWXMgYXJlIHRoZSBsaW1pdCBhdCAyLjUgTUh6ICovCkBAIC01MDgsOCArNTEwLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4ODVfRkFNSUxZKSAvKiBNUEM4N3gvODh4IGhhdmUgZ290IDIgRkVDcyBhbmQgZGlmZmVyZW50IHBpbm91dCAqLwogCiAjaWYgIWRlZmluZWQoQ09ORklHX1JNSUkpCi0KLSN3YXJuaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpcyBub3QgdGVzdGVkOyBwbGVhc2UgcmVwb3J0IGlmIGl0IHdvcmtzCiAJCWltbXItPmltX2NwbS5jcF9wZXBhciAgICAgfD0gIDB4MDAwM2ZmZmM7CiAJCWltbXItPmltX2NwbS5jcF9wZWRpciAgICAgfD0gIDB4MDAwM2ZmZmM7CiAJCWltbXItPmltX2NwbS5jcF9wZXNvICAgICAgJj0gfjB4MDAwMDg3ZmM7CkBAIC04MjIsNiArODIyLDcgQEAKICNkZWZpbmUgUEhZX0lEX0xTSTgwMjI1CQkweDAwMTZmODcwCS8qIExTSSA4MDIyNSAqLwogI2RlZmluZSBQSFlfSURfTFNJODAyMjVCCTB4MDAxNmY4ODAJLyogTFNJIDgwMjI1L0IgKi8KICNkZWZpbmUgUEhZX0lEX0RNOTE2MQkJMHgwMTgxQjg4MAkvKiBEYXZpY29tIERNOTE2MSAqLworI2RlZmluZSBQSFlfSURfS1NNODk5NU0JCTB4MDAyMjE0NTAJLyogTUlDUkVMIEtTODk5NU1BICovCiAKIC8qIHNlbmQgY29tbWFuZCB0byBwaHkgdXNpbmcgbWlpLCB3YWl0IGZvciByZXN1bHQgKi8KIHN0YXRpYyB1aW50CkBAIC05MDcsNiArOTA4LDkgQEAKIAkJCQljYXNlIFBIWV9JRF9ETTkxNjE6CiAJCQkJCXByaW50ZigiRGF2aWNvbSBETTkxNjFcbiIpOwogCQkJCQlicmVhazsKKwkJCQljYXNlIFBIWV9JRF9LU004OTk1TToKKwkJCQkJcHJpbnRmKCJNSUNSRUwgS1M4OTk1TVxuIik7CisJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6CiAJCQkJCXByaW50ZigiMHglMDh4XG4iLCBwaHl0eXBlKTsKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3NlcmlhbC5jIGIvY3B1L21wYzh4eC9zZXJpYWwuYwppbmRleCAyNmE4MmNjLi44YWU1ODRmIDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L3NlcmlhbC5jCisrKyBiL2NwdS9tcGM4eHgvc2VyaWFsLmMKQEAgLTIyNyw5ICsyMjcsMTIgQEAKIAlzcC0+c21jX3NtY20gPSAwOwogCXNwLT5zbWNfc21jZSA9IDB4ZmY7CiAKLQkvKiBTZXQgdXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IuCi0JKi8KKyNpZmRlZiBDRkdfU1BDMTkyMF9TTUMxX0NMSzQgLyogY2xvY2sgc291cmNlIGlzIFBMRCAqLworCSooKHZvbGF0aWxlIHVjaGFyICopIENGR19TUEMxOTIwX1BMRF9CQVNFKzYpID0gMHhmZjsKKyNlbHNlCisJLyogU2V0IHVwIHRoZSBiYXVkIHJhdGUgZ2VuZXJhdG9yICovCiAJc21jX3NldGJyZyAoKTsKKyNlbmRpZgogCiAJLyogTWFrZSB0aGUgZmlyc3QgYnVmZmVyIHRoZSBvbmx5IGJ1ZmZlci4KIAkqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9zcGVlZC5jIGIvY3B1L21wYzh4eC9zcGVlZC5jCmluZGV4IDU3ZjkxYzAuLjEwMWQ1ZjkgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvc3BlZWQuYworKysgYi9jcHUvbXBjOHh4L3NwZWVkLmMKQEAgLTI1OSw3ICsyNTksMTEgQEAKIAkgKi8KIAlzY2NyX3JlZyA9IGltbXItPmltX2Nsa3JzdC5jYXJfc2NjcjsKIAlzY2NyX3JlZyAmPSB+U0NDUl9FQkRGMTE7CisjaWYgZGVmaW5lZChDT05GSUdfVFFNODg1RCkKKwlpZiAoZ2QtPmNwdV9jbGsgPD0gODAwMDAwMDApIHsKKyNlbHNlCiAJaWYgKGdkLT5jcHVfY2xrIDw9IDY2MDAwMDAwKSB7CisjZW5kaWYKIAkJc2Njcl9yZWcgfD0gU0NDUl9FQkRGMDA7CS8qIGJ1cyBkaXZpc2lvbiBmYWN0b3IgPSAxICovCiAJCWdkLT5idXNfY2xrID0gZ2QtPmNwdV9jbGs7CiAJfSBlbHNlIHsKQEAgLTM2MCw3ICszNjQsOCBAQAogCiAjZW5kaWYgLyogQ09ORklHXzh4eF9DUFVDTEtfREVGQVVMVCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfVFFNOHh4TCkgJiYgIWRlZmluZWQoQ09ORklHX1RRTTg2Nk0pCisjaWYgZGVmaW5lZChDT05GSUdfVFFNOHh4TCkgJiYgIWRlZmluZWQoQ09ORklHX1RRTTg2Nk0pIFwKKyAgICAmJiAhZGVmaW5lZChDT05GSUdfVFFNODg1RCkKIC8qCiAgKiBBZGp1c3Qgc2RyYW0gcmVmcmVzaCByYXRlIHRvIGFjdHVhbCBDUFUgY2xvY2sKICAqIGFuZCBzZXQgdGltZWJhc2Ugc291cmNlIGFjY29yZGluZyB0byBhY3R1YWwgQ1BVIGNsb2NrCkBAIC0zODQsNiArMzg5LDYgQEAKIAogCXJldHVybiAoMCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1RRTTh4eEwvTSwgIVRRTTg2Nk0gKi8KKyNlbmRpZiAvKiBDT05GSUdfVFFNOHh4TC9NLCAhVFFNODY2TSwgIVRRTTg4NUQgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvY3B1L25pb3MvTWFrZWZpbGUgYi9jcHUvbmlvcy9NYWtlZmlsZQppbmRleCA3ODU1MzI1Li5jZGFiN2IwIDEwMDY0NAotLS0gYS9jcHUvbmlvcy9NYWtlZmlsZQorKysgYi9jcHUvbmlvcy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMiArMjMsMjYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLUFPQkpTCT0gdHJhcHMubwotT0JKUwk9IGNwdS5vIGludGVycnVwdHMubyBzZXJpYWwubyBhc21pLm8gc3BpLm8KK1NPQkpTCT0gdHJhcHMubworQ09CSlMJPSBjcHUubyBpbnRlcnJ1cHRzLm8gc2VyaWFsLm8gYXNtaS5vIHNwaS5vCiAKLWFsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQogCi0kKExJQik6CSQoT0JKUykgJChBT0JKUykKLQkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKEFPQkpTKQorYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6IE1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgJChBT0JKUzoubz0uUykKLQkkKENDKSAtTSAkKENGTEFHUykgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSAkKEFPQkpTOi5vPS5TKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9uaW9zMi9NYWtlZmlsZSBiL2NwdS9uaW9zMi9NYWtlZmlsZQppbmRleCAxMWZkYTUwLi5mOTAzMTI5IDEwMDY0NAotLS0gYS9jcHUvbmlvczIvTWFrZWZpbGUKKysrIGIvY3B1L25pb3MyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIyICsyMywyNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChDUFUpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKIFNUQVJUCT0gc3RhcnQubwotQU9CSlMJPSBleGNlcHRpb25zLm8KLU9CSlMJPSBjcHUubyBpbnRlcnJ1cHRzLm8gc2VyaWFsLm8gc3lzaWQubyB0cmFwcy5vIGVwY3MubworU09CSlMJPSBleGNlcHRpb25zLm8KK0NPQkpTCT0gY3B1Lm8gaW50ZXJydXB0cy5vIHNlcmlhbC5vIHN5c2lkLm8gdHJhcHMubyBlcGNzLm8KIAotYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQorU1JDUwk6PSAkKFNUQVJUOi5vPS5TKSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCitTVEFSVAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTVEFSVCkpCiAKLSQoTElCKToJJChPQkpTKSAkKEFPQkpTKQotCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoQU9CSlMpCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDogTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChPQkpTOi5vPS5jKSAkKEFPQkpTOi5vPS5TKQotCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpICQoQU9CSlM6Lm89LlMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80MDVncF9wY2kuYyBiL2NwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKaW5kZXggZmFkODk1Yi4uMDMxMjhkMyAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80MDVncF9wY2kuYworKysgYi9jcHUvcHBjNHh4LzQwNWdwX3BjaS5jCkBAIC0zMTUsNyArMzE1LDYgQEAKICNpZmRlZiBDT05GSUdfUENJX1NDQU5fU0hPVwogCQlwcmludGYoIlBDSTogICBCdXMgRGV2IFZlbklkIERldklkIENsYXNzIEludFxuIik7CiAjZW5kaWYKLQogCQlob3NlLT5sYXN0X2J1c25vID0gcGNpX2hvc2Vfc2Nhbihob3NlKTsKIAl9CiAjZW5kaWYgIC8qIENPTkZJR19QQ0lfUE5QICovCkBAIC00MzgsNyArNDM3LDcgQEAKIAkgKiBUaGUgUENJIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGVuYWJsZSBiaXQgbXVzdCBiZSBzZXQgLi4uIGlmIG5vdCBhYm9ydAogCSAqIHBjaSBzZXR1cCBzaW5jZSB1cGRhdGluZyB0aGUgYml0IHJlcXVpcmVzIGNoaXAgcmVzZXQuCiAJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKQogCXVuc2lnbmVkIGxvbmcgc3RyYXA7CiAKIAltZnNkcihzZHJfc2RzdHAxLHN0cmFwKTsKQEAgLTQ2NSwxNyArNDY0LDMwIEBACiAJaG9zZS0+Zmlyc3RfYnVzbm8gPSAwOwogCWhvc2UtPmxhc3RfYnVzbm8gPSAweGZmOwogCisJLyogUENJIEkvTyBzcGFjZSAqLwogCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyByZWdfbnVtKyssCiAJCSAgICAgICAweDAwMDAwMDAwLAogCQkgICAgICAgUENJWDBfSU9CQVNFLAogCQkgICAgICAgMHgxMDAwMCwKIAkJICAgICAgIFBDSV9SRUdJT05fSU8pOwogCisJLyogUENJIG1lbW9yeSBzcGFjZSAqLwogCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyByZWdfbnVtKyssCiAJCSAgICAgICBDRkdfUENJX1RBUkdCQVNFLAogCQkgICAgICAgQ0ZHX1BDSV9NRU1CQVNFLAogCQkgICAgICAgMHgxMDAwMDAwMCwKIAkJICAgICAgIFBDSV9SRUdJT05fTUVNICk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0lfU1lTX01FTV9CVVMpICYmIGRlZmluZWQoQ09ORklHX1BDSV9TWVNfTUVNX1BIWVMpICYmIFwKKwlkZWZpbmVkKENPTkZJR19QQ0lfU1lTX01FTV9TSVpFKQorCS8qIFN5c3RlbSBtZW1vcnkgc3BhY2UgKi8KKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgcmVnX251bSsrLAorCQkgICAgICAgQ09ORklHX1BDSV9TWVNfTUVNX0JVUywKKwkJICAgICAgIENPTkZJR19QQ0lfU1lTX01FTV9QSFlTLAorCQkgICAgICAgQ09ORklHX1BDSV9TWVNfTUVNX1NJWkUsCisJCSAgICAgICBQQ0lfUkVHSU9OX01FTSB8IFBDSV9SRUdJT05fTUVNT1JZICk7CisjZW5kaWYKKwogCWhvc2UtPnJlZ2lvbl9jb3VudCA9IHJlZ19udW07CiAKIAlwY2lfc2V0dXBfaW5kaXJlY3QoaG9zZSwgUENJWDBfQ0ZHQURSLCBQQ0lYMF9DRkdEQVRBKTsKQEAgLTUwMiw3ICs1MTQsNyBAQAogCW91dDE2ciggUENJWDBfQ0xTLCAweDAwMDYwMDAwICk7IC8qIEJyaWRnZSwgaG9zdCBicmlkZ2UgKi8KICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpCisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKIAlvdXQzMnIoIFBDSVgwX0JSREdPUFQxLCAweDA0MDAwMDYwICk7ICAgICAgICAgICAgICAgLyogUExCIFJxIHByaSBoaWdoZXN0ICAgKi8KIAlvdXQzMnIoIFBDSVgwX0JSREdPUFQyLCBpbjMyKFBDSVgwX0JSREdPUFQyKSB8IDB4ODMgKTsgLyogRW5hYmxlIGhvc3QgY29uZmlnLCBjbGVhciBUaW1lb3V0LCBlbnN1cmUgaW50IHNyYzEgICovCiAjZWxpZiBkZWZpbmVkKFBDSVgwX0JSREdPUFQxKQpAQCAtNTIwLDggKzUzMiwxMyBAQAogCW91dDMyciggUENJWDBfUE9NMFNBLCAwICk7IC8qIGRpc2FibGUgKi8KIAlvdXQzMnIoIFBDSVgwX1BPTTFTQSwgMCApOyAvKiBkaXNhYmxlICovCiAJb3V0MzJyKCBQQ0lYMF9QT00yU0EsIDAgKTsgLyogZGlzYWJsZSAqLworI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKKwlvdXQzMnIoIFBDSVgwX1BPTTBMQUwsIDB4MTAwMDAwMDAgKTsKKwlvdXQzMnIoIFBDSVgwX1BPTTBMQUgsIDB4MDAwMDAwMGMgKTsKKyNlbHNlCiAJb3V0MzJyKCBQQ0lYMF9QT00wTEFMLCAweDAwMDAwMDAwICk7CiAJb3V0MzJyKCBQQ0lYMF9QT00wTEFILCAweDAwMDAwMDAzICk7CisjZW5kaWYKIAlvdXQzMnIoIFBDSVgwX1BPTTBQQ0lBTCwgQ0ZHX1BDSV9NRU1CQVNFICk7CiAJb3V0MzJyKCBQQ0lYMF9QT00wUENJQUgsIDB4MDAwMDAwMDAgKTsKIAlvdXQzMnIoIFBDSVgwX1BPTTBTQSwgMHhmMDAwMDAwMSApOyAvKiAyNTZNQiwgZW5hYmxlZCAqLwpAQCAtNTM4LDE3ICs1NTUsMjAgQEAKICNpZmRlZiBDT05GSUdfUENJX1NDQU5fU0hPVwogCQlwcmludGYoIlBDSTogICBCdXMgRGV2IFZlbklkIERldklkIENsYXNzIEludFxuIik7CiAjZW5kaWYKLSNpZiAhZGVmaW5lZChDT05GSUdfNDQwRVApICYmICFkZWZpbmVkKENPTkZJR180NDBHUikKKyNpZiAhZGVmaW5lZChDT05GSUdfNDQwRVApICYmICFkZWZpbmVkKENPTkZJR180NDBHUikgJiYgXAorICAgICFkZWZpbmVkKENPTkZJR180NDBFUFgpICYmICFkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJCW91dDE2ciggUENJWDBfQ01ELCBpbjE2ciggUENJWDBfQ01EICkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOwogI2VuZGlmCiAJCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOwogCX0KIH0KIAotCiB2b2lkIHBjaV9pbml0X2JvYXJkKHZvaWQpCiB7CiAJcGNpXzQ0MF9pbml0ICgmcHBjNDQwX2hvc2UpOworI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKKwlwY2llX3NldHVwX2hvc2VzKCk7CisjZW5kaWYKIH0KIAogI2VuZGlmIC8qIENPTkZJR180NDAgJiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4LzQ0MHNwZV9wY2llLmMgYi9jcHUvcHBjNHh4LzQ0MHNwZV9wY2llLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzMGNkMgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9wcGM0eHgvNDQwc3BlX3BjaWUuYwpAQCAtMCwwICsxLDk2MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSb2xhbmQgRHJlaWVyIDxyb2xhbmRkQGNpc2NvLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20tcHBjL2lvLmg+CisjaW5jbHVkZSA8cHBjNHh4Lmg+CisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8cGNpLmg+CisKKyNpbmNsdWRlICI0NDBzcGVfcGNpZS5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKQorI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKworZW51bSB7CisJUFRZUEVfRU5EUE9JTlQJCT0gMHgwLAorCVBUWVBFX0xFR0FDWV9FTkRQT0lOVAk9IDB4MSwKKwlQVFlQRV9ST09UX1BPUlQJCT0gMHg0LAorCisJTE5LV19YMQkJCT0gMHgxLAorCUxOS1dfWDQJCQk9IDB4NCwKKwlMTktXX1g4CQkJPSAweDgKK307CisKK3N0YXRpYyBpbnQgcGNpZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHVuc2lnbmVkIGludCBkZXZmbiwKKwlpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgKnZhbCkgeworCisJKnZhbCA9IDA7CisJLyoKKwkgKiA0NDBTUEUgaW1wbGVtZW50cyBvbmx5IG9uZSBmdW5jdGlvbiBwZXIgcG9ydAorCSAqLworCWlmICghKChQQ0lfRlVOQyhkZXZmbikgPT0gMCkgJiYgKFBDSV9ERVYoZGV2Zm4pID09IDEpKSkKKwkJcmV0dXJuIDA7CisKKwlkZXZmbiA9IFBDSV9CREYoMCwwLDApOworCW9mZnNldCArPSBkZXZmbiA8PCA0OworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCSp2YWwgPSBpbl84KGhvc2UtPmNmZ19kYXRhICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqdmFsID0gaW5fbGUxNigodTE2ICopKGhvc2UtPmNmZ19kYXRhICsgb2Zmc2V0KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp2YWwgPSBpbl9sZTMyKCh1MzIgKikoaG9zZS0+Y2ZnX2RhdGEgKyBvZmZzZXQpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaWVfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgdW5zaWduZWQgaW50IGRldmZuLAorCWludCBvZmZzZXQsIGludCBsZW4sIHUzMiB2YWwpIHsKKworCS8qCisJICogNDQwU1BFIGltcGxlbWVudHMgb25seSBvbmUgZnVuY3Rpb24gcGVyIHBvcnQKKwkgKi8KKwlpZiAoISgoUENJX0ZVTkMoZGV2Zm4pID09IDApICYmIChQQ0lfREVWKGRldmZuKSA9PSAxKSkpCisJCXJldHVybiAwOworCisJZGV2Zm4gPSBQQ0lfQkRGKDAsMCwwKTsKKwlvZmZzZXQgKz0gZGV2Zm4gPDwgNDsKKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQlvdXRfOChob3NlLT5jZmdfZGF0YSArIG9mZnNldCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlvdXRfbGUxNigodTE2ICopKGhvc2UtPmNmZ19kYXRhICsgb2Zmc2V0KSwgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJb3V0X2xlMzIoKHUzMiAqKShob3NlLT5jZmdfZGF0YSArIG9mZnNldCksIHZhbCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHBjaWVfcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UscGNpX2Rldl90IGRldixpbnQgb2Zmc2V0LHU4ICp2YWwpCit7CisJdTMyIHY7CisJaW50IHJ2OworCisJcnYgPSAgcGNpZV9yZWFkX2NvbmZpZyhob3NlLCBkZXYsIG9mZnNldCwgMSwgJnYpOworCSp2YWwgPSAodTgpdjsKKwlyZXR1cm4gcnY7Cit9CisKK2ludCBwY2llX3JlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLHBjaV9kZXZfdCBkZXYsaW50IG9mZnNldCx1MTYgKnZhbCkKK3sKKwl1MzIgdjsKKwlpbnQgcnY7CisKKwlydiA9IHBjaWVfcmVhZF9jb25maWcoaG9zZSwgZGV2LCBvZmZzZXQsIDIsICZ2KTsKKwkqdmFsID0gKHUxNil2OworCXJldHVybiBydjsKK30KKworaW50IHBjaWVfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLHBjaV9kZXZfdCBkZXYsaW50IG9mZnNldCx1MzIgKnZhbCkKK3sKKwl1MzIgdjsKKwlpbnQgcnY7CisKKwlydiA9IHBjaWVfcmVhZF9jb25maWcoaG9zZSwgZGV2LCBvZmZzZXQsIDMsICZ2KTsKKwkqdmFsID0gKHUzMil2OworCXJldHVybiBydjsKK30KKworaW50IHBjaWVfd3JpdGVfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLHBjaV9kZXZfdCBkZXYsaW50IG9mZnNldCx1OCB2YWwpCit7CisJcmV0dXJuIHBjaWVfd3JpdGVfY29uZmlnKGhvc2UsKHUzMilkZXYsb2Zmc2V0LDEsdmFsKTsKK30KKworaW50IHBjaWVfd3JpdGVfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLHBjaV9kZXZfdCBkZXYsaW50IG9mZnNldCx1MTYgdmFsKQoreworCXJldHVybiBwY2llX3dyaXRlX2NvbmZpZyhob3NlLCh1MzIpZGV2LG9mZnNldCwyLCh1MzIgKXZhbCk7Cit9CisKK2ludCBwY2llX3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UscGNpX2Rldl90IGRldixpbnQgb2Zmc2V0LHUzMiB2YWwpCit7CisJcmV0dXJuIHBjaWVfd3JpdGVfY29uZmlnKGhvc2UsKHUzMilkZXYsb2Zmc2V0LDMsKHUzMiApdmFsKTsKK30KKworc3RhdGljIHZvaWQgcHBjNDQwc3BlX3NldHVwX3V0bCh1MzIgcG9ydCkgeworCisJdm9sYXRpbGUgdm9pZCAqdXRsX2Jhc2UgPSBOVUxMOworCisJLyoKKwkgKiBNYXAgVVRMIHJlZ2lzdGVycworCSAqLworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJbXRkY3IoRENSTl9QRUdQTF9SRUdCQUgoUENJRTApLCAweDAwMDAwMDBjKTsKKwkJbXRkY3IoRENSTl9QRUdQTF9SRUdCQUwoUENJRTApLCAweDIwMDAwMDAwKTsKKwkJbXRkY3IoRENSTl9QRUdQTF9SRUdNU0soUENJRTApLCAweDAwMDA3MDAxKTsKKwkJbXRkY3IoRENSTl9QRUdQTF9TUEVDSUFMKFBDSUUwKSwgMHg2ODc4MjgwMCk7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQltdGRjcihEQ1JOX1BFR1BMX1JFR0JBSChQQ0lFMSksIDB4MDAwMDAwMGMpOworCQltdGRjcihEQ1JOX1BFR1BMX1JFR0JBTChQQ0lFMSksIDB4MjAwMDEwMDApOworCQltdGRjcihEQ1JOX1BFR1BMX1JFR01TSyhQQ0lFMSksIDB4MDAwMDcwMDEpOworCQltdGRjcihEQ1JOX1BFR1BMX1NQRUNJQUwoUENJRTEpLCAweDY4NzgyODAwKTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCW10ZGNyKERDUk5fUEVHUExfUkVHQkFIKFBDSUUyKSwgMHgwMDAwMDAwYyk7CisJCW10ZGNyKERDUk5fUEVHUExfUkVHQkFMKFBDSUUyKSwgMHgyMDAwMjAwMCk7CisJCW10ZGNyKERDUk5fUEVHUExfUkVHTVNLKFBDSUUyKSwgMHgwMDAwNzAwMSk7CisJCW10ZGNyKERDUk5fUEVHUExfU1BFQ0lBTChQQ0lFMiksIDB4Njg3ODI4MDApOworCQlicmVhazsKKwl9CisJdXRsX2Jhc2UgPSAodW5zaWduZWQgaW50ICopKENGR19QQ0lFX0JBU0UgKyAweDEwMDAgKiBwb3J0KTsKKworCS8qCisJICogU2V0IGJ1ZmZlciBhbGxvY2F0aW9ucyBhbmQgdGhlbiBhc3NlcnQgVlJCIGFuZCBUWEUuCisJICovCisJb3V0X2JlMzIodXRsX2Jhc2UgKyBQRVVUTF9PVVRUUiwgICAweDA4MDAwMDAwKTsKKwlvdXRfYmUzMih1dGxfYmFzZSArIFBFVVRMX0lOVFIsICAgIDB4MDIwMDAwMDApOworCW91dF9iZTMyKHV0bF9iYXNlICsgUEVVVExfT1BEQlNaLCAgMHgxMDAwMDAwMCk7CisJb3V0X2JlMzIodXRsX2Jhc2UgKyBQRVVUTF9QQkJTWiwgICAweDUzMDAwMDAwKTsKKwlvdXRfYmUzMih1dGxfYmFzZSArIFBFVVRMX0lQSEJTWiwgIDB4MDgwMDAwMDApOworCW91dF9iZTMyKHV0bF9iYXNlICsgUEVVVExfSVBEQlNaLCAgMHgxMDAwMDAwMCk7CisJb3V0X2JlMzIodXRsX2Jhc2UgKyBQRVVUTF9SQ0lSUUVOLCAweDAwZjAwMDAwKTsKKwlvdXRfYmUzMih1dGxfYmFzZSArIFBFVVRMX1BDVEwsICAgIDB4ODA4MDAwNjYpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2Vycm9yKHZvaWQpCit7CisJdTMyIHZhbFBFMCwgdmFsUEUxLCB2YWxQRTI7CisJaW50IGVyciA9IDA7CisKKwkvKiBTRFIwX1BFR1BMTExDVDEgcmVzZXQgKi8KKwlpZiAoISh2YWxQRTAgPSBTRFJfUkVBRChQRVNEUjBfUExMTENUMSkgJiAweDAxMDAwMDAwKSkgeworCQlwcmludGYoIlBDSUU6IFNEUjBfUEVHUExMTENUMSByZXNldCBlcnJvciAweCV4XG4iLCB2YWxQRTApOworCX0KKworCXZhbFBFMCA9IFNEUl9SRUFEKFBFU0RSMF9SQ1NTRVQpOworCXZhbFBFMSA9IFNEUl9SRUFEKFBFU0RSMV9SQ1NTRVQpOworCXZhbFBFMiA9IFNEUl9SRUFEKFBFU0RSMl9SQ1NTRVQpOworCisJLyogU0RSMF9QRXhSQ1NTRVQgcnN0Z3UgKi8KKwlpZiAoISh2YWxQRTAgJiAweDAxMDAwMDAwKSB8fAorCSAgICAhKHZhbFBFMSAmIDB4MDEwMDAwMDApIHx8CisJICAgICEodmFsUEUyICYgMHgwMTAwMDAwMCkpIHsKKwkJcHJpbnRmKCJQQ0lFOiAgU0RSMF9QRXhSQ1NTRVQgcnN0Z3UgZXJyb3JcbiIpOworCQllcnIgPSAtMTsKKwl9CisKKwkvKiBTRFIwX1BFeFJDU1NFVCByc3RkbCAqLworCWlmICghKHZhbFBFMCAmIDB4MDAwMTAwMDApIHx8CisJICAgICEodmFsUEUxICYgMHgwMDAxMDAwMCkgfHwKKwkgICAgISh2YWxQRTIgJiAweDAwMDEwMDAwKSkgeworCQlwcmludGYoIlBDSUU6ICBTRFIwX1BFeFJDU1NFVCByc3RkbCBlcnJvclxuIik7CisJCWVyciA9IC0xOworCX0KKworCS8qIFNEUjBfUEV4UkNTU0VUIHJzdHB5biAqLworCWlmICgodmFsUEUwICYgMHgwMDAwMTAwMCkgfHwKKwkgICAgKHZhbFBFMSAmIDB4MDAwMDEwMDApIHx8CisJICAgICh2YWxQRTIgJiAweDAwMDAxMDAwKSkgeworCQlwcmludGYoIlBDSUU6ICBTRFIwX1BFeFJDU1NFVCByc3RweW4gZXJyb3JcbiIpOworCQllcnIgPSAtMTsKKwl9CisKKwkvKiBTRFIwX1BFeFJDU1NFVCBobGRwbGIgKi8KKwlpZiAoKHZhbFBFMCAmIDB4MTAwMDAwMDApIHx8CisJICAgICh2YWxQRTEgJiAweDEwMDAwMDAwKSB8fAorCSAgICAodmFsUEUyICYgMHgxMDAwMDAwMCkpIHsKKwkJcHJpbnRmKCJQQ0lFOiAgU0RSMF9QRXhSQ1NTRVQgaGxkcGxiIGVycm9yXG4iKTsKKwkJZXJyID0gLTE7CisJfQorCisJLyogU0RSMF9QRXhSQ1NTRVQgcmR5ICovCisJaWYgKCh2YWxQRTAgJiAweDAwMTAwMDAwKSB8fAorCSAgICAodmFsUEUxICYgMHgwMDEwMDAwMCkgfHwKKwkgICAgKHZhbFBFMiAmIDB4MDAxMDAwMDApKSB7CisJCXByaW50ZigiUENJRTogIFNEUjBfUEV4UkNTU0VUIHJkeSBlcnJvclxuIik7CisJCWVyciA9IC0xOworCX0KKworCS8qIFNEUjBfUEV4UkNTU0VUIHNodXRkb3duICovCisJaWYgKCh2YWxQRTAgJiAweDAwMDAwMTAwKSB8fAorCSAgICAodmFsUEUxICYgMHgwMDAwMDEwMCkgfHwKKwkgICAgKHZhbFBFMiAmIDB4MDAwMDAxMDApKSB7CisJCXByaW50ZigiUENJRTogIFNEUjBfUEV4UkNTU0VUIHNodXRkb3duIGVycm9yXG4iKTsKKwkJZXJyID0gLTE7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIFBDSSBFeHByZXNzIGNvcmUKKyAqLworaW50IHBwYzQ0MHNwZV9pbml0X3BjaWUodm9pZCkKK3sKKwlpbnQgdGltZV9vdXQgPSAyMDsKKworCS8qIFNldCBQTEwgY2xvY2sgcmVjZWl2ZXIgdG8gTFZQRUNMICovCisJU0RSX1dSSVRFKFBFU0RSMF9QTExMQ1QxLCBTRFJfUkVBRChQRVNEUjBfUExMTENUMSkgfCAxIDw8IDI4KTsKKworCWlmIChjaGVja19lcnJvcigpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIShTRFJfUkVBRChQRVNEUjBfUExMTENUMikgJiAweDEwMDAwKSkKKwl7CisJCXByaW50ZigiUENJRTogUEVTRFJfUExMQ1QyIHJlc2lzdGFuY2UgY2FsaWJyYXRpb24gZmFpbGVkICgweCUwOHgpXG4iLAorCQkgICAgICAgU0RSX1JFQUQoUEVTRFIwX1BMTExDVDIpKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBEZS1hc3NlcnQgcmVzZXQgb2YgUENJZSBQTEwsIHdhaXQgZm9yIGxvY2sgKi8KKwlTRFJfV1JJVEUoUEVTRFIwX1BMTExDVDEsIFNEUl9SRUFEKFBFU0RSMF9QTExMQ1QxKSAmIH4oMSA8PCAyNCkpOworCXVkZWxheSgzKTsKKworCXdoaWxlICh0aW1lX291dCkgeworCQlpZiAoIShTRFJfUkVBRChQRVNEUjBfUExMTENUMykgJiAweDEwMDAwMDAwKSkgeworCQkJdGltZV9vdXQtLTsKKwkJCXVkZWxheSgxKTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisJaWYgKCF0aW1lX291dCkgeworCQlwcmludGYoIlBDSUU6IFZDTyBvdXRwdXQgbm90IGxvY2tlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgWXVjY2EgYm9hcmQgYXMgRW5kIHBvaW50IGFuZCByb290IHBvaW50IHNldHVwCisgKiAgICAgICAgICAgICAgICAgICAgYW5kCisgKiAgICB0ZXN0aW5nIGluYm91bmQgYW5kIG91dCBib3VuZCB3aW5kb3dzCisgKgorICogIFlVQ0NBIGJvYXJkIGNhbiBiZSBwbHVnZ2VkIGludG8gYW5vdGhlciB5dWNjYSBib2FyZCBvciB5b3UgY2FuIGdldCBQQ0ktRQorICogIGNhYmxlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNldHVwIGxvb3AgYmFjayBmcm9tIG9uZSBwb3J0IHRvIGFub3RoZXIgcG9ydC4KKyAqICBQbGVhc2UgcmVtZW1lYmVyIHRoYXQgdW5sZXNzIHRoZXJlIGlzIGEgZW5kcG9pbnQgcGx1Z2dlZCBpbiB0byByb290IHBvcnQgaXQKKyAqICB3aWxsIG5vdCBpbml0aWFsaXplLiBJdCBpcyB0aGUgc2FtZSBpbiBjYXNlIG9mIGVuZHBvaW50ICwgdW5sZXNzIHRoZXJlIGlzCisgKiAgcm9vdCBwb3J0IGF0dGFjaGVkIGl0IHdpbGwgbm90IGluaXRpYWxpemUuCisgKgorICogIEluIHRoaXMgcmVsZWFzZSBvZiBzb2Z0d2FyZSBhbGwgdGhlIFBDSS1FIHBvcnRzIGFyZSBjb25maWd1cmVkIGFzIGVpdGhlcgorICogIGVuZHBvaW50IG9yIHJvb3Rwb2ludC5JbiBmdXR1cmUgd2Ugd2lsbCBoYXZlIHN1cHBvcnQgZm9yIHNlbGVjdGl2ZSBwb3J0cworICogIHNldHVwIGFzIGVuZHBvaW50IGFuZCByb290IHBvaW50IGluIHNpbmdsZSBib2FyZC4KKyAqCisgKiAgT25jZSB5b3VyIGJvYXJkIGNhbWUgdXAgYXMgcm9vdCBwb2ludCAsIHlvdSBjYW4gdmVyaWZ5IGJ5IHJlYWRpbmcKKyAqICAvcHJvYy9idXMvcGNpL2RldmljZXMuIFdoZXJlIHlvdSBjYW4gc2VlIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICogIG9mIGVuZCBwb2ludCBkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIHBvcnQuCisgKgorICogIEVucG9pbnQgY29maWd1cmF0aW9uIGNhbiBiZSB2ZXJpZmllZCBieSBjb25uZWN0aW5nIFl1Y2NhIGJvYXJkIHRvIGFueQorICogIGhvc3Qgb3IgYW5vdGhlciB5dWNjYSBib2FyZC4gVGhlbiB0cnkgdG8gc2NhbiB0aGUgZGV2aWNlLiBJbiBjYXNlIG9mCisgKiAgbGludXggdXNlICJsc3BjaSIgb3IgYXBwcmlwcmlhdGUgb3MgY29tbWFuZC4KKyAqCisgKiAgSG93IGRvIEkgdmVyaWZ5IHRoZSBpbmJvdW5kIGFuZCBvdXQgYm91bmQgd2luZG93cyA/KHl1Y2NhIHRvIHl1Y2NhKQorICogIGluIHRoaXMgY29uZmlndXJhdGlvbiBpbmJvdW5kIGFuZCBvdXRib3VuZCB3aW5kb3dzIGFyZSBzZXR1cCB0byBhY2Nlc3MKKyAqICBzcmFtIG1lbXJveSBhcmVhLiBTUkFNIGlzIGF0IDB4NCAwMDAwIDAwMDAgLCBvbiBQTEIgYnVzLiBUaGlzIGFkZHJlc3MKKyAqICBpcyBtYXBwZWQgYXQgMHg5MDAwMDAwMC4gRnJvbSB1LWJvb3QgcHJvbXB0IHdyaXRlIGRhdGEgMHhiMDAwIDAwMDAsCisgKiAgVGhpcyBpcyB3YWVyZSB5b3VyIFBPTShQTEIgb3V0IGJvdW5kIG1lbW9yeSB3aW5kb3cpIG1hcHBlZC4gdGhlbgorICogIHJlYWQgdGhlIGRhdGEgZnJvbSBvdGhlciB5dWNjYSBib2FyZCdzIHUtYm9vdCBwcm9tcHQgYXQgYWRkcmVzcworICogIDB4OTAwMCAwMDAwKFNSQU0pLiBEYXRhIHNob3VsZCBtYXRjaC4KKyAqICBJbiBjYXNlIG9mIGluYm91bmQgLCB3cml0ZSBkYXRhIHRvIHUtYm9vdCBjb21tYW5kIHByb21wdCBhdCAweGIwMDAgMDAwMAorICogIHdoaWNoIGlzIG1hcHBlZCB0byAweDQgMDAwMCAwMDAwLiBOb3cgb24gcm9vdHBvaW50IHl1Y2NhIHUtYm9vdCBwcm9tcHQgY2hlY2sKKyAqICBkYXRhIGF0IDB4OTAwMCAwMDAwKFNSQU0pLkRhdGEgc2hvdWxkIG1hdGNoLgorICovCitpbnQgcHBjNDQwc3BlX2luaXRfcGNpZV9yb290cG9ydChpbnQgcG9ydCkKK3sKKwlzdGF0aWMgaW50IGNvcmVfaW5pdDsKKwl2b2xhdGlsZSB1MzIgdmFsID0gMDsKKwlpbnQgYXR0ZW1wdHM7CisKKwlpZiAoIWNvcmVfaW5pdCkgeworCQkrK2NvcmVfaW5pdDsKKwkJaWYgKHBwYzQ0MHNwZV9pbml0X3BjaWUoKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgdmFyaW91cyBwYXJ0cyBvZiB0aGUgUENJIEV4cHJlc3MgY29yZSBmb3Igb3VyIHBvcnQ6CisJICoKKwkgKiAtIFNldCBhcyBhIHJvb3QgcG9ydCBhbmQgZW5hYmxlIG1heCB3aWR0aAorCSAqICAgKFBYSUUwIC0+IFg4LCBQQ0lFMSBhbmQgUENJRTIgLT4gWDQpLgorCSAqIC0gU2V0IHVwIFVUTCBjb25maWd1cmF0aW9uLgorCSAqIC0gSW5jcmVhc2UgU0VSREVTIGRyaXZlIHN0cmVuZ3RoIHRvIGxldmVscyBzdWdnZXN0ZWQgYnkgQU1DQy4KKwkgKiAtIERlLWFzc2VydCBSU1RQWU4sIFJTVERMIGFuZCBSU1RHVS4KKwkgKgorCSAqIE5PVElDRSBmb3IgcmV2QiBjaGlwOiBQRVNEUm5fVVRMU0VUMiBpcyBub3Qgc2V0IC0gd2UgbGVhdmUgaXQgd2l0aAorCSAqIGRlZmF1bHQgc2V0dGluZyAweDExMzEwMDAwLiBUaGUgcmVnaXN0ZXIgaGFzIG5ldyBmaWVsZHMsCisJICogUEVTRFJuX1VUTFNFVDJbTEtJTkVdIGluIHBhcnRpY3VsYXI6IGNsZWFyaW5nIGl0IGxlYWRzIHRvIFBDSUUgY29yZQorCSAqIGhhbmcuCisJICovCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAwOgorCQlTRFJfV1JJVEUoUEVTRFIwX0RMUFNFVCwgIDEgPDwgMjQgfCBQVFlQRV9ST09UX1BPUlQgPDwgMjAgfCBMTktXX1g4IDw8IDEyKTsKKworCQlTRFJfV1JJVEUoUEVTRFIwX1VUTFNFVDEsIDB4MjEyMjIyMjIpOworCQlpZiAoIXBwYzQ0MHNwZV9yZXZCKCkpCisJCQlTRFJfV1JJVEUoUEVTRFIwX1VUTFNFVDIsIDB4MTEwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIwX0hTU0wwU0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjBfSFNTTDFTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMF9IU1NMMlNFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIwX0hTU0wzU0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjBfSFNTTDRTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMF9IU1NMNVNFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIwX0hTU0w2U0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjBfSFNTTDdTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMF9SQ1NTRVQsCisJCQkgIChTRFJfUkVBRChQRVNEUjBfUkNTU0VUKSAmIH4oMSA8PCAyNCB8IDEgPDwgMTYpKSB8IDEgPDwgMTIpOworCQlicmVhazsKKworCWNhc2UgMToKKwkJU0RSX1dSSVRFKFBFU0RSMV9ETFBTRVQsIDEgPDwgMjQgfCBQVFlQRV9ST09UX1BPUlQgPDwgMjAgfCBMTktXX1g0IDw8IDEyKTsKKwkJU0RSX1dSSVRFKFBFU0RSMV9VVExTRVQxLCAweDIxMjIyMjIyKTsKKwkJaWYgKCFwcGM0NDBzcGVfcmV2QigpKQorCQkJU0RSX1dSSVRFKFBFU0RSMV9VVExTRVQyLCAweDExMDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMV9IU1NMMFNFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIxX0hTU0wxU0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjFfSFNTTDJTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMV9IU1NMM1NFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIxX1JDU1NFVCwKKwkJCSAgKFNEUl9SRUFEKFBFU0RSMV9SQ1NTRVQpICYgfigxIDw8IDI0IHwgMSA8PCAxNikpIHwgMSA8PCAxMik7CisJCWJyZWFrOworCisJY2FzZSAyOgorCQlTRFJfV1JJVEUoUEVTRFIyX0RMUFNFVCwgMSA8PCAyNCB8IFBUWVBFX1JPT1RfUE9SVCA8PCAyMCB8IExOS1dfWDQgPDwgMTIpOworCQlTRFJfV1JJVEUoUEVTRFIyX1VUTFNFVDEsIDB4MjEyMjIyMjIpOworCQlpZiAoIXBwYzQ0MHNwZV9yZXZCKCkpCisJCQlTRFJfV1JJVEUoUEVTRFIyX1VUTFNFVDIsIDB4MTEwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIyX0hTU0wwU0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjJfSFNTTDFTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMl9IU1NMMlNFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIyX0hTU0wzU0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjJfUkNTU0VULAorCQkJICAoU0RSX1JFQUQoUEVTRFIyX1JDU1NFVCkgJiB+KDEgPDwgMjQgfCAxIDw8IDE2KSkgfCAxIDw8IDEyKTsKKwkJYnJlYWs7CisJfQorCS8qCisJICogTm90aWNlOiB0aGUgZm9sbG93aW5nIGRlbGF5IGhhcyBjcml0aWNhbCBpbXBhY3Qgb24gZGV2aWNlCisJICogaW5pdGlhbGl6YXRpb24gLSBpZiB0b28gc2hvcnQgKDw1MG1zKSB0aGUgbGluayBkb2Vzbid0IGdldCB1cC4KKwkgKi8KKwltZGVsYXkoMTAwKTsKKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJdmFsID0gU0RSX1JFQUQoUEVTRFIwX1JDU1NUUyk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gU0RSX1JFQUQoUEVTRFIxX1JDU1NUUyk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdmFsID0gU0RSX1JFQUQoUEVTRFIyX1JDU1NUUyk7CisJCWJyZWFrOworCX0KKworCWlmICh2YWwgJiAoMSA8PCAyMCkpIHsKKwkJcHJpbnRmKCJQQ0lFJWQ6IFBHUlNUIGZhaWxlZCAlMDh4XG4iLCBwb3J0LCB2YWwpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBWZXJpZnkgbGluayBpcyB1cAorCSAqLworCXZhbCA9IDA7CisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAwOgorCQl2YWwgPSBTRFJfUkVBRChQRVNEUjBfTE9PUCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gU0RSX1JFQUQoUEVTRFIxX0xPT1ApOworCQlicmVhazsKKwljYXNlIDI6CisJCXZhbCA9IFNEUl9SRUFEKFBFU0RSMl9MT09QKTsKKwkJYnJlYWs7CisJfQorCWlmICghKHZhbCAmIDB4MDAwMDEwMDApKSB7CisJCXByaW50ZigiUENJRSVkOiBsaW5rIGlzIG5vdCB1cC5cbiIsIHBvcnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBTZXR1cCBVVEwgcmVnaXN0ZXJzIC0gYnV0IG9ubHkgb24gcmV2QSEKKwkgKiBXZSB1c2UgZGVmYXVsdCBzZXR0aW5ncyBmb3IgcmV2QiBjaGlwLgorCSAqLworCWlmICghcHBjNDQwc3BlX3JldkIoKSkKKwkJcHBjNDQwc3BlX3NldHVwX3V0bChwb3J0KTsKKworCS8qCisJICogV2UgbWFwIFBDSSBFeHByZXNzIGNvbmZpZ3VyYXRpb24gYWNjZXNzIGludG8gdGhlIDUxMk1CIHJlZ2lvbnMKKwkgKgorCSAqIE5PVElDRTogcmV2QiBpcyB2ZXJ5IHN0cmljdCBhYm91dCBQTEIgcmVhbCBhZGRyZXNzZXNzIGFuZCByYW5nZXMgdG8KKwkgKiBiZSBtYXBwZWQgZm9yIGNvbmZpZyBzcGFjZTsgaXQgc2VlbXMgdG8gb25seSB3b3JrIHdpdGggZF9ubm5uX25ubm4KKwkgKiByYW5nZSAoaGFuZ3MgdGhlIGNvcmUgdXBvbiBjb25maWcgdHJhbnNhY3Rpb24gYXR0ZW1wdHMgd2hlbiBzZXQKKwkgKiBvdGhlcndpc2UpIHdoaWxlIHJldkEgdXNlcyBjX25ubm5fbm5ubi4KKwkgKgorCSAqIEZvciByZXZBOgorCSAqICAgICBQQ0lFMDogMHhjXzQwMDBfMDAwMAorCSAqICAgICBQQ0lFMTogMHhjXzgwMDBfMDAwMAorCSAqICAgICBQQ0lFMjogMHhjX2MwMDBfMDAwMAorCSAqCisJICogRm9yIHJldkI6CisJICogICAgIFBDSUUwOiAweGRfMDAwMF8wMDAwCisJICogICAgIFBDSUUxOiAweGRfMjAwMF8wMDAwCisJICogICAgIFBDSUUyOiAweGRfNDAwMF8wMDAwCisJICovCisKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCWlmIChwcGM0NDBzcGVfcmV2QigpKSB7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBSChQQ0lFMCksIDB4MDAwMDAwMGQpOworCQkJbXRkY3IoRENSTl9QRUdQTF9DRkdCQUwoUENJRTApLCAweDAwMDAwMDAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJldkEgKi8KKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFIKFBDSUUwKSwgMHgwMDAwMDAwYyk7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBTChQQ0lFMCksIDB4NDAwMDAwMDApOworCQl9CisJCW10ZGNyKERDUk5fUEVHUExfQ0ZHTVNLKFBDSUUwKSwgMHhlMDAwMDAwMSk7IC8qIDUxMk1CIHJlZ2lvbiwgdmFsaWQgKi8KKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCWlmIChwcGM0NDBzcGVfcmV2QigpKSB7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBSChQQ0lFMSksIDB4MDAwMDAwMGQpOworCQkJbXRkY3IoRENSTl9QRUdQTF9DRkdCQUwoUENJRTEpLCAweDIwMDAwMDAwKTsKKwkJfSBlbHNlIHsKKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFIKFBDSUUxKSwgMHgwMDAwMDAwYyk7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBTChQQ0lFMSksIDB4ODAwMDAwMDApOworCQl9CisJCW10ZGNyKERDUk5fUEVHUExfQ0ZHTVNLKFBDSUUxKSwgMHhlMDAwMDAwMSk7IC8qIDUxMk1CIHJlZ2lvbiwgdmFsaWQgKi8KKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWlmIChwcGM0NDBzcGVfcmV2QigpKSB7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBSChQQ0lFMiksIDB4MDAwMDAwMGQpOworCQkJbXRkY3IoRENSTl9QRUdQTF9DRkdCQUwoUENJRTIpLCAweDQwMDAwMDAwKTsKKwkJfSBlbHNlIHsKKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFIKFBDSUUyKSwgMHgwMDAwMDAwYyk7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBTChQQ0lFMiksIDB4YzAwMDAwMDApOworCQl9CisJCW10ZGNyKERDUk5fUEVHUExfQ0ZHTVNLKFBDSUUyKSwgMHhlMDAwMDAwMSk7IC8qIDUxMk1CIHJlZ2lvbiwgdmFsaWQgKi8KKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgVkMwIGFjdGl2ZSBhbmQgYXNzZXJ0IFJEWS4KKwkgKi8KKwlhdHRlbXB0cyA9IDEwOworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJd2hpbGUoIShTRFJfUkVBRChQRVNEUjBfUkNTU1RTKSAmICgxIDw8IDE2KSkpIHsKKwkJCWlmICghKGF0dGVtcHRzLS0pKSB7CisJCQkJcHJpbnRmKCJQQ0lFMDogVkMwIG5vdCBhY3RpdmVcbiIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCW1kZWxheSgxMDAwKTsKKwkJfQorCQlTRFJfV1JJVEUoUEVTRFIwX1JDU1NFVCwgU0RSX1JFQUQoUEVTRFIwX1JDU1NFVCkgfCAxIDw8IDIwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl3aGlsZSghKFNEUl9SRUFEKFBFU0RSMV9SQ1NTVFMpICYgKDEgPDwgMTYpKSkgeworCQkJaWYgKCEoYXR0ZW1wdHMtLSkpIHsKKwkJCQlwcmludGYoIlBDSUUxOiBWQzAgbm90IGFjdGl2ZVxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJbWRlbGF5KDEwMDApOworCQl9CisKKwkJU0RSX1dSSVRFKFBFU0RSMV9SQ1NTRVQsIFNEUl9SRUFEKFBFU0RSMV9SQ1NTRVQpIHwgMSA8PCAyMCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJd2hpbGUoIShTRFJfUkVBRChQRVNEUjJfUkNTU1RTKSAmICgxIDw8IDE2KSkpIHsKKwkJCWlmICghKGF0dGVtcHRzLS0pKSB7CisJCQkJcHJpbnRmKCJQQ0lFMjogVkMwIG5vdCBhY3RpdmVcbiIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCW1kZWxheSgxMDAwKTsKKwkJfQorCisJCVNEUl9XUklURShQRVNEUjJfUkNTU0VULCBTRFJfUkVBRChQRVNEUjJfUkNTU0VUKSB8IDEgPDwgMjApOworCQlicmVhazsKKwl9CisJbWRlbGF5KDEwMCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHBwYzQ0MHNwZV9pbml0X3BjaWVfZW5kcG9ydChpbnQgcG9ydCkKK3sKKwlzdGF0aWMgaW50IGNvcmVfaW5pdDsKKwl2b2xhdGlsZSB1MzIgdmFsID0gMDsKKwlpbnQgYXR0ZW1wdHM7CisKKwlpZiAoIWNvcmVfaW5pdCkgeworCQkrK2NvcmVfaW5pdDsKKwkJaWYgKHBwYzQ0MHNwZV9pbml0X3BjaWUoKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgdmFyaW91cyBwYXJ0cyBvZiB0aGUgUENJIEV4cHJlc3MgY29yZSBmb3Igb3VyIHBvcnQ6CisJICoKKwkgKiAtIFNldCBhcyBhIGVuZCBwb3J0IGFuZCBlbmFibGUgbWF4IHdpZHRoCisJICogICAoUFhJRTAgLT4gWDgsIFBDSUUxIGFuZCBQQ0lFMiAtPiBYNCkuCisJICogLSBTZXQgdXAgVVRMIGNvbmZpZ3VyYXRpb24uCisJICogLSBJbmNyZWFzZSBTRVJERVMgZHJpdmUgc3RyZW5ndGggdG8gbGV2ZWxzIHN1Z2dlc3RlZCBieSBBTUNDLgorCSAqIC0gRGUtYXNzZXJ0IFJTVFBZTiwgUlNUREwgYW5kIFJTVEdVLgorCSAqCisJICogTk9USUNFIGZvciByZXZCIGNoaXA6IFBFU0RSbl9VVExTRVQyIGlzIG5vdCBzZXQgLSB3ZSBsZWF2ZSBpdCB3aXRoCisJICogZGVmYXVsdCBzZXR0aW5nIDB4MTEzMTAwMDAuIFRoZSByZWdpc3RlciBoYXMgbmV3IGZpZWxkcywKKwkgKiBQRVNEUm5fVVRMU0VUMltMS0lORV0gaW4gcGFydGljdWxhcjogY2xlYXJpbmcgaXQgbGVhZHMgdG8gUENJRSBjb3JlCisJICogaGFuZy4KKwkgKi8KKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCVNEUl9XUklURShQRVNEUjBfRExQU0VULCAgMSA8PCAyNCB8IFBUWVBFX0xFR0FDWV9FTkRQT0lOVCA8PCAyMCB8IExOS1dfWDggPDwgMTIpOworCisJCVNEUl9XUklURShQRVNEUjBfVVRMU0VUMSwgMHgyMDIyMjIyMik7CisJCWlmICghcHBjNDQwc3BlX3JldkIoKSkKKwkJCVNEUl9XUklURShQRVNEUjBfVVRMU0VUMiwgMHgxMTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjBfSFNTTDBTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMF9IU1NMMVNFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIwX0hTU0wyU0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjBfSFNTTDNTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMF9IU1NMNFNFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIwX0hTU0w1U0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjBfSFNTTDZTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMF9IU1NMN1NFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIwX1JDU1NFVCwKKwkJCShTRFJfUkVBRChQRVNEUjBfUkNTU0VUKSAmIH4oMSA8PCAyNCB8IDEgPDwgMTYpKSB8IDEgPDwgMTIpOworCQlicmVhazsKKworCWNhc2UgMToKKwkJU0RSX1dSSVRFKFBFU0RSMV9ETFBTRVQsIDEgPDwgMjQgfCBQVFlQRV9MRUdBQ1lfRU5EUE9JTlQgPDwgMjAgfCBMTktXX1g0IDw8IDEyKTsKKwkJU0RSX1dSSVRFKFBFU0RSMV9VVExTRVQxLCAweDIwMjIyMjIyKTsKKwkJaWYgKCFwcGM0NDBzcGVfcmV2QigpKQorCQkJU0RSX1dSSVRFKFBFU0RSMV9VVExTRVQyLCAweDExMDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMV9IU1NMMFNFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIxX0hTU0wxU0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjFfSFNTTDJTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMV9IU1NMM1NFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIxX1JDU1NFVCwKKwkJCShTRFJfUkVBRChQRVNEUjFfUkNTU0VUKSAmIH4oMSA8PCAyNCB8IDEgPDwgMTYpKSB8IDEgPDwgMTIpOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJU0RSX1dSSVRFKFBFU0RSMl9ETFBTRVQsIDEgPDwgMjQgfCBQVFlQRV9MRUdBQ1lfRU5EUE9JTlQgPDwgMjAgfCBMTktXX1g0IDw8IDEyKTsKKwkJU0RSX1dSSVRFKFBFU0RSMl9VVExTRVQxLCAweDIwMjIyMjIyKTsKKwkJaWYgKCFwcGM0NDBzcGVfcmV2QigpKQorCQkJU0RSX1dSSVRFKFBFU0RSMl9VVExTRVQyLCAweDExMDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMl9IU1NMMFNFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIyX0hTU0wxU0VUMSwgMHgzNTAwMDAwMCk7CisJCVNEUl9XUklURShQRVNEUjJfSFNTTDJTRVQxLCAweDM1MDAwMDAwKTsKKwkJU0RSX1dSSVRFKFBFU0RSMl9IU1NMM1NFVDEsIDB4MzUwMDAwMDApOworCQlTRFJfV1JJVEUoUEVTRFIyX1JDU1NFVCwKKwkJCShTRFJfUkVBRChQRVNEUjJfUkNTU0VUKSAmIH4oMSA8PCAyNCB8IDEgPDwgMTYpKSB8IDEgPDwgMTIpOworCQlicmVhazsKKwl9CisJLyoKKwkgKiBOb3RpY2U6IHRoZSBmb2xsb3dpbmcgZGVsYXkgaGFzIGNyaXRpY2FsIGltcGFjdCBvbiBkZXZpY2UKKwkgKiBpbml0aWFsaXphdGlvbiAtIGlmIHRvbyBzaG9ydCAoPDUwbXMpIHRoZSBsaW5rIGRvZXNuJ3QgZ2V0IHVwLgorCSAqLworCW1kZWxheSgxMDApOworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAwOiB2YWwgPSBTRFJfUkVBRChQRVNEUjBfUkNTU1RTKTsgYnJlYWs7CisJY2FzZSAxOiB2YWwgPSBTRFJfUkVBRChQRVNEUjFfUkNTU1RTKTsgYnJlYWs7CisJY2FzZSAyOiB2YWwgPSBTRFJfUkVBRChQRVNEUjJfUkNTU1RTKTsgYnJlYWs7CisJfQorCisJaWYgKHZhbCAmICgxIDw8IDIwKSkgeworCQlwcmludGYoIlBDSUUlZDogUEdSU1QgZmFpbGVkICUwOHhcbiIsIHBvcnQsIHZhbCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFZlcmlmeSBsaW5rIGlzIHVwCisJICovCisJdmFsID0gMDsKKwlzd2l0Y2ggKHBvcnQpCisJeworCQljYXNlIDA6CisJCQl2YWwgPSBTRFJfUkVBRChQRVNEUjBfTE9PUCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdmFsID0gU0RSX1JFQUQoUEVTRFIxX0xPT1ApOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXZhbCA9IFNEUl9SRUFEKFBFU0RSMl9MT09QKTsKKwkJCWJyZWFrOworCX0KKwlpZiAoISh2YWwgJiAweDAwMDAxMDAwKSkgeworCQlwcmludGYoIlBDSUUlZDogbGluayBpcyBub3QgdXAuXG4iLCBwb3J0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogU2V0dXAgVVRMIHJlZ2lzdGVycyAtIGJ1dCBvbmx5IG9uIHJldkEhCisJICogV2UgdXNlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHJldkIgY2hpcC4KKwkgKi8KKwlpZiAoIXBwYzQ0MHNwZV9yZXZCKCkpCisJCXBwYzQ0MHNwZV9zZXR1cF91dGwocG9ydCk7CisKKwkvKgorCSAqIFdlIG1hcCBQQ0kgRXhwcmVzcyBjb25maWd1cmF0aW9uIGFjY2VzcyBpbnRvIHRoZSA1MTJNQiByZWdpb25zCisJICoKKwkgKiBOT1RJQ0U6IHJldkIgaXMgdmVyeSBzdHJpY3QgYWJvdXQgUExCIHJlYWwgYWRkcmVzc2VzcyBhbmQgcmFuZ2VzIHRvCisJICogYmUgbWFwcGVkIGZvciBjb25maWcgc3BhY2U7IGl0IHNlZW1zIHRvIG9ubHkgd29yayB3aXRoIGRfbm5ubl9ubm5uCisJICogcmFuZ2UgKGhhbmdzIHRoZSBjb3JlIHVwb24gY29uZmlnIHRyYW5zYWN0aW9uIGF0dGVtcHRzIHdoZW4gc2V0CisJICogb3RoZXJ3aXNlKSB3aGlsZSByZXZBIHVzZXMgY19ubm5uX25ubm4uCisJICoKKwkgKiBGb3IgcmV2QToKKwkgKiAgICAgUENJRTA6IDB4Y180MDAwXzAwMDAKKwkgKiAgICAgUENJRTE6IDB4Y184MDAwXzAwMDAKKwkgKiAgICAgUENJRTI6IDB4Y19jMDAwXzAwMDAKKwkgKgorCSAqIEZvciByZXZCOgorCSAqICAgICBQQ0lFMDogMHhkXzAwMDBfMDAwMAorCSAqICAgICBQQ0lFMTogMHhkXzIwMDBfMDAwMAorCSAqICAgICBQQ0lFMjogMHhkXzQwMDBfMDAwMAorCSAqLworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJaWYgKHBwYzQ0MHNwZV9yZXZCKCkpIHsKKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFIKFBDSUUwKSwgMHgwMDAwMDAwZCk7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBTChQQ0lFMCksIDB4MDAwMDAwMDApOworCQl9IGVsc2UgeworCQkJLyogcmV2QSAqLworCQkJbXRkY3IoRENSTl9QRUdQTF9DRkdCQUgoUENJRTApLCAweDAwMDAwMDBjKTsKKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFMKFBDSUUwKSwgMHg0MDAwMDAwMCk7CisJCX0KKwkJbXRkY3IoRENSTl9QRUdQTF9DRkdNU0soUENJRTApLCAweGUwMDAwMDAxKTsgLyogNTEyTUIgcmVnaW9uLCB2YWxpZCAqLworCQlicmVhazsKKworCWNhc2UgMToKKwkJaWYgKHBwYzQ0MHNwZV9yZXZCKCkpIHsKKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFIKFBDSUUxKSwgMHgwMDAwMDAwZCk7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBTChQQ0lFMSksIDB4MjAwMDAwMDApOworCQl9IGVsc2UgeworCQkJbXRkY3IoRENSTl9QRUdQTF9DRkdCQUgoUENJRTEpLCAweDAwMDAwMDBjKTsKKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFMKFBDSUUxKSwgMHg4MDAwMDAwMCk7CisJCX0KKwkJbXRkY3IoRENSTl9QRUdQTF9DRkdNU0soUENJRTEpLCAweGUwMDAwMDAxKTsgLyogNTEyTUIgcmVnaW9uLCB2YWxpZCAqLworCQlicmVhazsKKworCWNhc2UgMjoKKwkJaWYgKHBwYzQ0MHNwZV9yZXZCKCkpIHsKKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFIKFBDSUUyKSwgMHgwMDAwMDAwZCk7CisJCQltdGRjcihEQ1JOX1BFR1BMX0NGR0JBTChQQ0lFMiksIDB4NDAwMDAwMDApOworCQl9IGVsc2UgeworCQkJbXRkY3IoRENSTl9QRUdQTF9DRkdCQUgoUENJRTIpLCAweDAwMDAwMDBjKTsKKwkJCW10ZGNyKERDUk5fUEVHUExfQ0ZHQkFMKFBDSUUyKSwgMHhjMDAwMDAwMCk7CisJCX0KKwkJbXRkY3IoRENSTl9QRUdQTF9DRkdNU0soUENJRTIpLCAweGUwMDAwMDAxKTsgLyogNTEyTUIgcmVnaW9uLCB2YWxpZCAqLworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBWQzAgYWN0aXZlIGFuZCBhc3NlcnQgUkRZLgorCSAqLworCWF0dGVtcHRzID0gMTA7CisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAwOgorCQl3aGlsZSghKFNEUl9SRUFEKFBFU0RSMF9SQ1NTVFMpICYgKDEgPDwgMTYpKSkgeworCQkJaWYgKCEoYXR0ZW1wdHMtLSkpIHsKKwkJCQlwcmludGYoIlBDSUUwOiBWQzAgbm90IGFjdGl2ZVxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJbWRlbGF5KDEwMDApOworCQl9CisJCVNEUl9XUklURShQRVNEUjBfUkNTU0VULCBTRFJfUkVBRChQRVNEUjBfUkNTU0VUKSB8IDEgPDwgMjApOworCQlicmVhazsKKwljYXNlIDE6CisJCXdoaWxlKCEoU0RSX1JFQUQoUEVTRFIxX1JDU1NUUykgJiAoMSA8PCAxNikpKSB7CisJCQlpZiAoIShhdHRlbXB0cy0tKSkgeworCQkJCXByaW50ZigiUENJRTE6IFZDMCBub3QgYWN0aXZlXG4iKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQltZGVsYXkoMTAwMCk7CisJCX0KKworCQlTRFJfV1JJVEUoUEVTRFIxX1JDU1NFVCwgU0RSX1JFQUQoUEVTRFIxX1JDU1NFVCkgfCAxIDw8IDIwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3aGlsZSghKFNEUl9SRUFEKFBFU0RSMl9SQ1NTVFMpICYgKDEgPDwgMTYpKSkgeworCQkJaWYgKCEoYXR0ZW1wdHMtLSkpIHsKKwkJCQlwcmludGYoIlBDSUUyOiBWQzAgbm90IGFjdGl2ZVxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJbWRlbGF5KDEwMDApOworCQl9CisKKwkJU0RSX1dSSVRFKFBFU0RSMl9SQ1NTRVQsIFNEUl9SRUFEKFBFU0RSMl9SQ1NTRVQpIHwgMSA8PCAyMCk7CisJCWJyZWFrOworCX0KKwltZGVsYXkoMTAwKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHBwYzQ0MHNwZV9zZXR1cF9wY2llX3Jvb3Rwb2ludChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBwb3J0KQoreworCXZvbGF0aWxlIHZvaWQgKm1iYXNlID0gTlVMTDsKKwl2b2xhdGlsZSB2b2lkICpybWJhc2UgPSBOVUxMOworCisJcGNpX3NldF9vcHMoaG9zZSwKKwkJICAgIHBjaWVfcmVhZF9jb25maWdfYnl0ZSwKKwkJICAgIHBjaWVfcmVhZF9jb25maWdfd29yZCwKKwkJICAgIHBjaWVfcmVhZF9jb25maWdfZHdvcmQsCisJCSAgICBwY2llX3dyaXRlX2NvbmZpZ19ieXRlLAorCQkgICAgcGNpZV93cml0ZV9jb25maWdfd29yZCwKKwkJICAgIHBjaWVfd3JpdGVfY29uZmlnX2R3b3JkKTsKKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJbWJhc2UgPSAodTMyICopQ0ZHX1BDSUUwX1hDRkdCQVNFOworCQlybWJhc2UgPSAodTMyICopQ0ZHX1BDSUUwX0NGR0JBU0U7CisJCWhvc2UtPmNmZ19kYXRhID0gKHU4ICopQ0ZHX1BDSUUwX0NGR0JBU0U7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbWJhc2UgPSAodTMyICopQ0ZHX1BDSUUxX1hDRkdCQVNFOworCQlybWJhc2UgPSAodTMyICopQ0ZHX1BDSUUxX0NGR0JBU0U7CisJCWhvc2UtPmNmZ19kYXRhID0gKHU4ICopQ0ZHX1BDSUUxX0NGR0JBU0U7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbWJhc2UgPSAodTMyICopQ0ZHX1BDSUUyX1hDRkdCQVNFOworCQlybWJhc2UgPSAodTMyICopQ0ZHX1BDSUUyX0NGR0JBU0U7CisJCWhvc2UtPmNmZ19kYXRhID0gKHU4ICopQ0ZHX1BDSUUyX0NGR0JBU0U7CisJCWJyZWFrOworCX0KKworCS8qCisJICogU2V0IGJ1cyBudW1iZXJzIG9uIG91ciByb290IHBvcnQKKwkgKi8KKwlvdXRfOCgodTggKiltYmFzZSArIFBDSV9QUklNQVJZX0JVUywgMCk7CisJb3V0XzgoKHU4ICopbWJhc2UgKyBQQ0lfU0VDT05EQVJZX0JVUywgMSk7CisJb3V0XzgoKHU4ICopbWJhc2UgKyBQQ0lfU1VCT1JESU5BVEVfQlVTLCAxKTsKKworCS8qCisJICogU2V0IHVwIG91dGJvdW5kIHRyYW5zbGF0aW9uIHRvIGhvc2UtPm1lbV9zcGFjZSBmcm9tIFBMQgorCSAqIGFkZHJlc3NlcyBhdCBhbiBvZmZzZXQgb2YgMHhkXzAwMDBfMDAwMC4gIFdlIHNldCB0aGUgbG93CisJICogYml0cyBvZiB0aGUgbWFzayB0byAxMSB0byB0dXJuIG9mZiBzcGxpdHRpbmcgaW50byA4CisJICogc3VicmVnaW9ucyBhbmQgdG8gZW5hYmxlIHRoZSBvdXRib3VuZCB0cmFuc2xhdGlvbi4KKwkgKi8KKwlvdXRfbGUzMihtYmFzZSArIFBFQ0ZHX1BPTTBMQUgsIDB4MDAwMDAwMDApOworCW91dF9sZTMyKG1iYXNlICsgUEVDRkdfUE9NMExBTCwgMHgwMDAwMDAwMCk7CisKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCW10ZGNyKERDUk5fUEVHUExfT01SMUJBSChQQ0lFMCksICAweDAwMDAwMDBkKTsKKwkJbXRkY3IoRENSTl9QRUdQTF9PTVIxQkFMKFBDSUUwKSwgIENGR19QQ0lFX01FTUJBU0UgKworCQkJcG9ydCAqIENGR19QQ0lFX01FTVNJWkUpOworCQltdGRjcihEQ1JOX1BFR1BMX09NUjFNU0tIKFBDSUUwKSwgMHg3ZmZmZmZmZik7CisJCW10ZGNyKERDUk5fUEVHUExfT01SMU1TS0woUENJRTApLAorCQkJfihDRkdfUENJRV9NRU1TSVpFIC0gMSkgfCAzKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltdGRjcihEQ1JOX1BFR1BMX09NUjFCQUgoUENJRTEpLCAgMHgwMDAwMDAwZCk7CisJCW10ZGNyKERDUk5fUEVHUExfT01SMUJBTChQQ0lFMSksICAoQ0ZHX1BDSUVfTUVNQkFTRSArCisJCQlwb3J0ICogQ0ZHX1BDSUVfTUVNU0laRSkpOworCQltdGRjcihEQ1JOX1BFR1BMX09NUjFNU0tIKFBDSUUxKSwgMHg3ZmZmZmZmZik7CisJCW10ZGNyKERDUk5fUEVHUExfT01SMU1TS0woUENJRTEpLAorCQkJfihDRkdfUENJRV9NRU1TSVpFIC0gMSkgfCAzKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltdGRjcihEQ1JOX1BFR1BMX09NUjFCQUgoUENJRTIpLCAgMHgwMDAwMDAwZCk7CisJCW10ZGNyKERDUk5fUEVHUExfT01SMUJBTChQQ0lFMiksICAoQ0ZHX1BDSUVfTUVNQkFTRSArCisJCQlwb3J0ICogQ0ZHX1BDSUVfTUVNU0laRSkpOworCQltdGRjcihEQ1JOX1BFR1BMX09NUjFNU0tIKFBDSUUyKSwgMHg3ZmZmZmZmZik7CisJCW10ZGNyKERDUk5fUEVHUExfT01SMU1TS0woUENJRTIpLAorCQkJfihDRkdfUENJRV9NRU1TSVpFIC0gMSkgfCAzKTsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHVwIDE2R0IgaW5ib3VuZCBtZW1vcnkgd2luZG93IGF0IDAgKi8KKwlvdXRfbGUzMihtYmFzZSArIFBDSV9CQVNFX0FERFJFU1NfMCwgMCk7CisJb3V0X2xlMzIobWJhc2UgKyBQQ0lfQkFTRV9BRERSRVNTXzEsIDApOworCW91dF9sZTMyKG1iYXNlICsgUEVDRkdfQkFSMEhNUEEsIDB4N2ZmZmZmYyk7CisJb3V0X2xlMzIobWJhc2UgKyBQRUNGR19CQVIwTE1QQSwgMCk7CisKKwlvdXRfbGUzMihtYmFzZSArIFBFQ0ZHX1BJTTAxU0FILCAweGZmZmYwMDAwKTsKKwlvdXRfbGUzMihtYmFzZSArIFBFQ0ZHX1BJTTAxU0FMLCAweDAwMDAwMDAwKTsKKwlvdXRfbGUzMihtYmFzZSArIFBFQ0ZHX1BJTTBMQUwsIDApOworCW91dF9sZTMyKG1iYXNlICsgUEVDRkdfUElNMExBSCwgMCk7CisJb3V0X2xlMzIobWJhc2UgKyBQRUNGR19QSU0xTEFMLCAgMHgwMDAwMDAwMCk7CisJb3V0X2xlMzIobWJhc2UgKyBQRUNGR19QSU0xTEFILCAgMHgwMDAwMDAwNCk7CisJb3V0X2xlMzIobWJhc2UgKyBQRUNGR19QSU1FTiwgMHgxKTsKKworCS8qIEVuYWJsZSBJL08sIE1lbSwgYW5kIEJ1c21hc3RlciBjeWNsZXMgKi8KKwlvdXRfbGUxNigodTE2ICopKG1iYXNlICsgUENJX0NPTU1BTkQpLAorCQkgaW5fbGUxNigodTE2ICopKG1iYXNlICsgUENJX0NPTU1BTkQpKSB8CisJCSBQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUik7CisJcHJpbnRmKCJQQ0lFOiVkIHN1Y2Nlc3NmdWxseSBzZXQgYXMgcm9vdHBvaW50XG4iLHBvcnQpOworfQorCitpbnQgcHBjNDQwc3BlX3NldHVwX3BjaWVfZW5kcG9pbnQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgcG9ydCkKK3sKKwl2b2xhdGlsZSB2b2lkICptYmFzZSA9IE5VTEw7CisJaW50IGF0dGVtcHRzID0gMDsKKworCXBjaV9zZXRfb3BzKGhvc2UsCisJCSAgICBwY2llX3JlYWRfY29uZmlnX2J5dGUsCisJCSAgICBwY2llX3JlYWRfY29uZmlnX3dvcmQsCisJCSAgICBwY2llX3JlYWRfY29uZmlnX2R3b3JkLAorCQkgICAgcGNpZV93cml0ZV9jb25maWdfYnl0ZSwKKwkJICAgIHBjaWVfd3JpdGVfY29uZmlnX3dvcmQsCisJCSAgICBwY2llX3dyaXRlX2NvbmZpZ19kd29yZCk7CisKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCW1iYXNlID0gKHUzMiAqKUNGR19QQ0lFMF9YQ0ZHQkFTRTsKKwkJaG9zZS0+Y2ZnX2RhdGEgPSAodTggKilDRkdfUENJRTBfQ0ZHQkFTRTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltYmFzZSA9ICh1MzIgKilDRkdfUENJRTFfWENGR0JBU0U7CisJCWhvc2UtPmNmZ19kYXRhID0gKHU4ICopQ0ZHX1BDSUUxX0NGR0JBU0U7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbWJhc2UgPSAodTMyICopQ0ZHX1BDSUUyX1hDRkdCQVNFOworCQlob3NlLT5jZmdfZGF0YSA9ICh1OCAqKUNGR19QQ0lFMl9DRkdCQVNFOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFNldCB1cCBvdXRib3VuZCB0cmFuc2xhdGlvbiB0byBob3NlLT5tZW1fc3BhY2UgZnJvbSBQTEIKKwkgKiBhZGRyZXNzZXMgYXQgYW4gb2Zmc2V0IG9mIDB4ZF8wMDAwXzAwMDAuICBXZSBzZXQgdGhlIGxvdworCSAqIGJpdHMgb2YgdGhlIG1hc2sgdG8gMTEgdG8gdHVybiBvZmYgc3BsaXR0aW5nIGludG8gOAorCSAqIHN1YnJlZ2lvbnMgYW5kIHRvIGVuYWJsZSB0aGUgb3V0Ym91bmQgdHJhbnNsYXRpb24uCisJICovCisJb3V0X2xlMzIobWJhc2UgKyBQRUNGR19QT00wTEFILCAweDAwMDAxZmY4KTsKKwlvdXRfbGUzMihtYmFzZSArIFBFQ0ZHX1BPTTBMQUwsIDB4MDAwMDEwMDApOworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAwOgorCQltdGRjcihEQ1JOX1BFR1BMX09NUjFCQUgoUENJRTApLCAgMHgwMDAwMDAwZCk7CisJCW10ZGNyKERDUk5fUEVHUExfT01SMUJBTChQQ0lFMCksICBDRkdfUENJRV9NRU1CQVNFICsKKwkJCXBvcnQgKiBDRkdfUENJRV9NRU1TSVpFKTsKKwkJbXRkY3IoRENSTl9QRUdQTF9PTVIxTVNLSChQQ0lFMCksIDB4N2ZmZmZmZmYpOworCQltdGRjcihEQ1JOX1BFR1BMX09NUjFNU0tMKFBDSUUwKSwKKwkJCX4oQ0ZHX1BDSUVfTUVNU0laRSAtIDEpIHwgMyk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbXRkY3IoRENSTl9QRUdQTF9PTVIxQkFIKFBDSUUxKSwgIDB4MDAwMDAwMGQpOworCQltdGRjcihEQ1JOX1BFR1BMX09NUjFCQUwoUENJRTEpLCAgKENGR19QQ0lFX01FTUJBU0UgKworCQkJcG9ydCAqIENGR19QQ0lFX01FTVNJWkUpKTsKKwkJbXRkY3IoRENSTl9QRUdQTF9PTVIxTVNLSChQQ0lFMSksIDB4N2ZmZmZmZmYpOworCQltdGRjcihEQ1JOX1BFR1BMX09NUjFNU0tMKFBDSUUxKSwKKwkJCX4oQ0ZHX1BDSUVfTUVNU0laRSAtIDEpIHwgMyk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbXRkY3IoRENSTl9QRUdQTF9PTVIxQkFIKFBDSUUyKSwgIDB4MDAwMDAwMGQpOworCQltdGRjcihEQ1JOX1BFR1BMX09NUjFCQUwoUENJRTIpLCAgKENGR19QQ0lFX01FTUJBU0UgKworCQkJcG9ydCAqIENGR19QQ0lFX01FTVNJWkUpKTsKKwkJbXRkY3IoRENSTl9QRUdQTF9PTVIxTVNLSChQQ0lFMiksIDB4N2ZmZmZmZmYpOworCQltdGRjcihEQ1JOX1BFR1BMX09NUjFNU0tMKFBDSUUyKSwKKwkJCX4oQ0ZHX1BDSUVfTUVNU0laRSAtIDEpIHwgMyk7CisJCWJyZWFrOworCX0KKworCS8qIFNldCB1cCAxNkdCIGluYm91bmQgbWVtb3J5IHdpbmRvdyBhdCAwICovCisJb3V0X2xlMzIobWJhc2UgKyBQQ0lfQkFTRV9BRERSRVNTXzAsIDApOworCW91dF9sZTMyKG1iYXNlICsgUENJX0JBU0VfQUREUkVTU18xLCAwKTsKKwlvdXRfbGUzMihtYmFzZSArIFBFQ0ZHX0JBUjBITVBBLCAweDdmZmZmZmMpOworCW91dF9sZTMyKG1iYXNlICsgUEVDRkdfQkFSMExNUEEsIDApOworCW91dF9sZTMyKG1iYXNlICsgUEVDRkdfUElNMExBTCwgMHgwMDAwMDAwMCk7CisJb3V0X2xlMzIobWJhc2UgKyBQRUNGR19QSU0wTEFILCAweDAwMDAwMDA0KTsJLyogcG9pbnRpbmcgdG8gU1JBTSAqLworCW91dF9sZTMyKG1iYXNlICsgUEVDRkdfUElNRU4sIDB4MSk7CisKKwkvKiBFbmFibGUgSS9PLCBNZW0sIGFuZCBCdXNtYXN0ZXIgY3ljbGVzICovCisJb3V0X2xlMTYoKHUxNiAqKShtYmFzZSArIFBDSV9DT01NQU5EKSwKKwkJIGluX2xlMTYoKHUxNiAqKShtYmFzZSArIFBDSV9DT01NQU5EKSkgfAorCQkgUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOworCW91dF9sZTE2KG1iYXNlICsgMHgyMDAsMHhjYWFkKTsJCQkvKiBTZXR0aW5nIHZlbmRvciBJRCAqLworCW91dF9sZTE2KG1iYXNlICsgMHgyMDIsMHhmZWVkKTsJCQkvKiBTZXR0aW5nIGRldmljZSBJRCAqLworCWF0dGVtcHRzID0gMTA7CisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAwOgorCQl3aGlsZSAoIShTRFJfUkVBRChQRVNEUjBfUkNTU1RTKSAmICgxIDw8IDgpKSkgeworCQkJaWYgKCEoYXR0ZW1wdHMtLSkpIHsKKwkJCQlwcmludGYoIlBDSUUwOiBCTUVOIGlzICBub3QgYWN0aXZlXG4iKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQltZGVsYXkoMTAwMCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQl3aGlsZSAoIShTRFJfUkVBRChQRVNEUjFfUkNTU1RTKSAmICgxIDw8IDgpKSkgeworCQkJaWYgKCEoYXR0ZW1wdHMtLSkpIHsKKwkJCQlwcmludGYoIlBDSUUxOiBCTUVOIGlzIG5vdCBhY3RpdmVcbiIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCW1kZWxheSgxMDAwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIDI6CisJCXdoaWxlICghKFNEUl9SRUFEKFBFU0RSMl9SQ1NTVFMpICYgKDEgPDwgOCkpKSB7CisJCQlpZiAoIShhdHRlbXB0cy0tKSkgeworCQkJCXByaW50ZigiUENJRTI6IEJNRU4gaXMgIG5vdCBhY3RpdmVcbiIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCW1kZWxheSgxMDAwKTsKKwkJfQorCQlicmVhazsKKwl9CisJcHJpbnRmKCJQQ0lFOiVkIHN1Y2Nlc3NmdWxseSBzZXQgYXMgZW5kcG9pbnRcbiIscG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisjZW5kaWYgLyogQ09ORklHXzQ0MFNQRSAqLwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80NDBzcGVfcGNpZS5oIGIvY3B1L3BwYzR4eC80NDBzcGVfcGNpZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWNjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvcHBjNHh4LzQ0MHNwZV9wY2llLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSb2xhbmQgRHJlaWVyIDxyb2xhbmRkQGNpc2NvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxwcGM0eHguaD4KKyNpZm5kZWYgX180NDBTUEVfUENJRV9ICisjZGVmaW5lIF9fNDQwU1BFX1BDSUVfSAorCisjZGVmaW5lIG1kZWxheShuKSAoe3Vuc2lnbmVkIGxvbmcgX19tcz0obik7IHdoaWxlIChfX21zLS0pIHVkZWxheSgxMDAwKTt9KQorCisjZGVmaW5lIERDUk5fU0RSMF9DRkdBRERSCTB4MDBlCisjZGVmaW5lIERDUk5fU0RSMF9DRkdEQVRBCTB4MDBmCisKKyNkZWZpbmUgRENSTl9QQ0lFMF9CQVNFCQkweDEwMAorI2RlZmluZSBEQ1JOX1BDSUUxX0JBU0UJCTB4MTIwCisjZGVmaW5lIERDUk5fUENJRTJfQkFTRQkJMHgxNDAKKyNkZWZpbmUgUENJRTAJCQlEQ1JOX1BDSUUwX0JBU0UKKyNkZWZpbmUgUENJRTEJCQlEQ1JOX1BDSUUxX0JBU0UKKyNkZWZpbmUgUENJRTIJCQlEQ1JOX1BDSUUyX0JBU0UKKworI2RlZmluZSBEQ1JOX1BFR1BMX0NGR0JBSChiYXNlKQkJKGJhc2UgKyAweDAwKQorI2RlZmluZSBEQ1JOX1BFR1BMX0NGR0JBTChiYXNlKQkJKGJhc2UgKyAweDAxKQorI2RlZmluZSBEQ1JOX1BFR1BMX0NGR01TSyhiYXNlKQkJKGJhc2UgKyAweDAyKQorI2RlZmluZSBEQ1JOX1BFR1BMX01TR0JBSChiYXNlKQkJKGJhc2UgKyAweDAzKQorI2RlZmluZSBEQ1JOX1BFR1BMX01TR0JBTChiYXNlKQkJKGJhc2UgKyAweDA0KQorI2RlZmluZSBEQ1JOX1BFR1BMX01TR01TSyhiYXNlKQkJKGJhc2UgKyAweDA1KQorI2RlZmluZSBEQ1JOX1BFR1BMX09NUjFCQUgoYmFzZSkJKGJhc2UgKyAweDA2KQorI2RlZmluZSBEQ1JOX1BFR1BMX09NUjFCQUwoYmFzZSkJKGJhc2UgKyAweDA3KQorI2RlZmluZSBEQ1JOX1BFR1BMX09NUjFNU0tIKGJhc2UpCShiYXNlICsgMHgwOCkKKyNkZWZpbmUgRENSTl9QRUdQTF9PTVIxTVNLTChiYXNlKQkoYmFzZSArIDB4MDkpCisjZGVmaW5lIERDUk5fUEVHUExfUkVHQkFIKGJhc2UpCQkoYmFzZSArIDB4MTIpCisjZGVmaW5lIERDUk5fUEVHUExfUkVHQkFMKGJhc2UpCQkoYmFzZSArIDB4MTMpCisjZGVmaW5lIERDUk5fUEVHUExfUkVHTVNLKGJhc2UpCQkoYmFzZSArIDB4MTQpCisjZGVmaW5lIERDUk5fUEVHUExfU1BFQ0lBTChiYXNlKQkoYmFzZSArIDB4MTUpCisKKy8qCisgKiBTeXN0ZW0gRENScyAoU0RScykKKyAqLworI2RlZmluZSBQRVNEUjBfUExMTENUMQkJMHgwM2EwCisjZGVmaW5lIFBFU0RSMF9QTExMQ1QyCQkweDAzYTEKKyNkZWZpbmUgUEVTRFIwX1BMTExDVDMJCTB4MDNhMgorCisjZGVmaW5lIFBFU0RSMF9VVExTRVQxCQkweDAzMDAKKyNkZWZpbmUgUEVTRFIwX1VUTFNFVDIJCTB4MDMwMQorI2RlZmluZSBQRVNEUjBfRExQU0VUCQkweDAzMDIKKyNkZWZpbmUgUEVTRFIwX0xPT1AJCTB4MDMwMworI2RlZmluZSBQRVNEUjBfUkNTU0VUCQkweDAzMDQKKyNkZWZpbmUgUEVTRFIwX1JDU1NUUwkJMHgwMzA1CisjZGVmaW5lIFBFU0RSMF9IU1NMMFNFVDEJMHgwMzA2CisjZGVmaW5lIFBFU0RSMF9IU1NMMFNFVDIJMHgwMzA3CisjZGVmaW5lIFBFU0RSMF9IU1NMMFNUUwkJMHgwMzA4CisjZGVmaW5lIFBFU0RSMF9IU1NMMVNFVDEJMHgwMzA5CisjZGVmaW5lIFBFU0RSMF9IU1NMMVNFVDIJMHgwMzBhCisjZGVmaW5lIFBFU0RSMF9IU1NMMVNUUwkJMHgwMzBiCisjZGVmaW5lIFBFU0RSMF9IU1NMMlNFVDEJMHgwMzBjCisjZGVmaW5lIFBFU0RSMF9IU1NMMlNFVDIJMHgwMzBkCisjZGVmaW5lIFBFU0RSMF9IU1NMMlNUUwkJMHgwMzBlCisjZGVmaW5lIFBFU0RSMF9IU1NMM1NFVDEJMHgwMzBmCisjZGVmaW5lIFBFU0RSMF9IU1NMM1NFVDIJMHgwMzEwCisjZGVmaW5lIFBFU0RSMF9IU1NMM1NUUwkJMHgwMzExCisjZGVmaW5lIFBFU0RSMF9IU1NMNFNFVDEJMHgwMzEyCisjZGVmaW5lIFBFU0RSMF9IU1NMNFNFVDIJMHgwMzEzCisjZGVmaW5lIFBFU0RSMF9IU1NMNFNUUwkJMHgwMzE0CisjZGVmaW5lIFBFU0RSMF9IU1NMNVNFVDEJMHgwMzE1CisjZGVmaW5lIFBFU0RSMF9IU1NMNVNFVDIJMHgwMzE2CisjZGVmaW5lIFBFU0RSMF9IU1NMNVNUUwkJMHgwMzE3CisjZGVmaW5lIFBFU0RSMF9IU1NMNlNFVDEJMHgwMzE4CisjZGVmaW5lIFBFU0RSMF9IU1NMNlNFVDIJMHgwMzE5CisjZGVmaW5lIFBFU0RSMF9IU1NMNlNUUwkJMHgwMzFhCisjZGVmaW5lIFBFU0RSMF9IU1NMN1NFVDEJMHgwMzFiCisjZGVmaW5lIFBFU0RSMF9IU1NMN1NFVDIJMHgwMzFjCisjZGVmaW5lIFBFU0RSMF9IU1NMN1NUUwkJMHgwMzFkCisjZGVmaW5lIFBFU0RSMF9IU1NDVExTRVQJMHgwMzFlCisjZGVmaW5lIFBFU0RSMF9MQU5FX0FCQ0QJMHgwMzFmCisjZGVmaW5lIFBFU0RSMF9MQU5FX0VGR0gJMHgwMzIwCisKKyNkZWZpbmUgUEVTRFIxX1VUTFNFVDEJCTB4MDM0MAorI2RlZmluZSBQRVNEUjFfVVRMU0VUMgkJMHgwMzQxCisjZGVmaW5lIFBFU0RSMV9ETFBTRVQJCTB4MDM0MgorI2RlZmluZSBQRVNEUjFfTE9PUAkJMHgwMzQzCisjZGVmaW5lIFBFU0RSMV9SQ1NTRVQJCTB4MDM0NAorI2RlZmluZSBQRVNEUjFfUkNTU1RTCQkweDAzNDUKKyNkZWZpbmUgUEVTRFIxX0hTU0wwU0VUMQkweDAzNDYKKyNkZWZpbmUgUEVTRFIxX0hTU0wwU0VUMgkweDAzNDcKKyNkZWZpbmUgUEVTRFIxX0hTU0wwU1RTCQkweDAzNDgKKyNkZWZpbmUgUEVTRFIxX0hTU0wxU0VUMQkweDAzNDkKKyNkZWZpbmUgUEVTRFIxX0hTU0wxU0VUMgkweDAzNGEKKyNkZWZpbmUgUEVTRFIxX0hTU0wxU1RTCQkweDAzNGIKKyNkZWZpbmUgUEVTRFIxX0hTU0wyU0VUMQkweDAzNGMKKyNkZWZpbmUgUEVTRFIxX0hTU0wyU0VUMgkweDAzNGQKKyNkZWZpbmUgUEVTRFIxX0hTU0wyU1RTCQkweDAzNGUKKyNkZWZpbmUgUEVTRFIxX0hTU0wzU0VUMQkweDAzNGYKKyNkZWZpbmUgUEVTRFIxX0hTU0wzU0VUMgkweDAzNTAKKyNkZWZpbmUgUEVTRFIxX0hTU0wzU1RTCQkweDAzNTEKKyNkZWZpbmUgUEVTRFIxX0hTU0NUTFNFVAkweDAzNTIKKyNkZWZpbmUgUEVTRFIxX0xBTkVfQUJDRAkweDAzNTMKKworI2RlZmluZSBQRVNEUjJfVVRMU0VUMQkJMHgwMzcwCisjZGVmaW5lIFBFU0RSMl9VVExTRVQyCQkweDAzNzEKKyNkZWZpbmUgUEVTRFIyX0RMUFNFVAkJMHgwMzcyCisjZGVmaW5lIFBFU0RSMl9MT09QCQkweDAzNzMKKyNkZWZpbmUgUEVTRFIyX1JDU1NFVAkJMHgwMzc0CisjZGVmaW5lIFBFU0RSMl9SQ1NTVFMJCTB4MDM3NQorI2RlZmluZSBQRVNEUjJfSFNTTDBTRVQxCTB4MDM3NgorI2RlZmluZSBQRVNEUjJfSFNTTDBTRVQyCTB4MDM3NworI2RlZmluZSBQRVNEUjJfSFNTTDBTVFMJCTB4MDM3OAorI2RlZmluZSBQRVNEUjJfSFNTTDFTRVQxCTB4MDM3OQorI2RlZmluZSBQRVNEUjJfSFNTTDFTRVQyCTB4MDM3YQorI2RlZmluZSBQRVNEUjJfSFNTTDFTVFMJCTB4MDM3YgorI2RlZmluZSBQRVNEUjJfSFNTTDJTRVQxCTB4MDM3YworI2RlZmluZSBQRVNEUjJfSFNTTDJTRVQyCTB4MDM3ZAorI2RlZmluZSBQRVNEUjJfSFNTTDJTVFMJCTB4MDM3ZQorI2RlZmluZSBQRVNEUjJfSFNTTDNTRVQxCTB4MDM3ZgorI2RlZmluZSBQRVNEUjJfSFNTTDNTRVQyCTB4MDM4MAorI2RlZmluZSBQRVNEUjJfSFNTTDNTVFMJCTB4MDM4MQorI2RlZmluZSBQRVNEUjJfSFNTQ1RMU0VUCTB4MDM4MgorI2RlZmluZSBQRVNEUjJfTEFORV9BQkNECTB4MDM4MworCisvKgorICogVVRMIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBQRVVUTF9QQkJTWgkJMHgyMAorI2RlZmluZSBQRVVUTF9PUERCU1oJCTB4NjgKKyNkZWZpbmUgUEVVVExfSVBIQlNaCQkweDcwCisjZGVmaW5lIFBFVVRMX0lQREJTWgkJMHg3OAorI2RlZmluZSBQRVVUTF9PVVRUUgkJMHg5MAorI2RlZmluZSBQRVVUTF9JTlRSCQkweDk4CisjZGVmaW5lIFBFVVRMX1BDVEwJCTB4YTAKKyNkZWZpbmUgUEVVVExfUkNJUlFFTgkJMHhiOAorCisvKgorICogQ29uZmlnIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworI2RlZmluZSBQRUNGR19CQVIwTE1QQQkJMHgyMTAKKyNkZWZpbmUgUEVDRkdfQkFSMEhNUEEJCTB4MjE0CisjZGVmaW5lIFBFQ0ZHX0JBUjFNUEEJCTB4MjE4CisjZGVmaW5lIFBFQ0ZHX0JBUjJNUEEJCTB4MjIwCisKKyNkZWZpbmUgUEVDRkdfUElNRU4JCTB4MzNjCisjZGVmaW5lIFBFQ0ZHX1BJTTBMQUwJCTB4MzQwCisjZGVmaW5lIFBFQ0ZHX1BJTTBMQUgJCTB4MzQ0CisjZGVmaW5lIFBFQ0ZHX1BJTTFMQUwgICAgIAkweDM0OAorI2RlZmluZSBQRUNGR19QSU0xTEFIICAgICAJMHgzNGMKKyNkZWZpbmUgUEVDRkdfUElNMDFTQUwJCTB4MzUwCisjZGVmaW5lIFBFQ0ZHX1BJTTAxU0FICQkweDM1NAorCisjZGVmaW5lIFBFQ0ZHX1BPTTBMQUwJCTB4MzgwCisjZGVmaW5lIFBFQ0ZHX1BPTTBMQUgJCTB4Mzg0CisKKyNkZWZpbmUgU0RSX1JFQUQob2Zmc2V0KSAoe1wKKwltdGRjcihEQ1JOX1NEUjBfQ0ZHQUREUiwgb2Zmc2V0KTsgXAorCW1mZGNyKERDUk5fU0RSMF9DRkdEQVRBKTt9KQorCisjZGVmaW5lIFNEUl9XUklURShvZmZzZXQsIGRhdGEpICh7XAorCW10ZGNyKERDUk5fU0RSMF9DRkdBRERSLCBvZmZzZXQpOyBcCisJbXRkY3IoRENSTl9TRFIwX0NGR0RBVEEsZGF0YSk7fSkKKworaW50IHBwYzQ0MHNwZV9pbml0X3BjaWUodm9pZCk7CitpbnQgcHBjNDQwc3BlX2luaXRfcGNpZV9yb290cG9ydChpbnQgcG9ydCk7Cit2b2lkIHl1Y2NhX3NldHVwX3BjaWVfZnBnYV9yb290cG9pbnQoaW50IHBvcnQpOwordm9pZCBwcGM0NDBzcGVfc2V0dXBfcGNpZV9yb290cG9pbnQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgcG9ydCk7CitpbnQgcHBjNDQwc3BlX3NldHVwX3BjaWVfZW5kcG9pbnQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgcG9ydCk7CitpbnQgeXVjY2FfcGNpZV9jYXJkX3ByZXNlbnQoaW50IHBvcnQpOworaW50IHBjaWVfaG9zZV9zY2FuKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IGJ1cyk7CisjZW5kaWYgLyogX180NDBTUEVfUENJRV9IICovCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4LzR4eF9lbmV0LmMgYi9jcHUvcHBjNHh4LzR4eF9lbmV0LmMKaW5kZXggODZkYzJkMC4uNWIxYzE3YyAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80eHhfZW5ldC5jCisrKyBiL2NwdS9wcGM0eHgvNHh4X2VuZXQuYwpAQCAtMTMwLDcgKzEzMCwxNyBAQAogI2RlZmluZSBCSV9QSFlNT0RFX05PTkUJIDAKICNkZWZpbmUgQklfUEhZTU9ERV9aTUlJCSAxCiAjZGVmaW5lIEJJX1BIWU1PREVfUkdNSUkgMgorI2RlZmluZSBCSV9QSFlNT0RFX0dNSUkgIDMKKyNkZWZpbmUgQklfUEhZTU9ERV9SVEJJICA0CisjZGVmaW5lIEJJX1BIWU1PREVfVEJJICAgNQorI2lmIGRlZmluZWQgKENPTkZJR180NDBFUFgpCisjZGVmaW5lIEJJX1BIWU1PREVfU01JSSAgNgorI2RlZmluZSBCSV9QSFlNT0RFX01JSSAgIDcKKyNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKKyNkZWZpbmUgU0RSMF9NRlJfRVRIX0NMS19TRUxfVihuKQkoKDB4MDE8PDI3KSAvIChuKzEpKQorI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgKiBHbG9iYWwgdmFyaWFibGVzLiBUWCBhbmQgUlggZGVzY3JpcHRvcnMgYW5kIGJ1ZmZlcnMuCkBAIC0xODEsNiArMTkxLDkgQEAKIHsKIAlFTUFDXzRYWF9IV19QU1QgaHdfcCA9IGRldi0+cHJpdjsKIAl1aW50MzJfdCBmYWlsc2FmZSA9IDEwMDAwOworI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCisJdW5zaWduZWQgbG9uZyBtZnI7CisjZW5kaWYKIAogCW91dDMyIChFTUFDX0lFUiArIGh3X3AtPmh3X2FkZHIsIDB4MDAwMDAwMDApOwkvKiBkaXNhYmxlIGVtYWMgaW50ZXJydXB0cyAqLwogCkBAIC0yMDIsOCArMjE1LDIzIEBACiAJfQogCiAJLyogRU1BQyBSRVNFVCAqLworI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCisJLyogcHJvdmlkZSBjbG9ja3MgZm9yIEVNQUMgaW50ZXJuYWwgbG9vcGJhY2sgICovCisJbWZzZHIgKHNkcl9tZnIsIG1mcik7CisJbWZyIHw9IFNEUjBfTUZSX0VUSF9DTEtfU0VMX1YoaHdfcC0+ZGV2bnVtKTsKKwltdHNkcihzZHJfbWZyLCBtZnIpOworI2VuZGlmCisKIAlvdXQzMiAoRU1BQ19NMCArIGh3X3AtPmh3X2FkZHIsIEVNQUNfTTBfU1JTVCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorCS8qIHJlbW92ZSBjbG9ja3MgZm9yIEVNQUMgaW50ZXJuYWwgbG9vcGJhY2sgICovCisJbWZzZHIgKHNkcl9tZnIsIG1mcik7CisJbWZyICY9IH5TRFIwX01GUl9FVEhfQ0xLX1NFTF9WKGh3X3AtPmRldm51bSk7CisJbXRzZHIoc2RyX21mciwgbWZyKTsKKyNlbmRpZgorCisKICNpZm5kZWYgQ09ORklHX05FVENPTlNPTEUKIAlod19wLT5wcmludF9zcGVlZCA9IDE7CS8qIHByaW50IHNwZWVkIG1lc3NhZ2UgYWdhaW4gbmV4dCB0aW1lICovCiAjZW5kaWYKQEAgLTI5OSw5ICszMjcsNDkgQEAKIAlvdXQzMiAoUkdNSUlfRkVSLCBybWlpZmVyKTsKIAogCXJldHVybiAoKGludClwZmMxKTsKLQogfQotI2VuZGlmCisjZW5kaWYJLyogQ09ORklHXzQ0MF9HWCAqLworCisjaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCitpbnQgcHBjXzR4eF9ldGhfc2V0dXBfYnJpZGdlKGludCBkZXZudW0sIGJkX3QgKiBiaXMpCit7CisJdW5zaWduZWQgbG9uZyB6bWlpZmVyPTB4MDsKKworCS8qCisJICogUmlnaHQgbm93IG9ubHkgMipSR01JSSBpcyBzdXBwb3J0ZWQuIFBsZWFzZSBleHRlbmQgd2hlbiBuZWVkZWQuCisJICogc3IgLSAyMDA2LTA4LTI5CisJICovCisJc3dpdGNoICgxKSB7CisJY2FzZSAwOgorCQkvKiAxIHggR01JSSBwb3J0ICovCisJCW91dDMyIChaTUlJX0ZFUiwgMHgwMCk7CisJCW91dDMyIChSR01JSV9GRVIsIDB4MDAwMDAwMzcpOworCQliaXMtPmJpX3BoeW1vZGVbMF0gPSBCSV9QSFlNT0RFX0dNSUk7CisJCWJpcy0+YmlfcGh5bW9kZVsxXSA9IEJJX1BIWU1PREVfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiAyIHggUkdNSUkgcG9ydHMgKi8KKwkJb3V0MzIgKFpNSUlfRkVSLCAweDAwKTsKKwkJb3V0MzIgKFJHTUlJX0ZFUiwgMHgwMDAwMDA1NSk7CisJCWJpcy0+YmlfcGh5bW9kZVswXSA9IEJJX1BIWU1PREVfUkdNSUk7CisJCWJpcy0+YmlfcGh5bW9kZVsxXSA9IEJJX1BIWU1PREVfUkdNSUk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogMiB4IFNNSUkgcG9ydHMgKi8KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBFbnN1cmUgd2Ugc2V0dXAgbWRpbyBmb3IgdGhpcyBkZXZudW0gYW5kIE9OTFkgdGhpcyBkZXZudW0gKi8KKwl6bWlpZmVyID0gaW4zMiAoWk1JSV9GRVIpOworCXptaWlmZXIgfD0gKFpNSUlfRkVSX01ESSkgPDwgWk1JSV9GRVJfVihkZXZudW0pOworCW91dDMyIChaTUlJX0ZFUiwgem1paWZlcik7CisKKwlyZXR1cm4gKChpbnQpMHgwKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfNDQwRVBYICovCiAKIHN0YXRpYyBpbnQgcHBjXzR4eF9ldGhfaW5pdCAoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwgYmRfdCAqIGJpcykKIHsKQEAgLTMxNCwxMiArMzgyLDE5IEBACiAJdW5zaWduZWQgbW9kZV9yZWc7CiAJdW5zaWduZWQgc2hvcnQgZGV2bnVtOwogCXVuc2lnbmVkIHNob3J0IHJlZ19zaG9ydDsKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApCisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpCiAJc3lzX2luZm9fdCBzeXNpbmZvOwotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKIAlpbnQgZXRoZ3JvdXAgPSAtMTsKICNlbmRpZgogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKKwl1bnNpZ25lZCBsb25nIG1mcjsKKyNlbmRpZgorCiAKIAlFTUFDXzRYWF9IV19QU1QgaHdfcCA9IGRldi0+cHJpdjsKIApAQCAtMzMwLDcgKzQwNSw5IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApCisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpCiAJLyogTmVlZCB0byBnZXQgdGhlIE9QQiBmcmVxdWVuY3kgc28gd2UgY2FuIGFjY2VzcyB0aGUgUEhZICovCiAJZ2V0X3N5c19pbmZvICgmc3lzaW5mbyk7CiAjZW5kaWYKQEAgLTM2MCw2ICs0MzcsNyBAQAogCWh3X3AtPnN0YXRzLnBrdHNfdHggPSAwOwogCWh3X3AtPnN0YXRzLnBrdHNfcnggPSAwOwogCWh3X3AtPnN0YXRzLnBrdHNfaGFuZGxlZCA9IDA7CisJaHdfcC0+cHJpbnRfc3BlZWQgPSAxOwkvKiBwcmludCBzcGVlZCBtZXNzYWdlIGFnYWluIG5leHQgdGltZSAqLwogI2VuZGlmCiAKIAlod19wLT50eF9lcnJfaW5kZXggPSAwOyAvKiBUcmFuc21pdCBFcnJvciBJbmRleCBmb3IgdHhfZXJyX2xvZyAqLwpAQCAtMzczLDcgKzQ1MSw3IEBACiAJaHdfcC0+dHhfaV9pbmRleCA9IDA7CS8qIFRyYW5zbWl0IEludGVycnVwdCBRdWV1ZSBJbmRleCAqLwogCWh3X3AtPnR4X3VfaW5kZXggPSAwOwkvKiBUcmFuc21pdCBVc2VyIFF1ZXVlIEluZGV4ICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDApICYmICFkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDApICYmICFkZWZpbmVkKENPTkZJR180NDBTUCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MFNQRSkKIAkvKiBzZXQgUk1JSSBtb2RlICovCiAJLyogTk9URTogNDQwR1ggc3BlYyBzdGF0ZXMgdGhhdCBtb2RlIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSAqLwogCS8qIE5PVEU6IFRoZXJlZm9yZSwgZGlzYWJsZSBhbGwgb3RoZXIgRU1BQ1MsIHNpbmNlIHdlIGhhbmRsZSAqLwpAQCAtMzg0LDcgKzQ2Miw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpCiAJb3V0MzIgKFpNSUlfRkVSLCAoWk1JSV9GRVJfUk1JSSB8IFpNSUlfRkVSX01ESSkgPDwgWk1JSV9GRVJfViAoZGV2bnVtKSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR180NDBHWCkKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKIAlldGhncm91cCA9IHBwY180eHhfZXRoX3NldHVwX2JyaWRnZShkZXZudW0sIGJpcyk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR180NDBHUCkKIAkvKiBzZXQgUk1JSSBtb2RlICovCkBAIC00MDYsNiArNDg0LDEyIEBACiAJX19hc21fXyB2b2xhdGlsZSAoImVpZWlvIik7CiAKIAkvKiByZXNldCBlbWFjIHNvIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSBwaHkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorCS8qIHByb3ZpZGUgY2xvY2tzIGZvciBFTUFDIGludGVybmFsIGxvb3BiYWNrICAqLworCW1mc2RyIChzZHJfbWZyLCBtZnIpOworCW1mciB8PSBTRFIwX01GUl9FVEhfQ0xLX1NFTF9WKGRldm51bSk7CisJbXRzZHIoc2RyX21mciwgbWZyKTsKKyNlbmRpZgogCiAJb3V0MzIgKEVNQUNfTTAgKyBod19wLT5od19hZGRyLCBFTUFDX00wX1NSU1QpOwogCV9fYXNtX18gdm9sYXRpbGUgKCJlaWVpbyIpOwpAQCAtNDE1LDggKzQ5OSwxOSBAQAogCQl1ZGVsYXkgKDEwMDApOwogCQlmYWlsc2FmZS0tOwogCX0KKwlpZiAoZmFpbHNhZmUgPD0gMCkKKwkJcHJpbnRmKCJcblByb2JsZW0gcmVzZXR0aW5nIEVNQUMhXG4iKTsKIAotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorCS8qIHJlbW92ZSBjbG9ja3MgZm9yIEVNQUMgaW50ZXJuYWwgbG9vcGJhY2sgICovCisJbWZzZHIgKHNkcl9tZnIsIG1mcik7CisJbWZyICY9IH5TRFIwX01GUl9FVEhfQ0xLX1NFTF9WKGRldm51bSk7CisJbXRzZHIoc2RyX21mciwgbWZyKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpCiAJLyogV2hhY2sgdGhlIE0xIHJlZ2lzdGVyICovCiAJbW9kZV9yZWcgPSAweDA7CiAJbW9kZV9yZWcgJj0gfjB4MDAwMDAwMzg7CkBAIC00NjYsMTUgKzU2MSwzOSBAQAogCSAqIG90aGVyd2lzZSwganVzdCBjaGVjayB0aGUgc3BlZWRzICYgZmVlZHMKIAkgKi8KIAlpZiAoaHdfcC0+Zmlyc3RfaW5pdCA9PSAwKSB7CisjaWYgZGVmaW5lZChDT05GSUdfODhFMTExMV9DTEtfREVMQVkpCisJCS8qCisJCSAqIE9uIHNvbWUgYm9hcmRzIChlLmcuIEFMUFIpIHRoZSBNYXJ2ZWxsIDg4RTExMTEgUEhZIG5lZWRzCisJCSAqIHRoZSAiUkdNSUkgdHJhbnNtaXQgdGltaW5nIGNvbnRyb2wiIGFuZCAiUkdNSUkgcmVjZWl2ZQorCQkgKiB0aW1pbmcgY29udHJvbCIgYml0cyBzZXQsIHNvIHRoYXQgR2JpdCBjb21tdW5pY2F0aW9uIHdvcmtzCisJCSAqIHdpdGhvdXQgcHJvYmxlbXMuCisJCSAqIEFsc28gc2V0IHRoZSAiVHJhbnNtaXR0ZXIgZGlzYWJsZSIgdG8gMSB0byBlbmFibGUgdGhlCisJCSAqIHRyYW5zbWl0dGVyLgorCQkgKiBBZnRlciBzZXR0aW5nIHRoZXNlIGJpdHMgYSBzb2Z0LXJlc2V0IG11c3Qgb2NjdXIgZm9yIHRoaXMKKwkJICogY2hhbmdlIHRvIGJlY29tZSBhY3RpdmUuCisJCSAqLworCQltaWlwaHlfcmVhZCAoZGV2LT5uYW1lLCByZWcsIDB4MTQsICZyZWdfc2hvcnQpOworCQlyZWdfc2hvcnQgfD0gKDEgPDwgNykgfCAoMSA8PCAxKSB8ICgxIDw8IDApOworCQltaWlwaHlfd3JpdGUgKGRldi0+bmFtZSwgcmVnLCAweDE0LCByZWdfc2hvcnQpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTTg4RTExMTFfUEhZKSAvKiB0ZXN0LW9ubHk6IG1lcmdlIHdpdGggQ09ORklHXzg4RTExMTFfQ0xLX0RFTEFZICEhISAqLworCQltaWlwaHlfd3JpdGUgKGRldi0+bmFtZSwgcmVnLCAweDE0LCAweDBjZTMpOworCQltaWlwaHlfd3JpdGUgKGRldi0+bmFtZSwgcmVnLCAweDE4LCAweDQxMDEpOworCQltaWlwaHlfd3JpdGUgKGRldi0+bmFtZSwgcmVnLCAweDA5LCAweDBlMDApOworCQltaWlwaHlfd3JpdGUgKGRldi0+bmFtZSwgcmVnLCAweDA0LCAweDAxZTEpOworI2VuZGlmCiAJCW1paXBoeV9yZXNldCAoZGV2LT5uYW1lLCByZWcpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBTUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKQorCiAjaWYgZGVmaW5lZChDT05GSUdfQ0lTODIwMV9QSFkpCiAJCS8qCiAJCSAqIENpY2FkYSA4MjAxIFBIWSBuZWVkcyB0byBoYXZlIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIHdoYWNrZWQKIAkJICogZm9yIFJHTUlJIG1vZGUuCiAJCSAqLwotCQlpZiAoICgoZGV2bnVtID09IDIpIHx8IChkZXZudW0gPT0zKSkgJiYgKDQgPT0gZXRoZ3JvdXApICkgeworCQlpZiAoKChkZXZudW0gPT0gMikgfHwgKGRldm51bSA9PSAzKSkgJiYgKDQgPT0gZXRoZ3JvdXApKSB7CiAjaWYgZGVmaW5lZChDT05GSUdfQ0lTODIwMV9TSE9SVF9FVENIKQogCQkJbWlpcGh5X3dyaXRlIChkZXYtPm5hbWUsIHJlZywgMjMsIDB4MTMwMCk7CiAjZWxzZQpAQCAtNTQ0LDcgKzY2Myw4IEBACiAJCQkoaW50KSBzcGVlZCwgKGR1cGxleCA9PSBIQUxGKSA/ICJIQUxGIiA6ICJGVUxMIik7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwU1ApCisjaWYgZGVmaW5lZChDT05GSUdfNDQwKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwU1ApICYmICFkZWZpbmVkKENPTkZJR180NDBTUEUpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfNDQwRVBYKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1JYKQogI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKIAltZnNkcihzZHJfbWZyLCByZWcpOwogCWlmIChzcGVlZCA9PSAxMDApIHsKQEAgLTU2NywxNSArNjg3LDM0IEBACiAJCQlyZWcgPSAoUkdNSUlfU1NSX1NQXzEwMDBNQlBTIDw8IFJHTUlJX1NTUl9WIChkZXZudW0pKTsKIAkJZWxzZSBpZiAoc3BlZWQgPT0gMTAwKQogCQkJcmVnID0gKFJHTUlJX1NTUl9TUF8xMDBNQlBTIDw8IFJHTUlJX1NTUl9WIChkZXZudW0pKTsKLQkJZWxzZQorCQllbHNlIGlmIChzcGVlZCA9PSAxMCkKIAkJCXJlZyA9IChSR01JSV9TU1JfU1BfMTBNQlBTIDw8IFJHTUlJX1NTUl9WIChkZXZudW0pKTsKLQorCQllbHNlIHsKKwkJCXByaW50ZigiRXJyb3IgaW4gUkdNSUkgU3BlZWRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CiAJCW91dDMyIChSR01JSV9TU1IsIHJlZyk7CiAJfQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzQ0MCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MFNQKSAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCisJaWYgKHNwZWVkID09IDEwMDApCisJCXJlZyA9IChSR01JSV9TU1JfU1BfMTAwME1CUFMgPDwgUkdNSUlfU1NSX1YgKGRldm51bSkpOworCWVsc2UgaWYgKHNwZWVkID09IDEwMCkKKwkJcmVnID0gKFJHTUlJX1NTUl9TUF8xMDBNQlBTIDw8IFJHTUlJX1NTUl9WIChkZXZudW0pKTsKKwllbHNlIGlmIChzcGVlZCA9PSAxMCkKKwkJcmVnID0gKFJHTUlJX1NTUl9TUF8xME1CUFMgPDwgUkdNSUlfU1NSX1YgKGRldm51bSkpOworCWVsc2UgeworCQlwcmludGYoIkVycm9yIGluIFJHTUlJIFNwZWVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlvdXQzMiAoUkdNSUlfU1NSLCByZWcpOworI2VuZGlmCisKIAkvKiBzZXQgdGhlIE1hbCBjb25maWd1cmF0aW9uIHJlZyAqLwotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwU1ApIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKIAltdGRjciAobWFsbWNyLCBNQUxfQ1JfUExCQiB8IE1BTF9DUl9PUEJCTCB8IE1BTF9DUl9MRUEgfAogCSAgICAgICBNQUxfQ1JfUExCTFRfREVGQVVMVCB8IE1BTF9DUl9FT1BJRSB8IDB4MDAzMzAwMDApOwogI2Vsc2UKQEAgLTc1OSw5ICs4OTgsMTAgQEAKIAogCS8qIHNldCBzcGVlZCAqLwogCWlmIChzcGVlZCA9PSBfMTAwMEJBU0VUKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfNDQwU1ApCi0jZGVmaW5lIFNEUjBfUEZDMV9FTV8xMDAwCTB4MDAyMDAwMDAKKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJCXVuc2lnbmVkIGxvbmcgcGZjMTsKKwogCQltZnNkciAoc2RyX3BmYzEsIHBmYzEpOwogCQlwZmMxIHw9IFNEUjBfUEZDMV9FTV8xMDAwOwogCQltdHNkciAoc2RyX3BmYzEsIHBmYzEpOwpAQCAtNzg3LDcgKzkyNyw3IEBACiAKIAkvKiBzZXQgcmVjZWl2ZQlsb3cvaGlnaCB3YXRlciBtYXJrIHJlZ2lzdGVyICovCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQotCS8qIDQ0MEdQIGhhcyBhIDY0IGJ5dGUgYnVyc3QgbGVuZ3RoICovCisJLyogNDQwcyBoYXMgYSA2NCBieXRlIGJ1cnN0IGxlbmd0aCAqLwogCW91dDMyIChFTUFDX1JYX0hJX0xPX1dNQVJLICsgaHdfcC0+aHdfYWRkciwgMHg4MDAwOTAwMCk7CiAjZWxzZQogCS8qIDQwNXMgaGF2ZSBhIDE2IGJ5dGUgYnVyc3QgbGVuZ3RoICovCkBAIC04OTUsNyArMTAzNSw3IEBACiAKICNpZiBkZWZpbmVkIChDT05GSUdfNDQwKQogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwU1ApCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1ApIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKIC8qCiAgKiBIYWNrOiBPbiA0NDBTUCBhbGwgZW5ldCBpcnEgc291cmNlcyBhcmUgbG9jYXRlZCBvbiBVSUMxCiAgKiBOZWVkcyBzb21lIGNsZWFudXAuIC0tc3IKQEAgLTkwNyw2ICsxMDQ3LDE0IEBACiAjZGVmaW5lIFVJQzBTUgkJdWljMHNyCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorI2RlZmluZSBVSUNNU1JfRVRIWAl1aWMwbXNyCisjZGVmaW5lIFVJQ1NSX0VUSFgJdWljMHNyCisjZWxzZQorI2RlZmluZSBVSUNNU1JfRVRIWAl1aWMxbXNyCisjZGVmaW5lIFVJQ1NSX0VUSFgJdWljMXNyCisjZW5kaWYKKwogaW50IGVuZXRJbnQgKHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCiB7CiAJaW50IHNlcnZpY2VkOwpAQCAtOTE1LDYgKzEwNjMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZW1hY19pc3IgPSAwOwogCXVuc2lnbmVkIGxvbmcgbWFsX3J4X2VvYjsKIAl1bnNpZ25lZCBsb25nIG15X3VpYzBtc3IsIG15X3VpYzFtc3I7CisJdW5zaWduZWQgbG9uZyBteV91aWNtc3JfZXRoeDsKIAogI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQogCXVuc2lnbmVkIGxvbmcgbXlfdWljMm1zcjsKQEAgLTk0Miw4ICsxMDkxLDExIEBACiAjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpCiAJCW15X3VpYzJtc3IgPSBtZmRjciAodWljMm1zcik7CiAjZW5kaWYKKwkJbXlfdWljbXNyX2V0aHggPSBtZmRjciAoVUlDTVNSX0VUSFgpOworCiAJCWlmICghKG15X3VpYzBtc3IgJiAoVUlDX01SRSB8IFVJQ19NVEUpKQotCQkgICAgJiYgIShteV91aWMxbXNyICYgKFVJQ19FVEgwIHwgVUlDX0VUSDEgfCBVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKSkpIHsKKwkJICAgICYmICEobXlfdWljMW1zciAmIChVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKSkKKwkJICAgICYmICEobXlfdWljbXNyX2V0aHggJiAoVUlDX0VUSDAgfCBVSUNfRVRIMSkpKSB7CiAJCQkvKiBub3QgZm9yIHVzICovCiAJCQlyZXR1cm4gKHJjKTsKIAkJfQpAQCAtOTYyLDggKzExMTQsNyBAQAogCQkJbWFsX2lzciA9IG1mZGNyIChtYWxlc3IpOwogCQkJLyogbG9vayBmb3IgbWFsIGVycm9yICovCiAJCQlpZiAobXlfdWljMW1zciAmIChVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKSkgewotCQkJCW1hbF9lcnIgKGRldiwgbWFsX2lzciwgbXlfdWljMG1zciwKLQkJCQkJIE1BTF9VSUNfREVGLCBNQUxfVUlDX0VSUik7CisJCQkJbWFsX2VyciAoZGV2LCBtYWxfaXNyLCBteV91aWMxbXNyLCBNQUxfVUlDX0RFRiwgTUFMX1VJQ19FUlIpOwogCQkJCXNlcnZpY2VkID0gMTsKIAkJCQlyYyA9IDA7CiAJCQl9CkBAIC05NzEsNyArMTEyMiw3IEBACiAKIAkJLyogcG9ydCBieSBwb3J0IGRpc3BhdGNoIG9mIGVtYWMgaW50ZXJydXB0cyAqLwogCQlpZiAoaHdfcC0+ZGV2bnVtID09IDApIHsKLQkJCWlmIChVSUNfRVRIMCAmIG15X3VpYzFtc3IpIHsJLyogbG9vayBmb3IgRU1BQyBlcnJvcnMgKi8KKwkJCWlmIChVSUNfRVRIMCAmIG15X3VpY21zcl9ldGh4KSB7CS8qIGxvb2sgZm9yIEVNQUMgZXJyb3JzICovCiAJCQkJZW1hY19pc3IgPSBpbjMyIChFTUFDX0lTUiArIGh3X3AtPmh3X2FkZHIpOwogCQkJCWlmICgoaHdfcC0+ZW1hY19pZXIgJiBlbWFjX2lzcikgIT0gMCkgewogCQkJCQllbWFjX2VyciAoZGV2LCBlbWFjX2lzcik7CkBAIC05ODIsMTQgKzExMzMsMTUgQEAKIAkJCWlmICgoaHdfcC0+ZW1hY19pZXIgJiBlbWFjX2lzcikKIAkJCSAgICB8fCAobXlfdWljMW1zciAmIChVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKSkpIHsKIAkJCQltdGRjciAoVUlDMFNSLCBVSUNfTVJFIHwgVUlDX01URSk7CS8qIENsZWFyICovCi0JCQkJbXRkY3IgKHVpYzFzciwgVUlDX0VUSDAgfCBVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKTsJLyogQ2xlYXIgKi8KKwkJCQltdGRjciAodWljMXNyLCBVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKTsJLyogQ2xlYXIgKi8KKwkJCQltdGRjciAoVUlDU1JfRVRIWCwgVUlDX0VUSDApOyAvKiBDbGVhciAqLwogCQkJCXJldHVybiAocmMpOwkvKiB3ZSBoYWQgZXJyb3JzIHNvIGdldCBvdXQgKi8KIAkJCX0KIAkJfQogCiAjaWYgIWRlZmluZWQoQ09ORklHXzQ0MFNQKQogCQlpZiAoaHdfcC0+ZGV2bnVtID09IDEpIHsKLQkJCWlmIChVSUNfRVRIMSAmIG15X3VpYzFtc3IpIHsJLyogbG9vayBmb3IgRU1BQyBlcnJvcnMgKi8KKwkJCWlmIChVSUNfRVRIMSAmIG15X3VpY21zcl9ldGh4KSB7CS8qIGxvb2sgZm9yIEVNQUMgZXJyb3JzICovCiAJCQkJZW1hY19pc3IgPSBpbjMyIChFTUFDX0lTUiArIGh3X3AtPmh3X2FkZHIpOwogCQkJCWlmICgoaHdfcC0+ZW1hY19pZXIgJiBlbWFjX2lzcikgIT0gMCkgewogCQkJCQllbWFjX2VyciAoZGV2LCBlbWFjX2lzcik7CkBAIC0xMDAwLDcgKzExNTIsOCBAQAogCQkJaWYgKChod19wLT5lbWFjX2llciAmIGVtYWNfaXNyKQogCQkJICAgIHx8IChteV91aWMxbXNyICYgKFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpKSkgewogCQkJCW10ZGNyIChVSUMwU1IsIFVJQ19NUkUgfCBVSUNfTVRFKTsJLyogQ2xlYXIgKi8KLQkJCQltdGRjciAodWljMXNyLCBVSUNfRVRIMSB8IFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpOwkvKiBDbGVhciAqLworCQkJCW10ZGNyICh1aWMxc3IsIFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpOyAvKiBDbGVhciAqLworCQkJCW10ZGNyIChVSUNTUl9FVEhYLCBVSUNfRVRIMSk7IC8qIENsZWFyICovCiAJCQkJcmV0dXJuIChyYyk7CS8qIHdlIGhhZCBlcnJvcnMgc28gZ2V0IG91dCAqLwogCQkJfQogCQl9CkBAIC0xMDY3LDEwICsxMjIwLDEwIEBACiAJCW10ZGNyICh1aWMxc3IsIFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpOwkvKiBDbGVhciAqLwogCQlzd2l0Y2ggKGh3X3AtPmRldm51bSkgewogCQljYXNlIDA6Ci0JCQltdGRjciAodWljMXNyLCBVSUNfRVRIMCk7CisJCQltdGRjciAoVUlDU1JfRVRIWCwgVUlDX0VUSDApOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKLQkJCW10ZGNyICh1aWMxc3IsIFVJQ19FVEgxKTsKKwkJCW10ZGNyIChVSUNTUl9FVEhYLCBVSUNfRVRIMSk7CiAJCQlicmVhazsKICNpZiBkZWZpbmVkIChDT05GSUdfNDQwR1gpCiAJCWNhc2UgMjoKQEAgLTEzNjcsMjEgKzE1MjAsMjAgQEAKICNlbmRpZgogCS8qIHNldCBwaHkgbnVtIGFuZCBtb2RlICovCiAJYmlzLT5iaV9waHludW1bMF0gPSBDT05GSUdfUEhZX0FERFI7CisJYmlzLT5iaV9waHltb2RlWzBdID0gMDsKKwogI2lmIGRlZmluZWQoQ09ORklHX1BIWTFfQUREUikKIAliaXMtPmJpX3BoeW51bVsxXSA9IENPTkZJR19QSFkxX0FERFI7CisJYmlzLT5iaV9waHltb2RlWzFdID0gMDsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQogCWJpcy0+YmlfcGh5bnVtWzJdID0gQ09ORklHX1BIWTJfQUREUjsKIAliaXMtPmJpX3BoeW51bVszXSA9IENPTkZJR19QSFkzX0FERFI7Ci0JYmlzLT5iaV9waHltb2RlWzBdID0gMDsKLQliaXMtPmJpX3BoeW1vZGVbMV0gPSAwOwogCWJpcy0+YmlfcGh5bW9kZVsyXSA9IDI7CiAJYmlzLT5iaV9waHltb2RlWzNdID0gMjsKIAotI2lmIGRlZmluZWQgKENPTkZJR180NDBHWCkKIAlwcGNfNHh4X2V0aF9zZXR1cF9icmlkZ2UoMCwgYmlzKTsKICNlbmRpZgotI2VuZGlmCiAKIAlmb3IgKGV0aF9udW0gPSAwOyBldGhfbnVtIDwgTEFTVF9FTUFDX05VTTsgZXRoX251bSsrKSB7CiAKQEAgLTE0NzgsOSArMTYzMCwxNSBAQAogCiAJCWlmICgwID09IHZpcmdpbikgewogCQkJLyogc2V0IHRoZSBNQUwgSUVSID8/PyBuYW1lcyBtYXkgY2hhbmdlIHdpdGggbmV3IHNwZWMgPz8/ICovCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKKwkJCW1hbF9pZXIgPQorCQkJCU1BTF9JRVJfUFQgfCBNQUxfSUVSX1BSRSB8IE1BTF9JRVJfUFdFIHwKKwkJCQlNQUxfSUVSX0RFIHwgTUFMX0lFUl9PVEUgfCBNQUxfSUVSX09FIHwgTUFMX0lFUl9QRSA7CisjZWxzZQogCQkJbWFsX2llciA9CiAJCQkJTUFMX0lFUl9ERSB8IE1BTF9JRVJfTkUgfCBNQUxfSUVSX1RFIHwKIAkJCQlNQUxfSUVSX09QQkUgfCBNQUxfSUVSX1BMQkU7CisjZW5kaWYKIAkJCW10ZGNyIChtYWxlc3IsIDB4ZmZmZmZmZmYpOwkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KIAkJCW10ZGNyIChtYWx0eGRlaXIsIDB4ZmZmZmZmZmYpOwkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KIAkJCW10ZGNyIChtYWxyeGRlaXIsIDB4ZmZmZmZmZmYpOwkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KQEAgLTE1MTAsMTEgKzE2NjgsMTMgQEAKICNlbHNlCiAJCWVtYWMwX2RldiA9IGRldjsKICNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTkVUX01VTFRJKQogI2lmIGRlZmluZWQoQ09ORklHX01JSSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKQogCQltaWlwaHlfcmVnaXN0ZXIgKGRldi0+bmFtZSwKIAkJCQkgZW1hYzR4eF9taWlwaHlfcmVhZCwgZW1hYzR4eF9taWlwaHlfd3JpdGUpOwogI2VuZGlmCi0KKyNlbmRpZgogCX0JCQkvKiBlbmQgZm9yIGVhY2ggc3VwcG9ydGVkIGRldmljZSAqLwogCXJldHVybiAoMSk7CiB9CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L01ha2VmaWxlIGIvY3B1L3BwYzR4eC9NYWtlZmlsZQppbmRleCBjNTYzNDU3Li4xNmRjOGQ2IDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L01ha2VmaWxlCisrKyBiL2NwdS9wcGM0eHgvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjggKzIzLDMxIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vIHJlc2V0dmVjLm8ga2dkYi5vCi1BT0JKUwk9IGRjci5vCitTT0JKUwk9IGRjci5vCiBDT0JKUwk9IDQwNWdwX3BjaS5vIDR4eF9lbmV0Lm8gXAogCSAgYmVkYnVnXzQwNS5vIGNvbW1wcm9jLm8gXAogCSAgY3B1Lm8gY3B1X2luaXQubyBpMmMubyBpbnRlcnJ1cHRzLm8gXAotCSAgbWlpcGh5Lm8gc2RyYW0ubyBzZXJpYWwubyBcCi0JICBzcGRfc2RyYW0ubyBzcGVlZC5vIHRyYXBzLm8gdXNiX29oY2kubyB1c2JkZXYubworCSAgbWlpcGh5Lm8gbmRmYy5vIHNkcmFtLm8gc2VyaWFsLm8gXAorCSAgc3BkX3NkcmFtLm8gc3BlZWQubyB0cmFwcy5vIHVzYl9vaGNpLm8gdXNiZGV2Lm8gXAorCSAgNDQwc3BlX3BjaWUubwogCi1PQkpTCT0gJChBT0JKUykgJChDT0JKUykKK1NSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorU1RBUlQJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1RBUlQpKQogCi1hbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCithbGw6CSQob2JqKS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTVEFSVDoubz0uUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9jcHUuYyBiL2NwdS9wcGM0eHgvY3B1LmMKaW5kZXggZDliNWQzMi4uOTQ0NzhkYiAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9jcHUuYworKysgYi9jcHUvcHBjNHh4L2NwdS5jCkBAIC00MSwxNCArNDEsMTUgQEAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogI2VuZGlmCiAKLQogI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkKICNkZWZpbmUgRlJFUV9FQkMJCShzeXNfaW5mby5mcmVxRVBCKQogI2Vsc2UKICNkZWZpbmUgRlJFUV9FQkMJCShzeXNfaW5mby5mcmVxUExCIC8gc3lzX2luZm8ucGxsRXh0QnVzRGl2KQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR180MDVHUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKQorI2lmIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAKICNkZWZpbmUgUENJX0FTWU5DCiAKQEAgLTU4LDcgKzU5LDggQEAKIAlyZXR1cm4gKG1mZGNyKHN0cmFwKSAmIFBTUl9QQ0lfQVNZTkNfRU4pOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpCisjaWYgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAltZnNkcihzZHJfc2RzdHAxLCB2YWwpOwpAQCAtODIsNyArODQsMTAgQEAKIAlyZXR1cm4gKG1mZGNyKGNwYzBfc3RycDEpICYgQ1BDMF9TVFJQMV9QQUVfTUFTSyk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBTUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKQogCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJbWZzZHIoc2RyX3Nkc3RwMSwgdmFsKTsKQEAgLTkxLDggKzk2LDEwIEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHXzQwNUVQKXx8IGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgXAotCWRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180MDVFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpCiAKICNkZWZpbmUgSTJDX0JPT1RST00KIApAQCAtMTAwLDE1ICsxMDcsNzUgQEAKIHsKICNpZiBkZWZpbmVkKENPTkZJR180MDVFUCkKIAlyZXR1cm4gKG1mZGNyKGNwYzBfYm9vdCkgJiBDUEMwX0JPT1RfU0VQKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApCisjZWxzZQogCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJbWZzZHIoc2RyX3NkY3MsIHZhbCk7CiAJcmV0dXJuICh2YWwgJiBTRFIwX1NEQ1NfU0REKTsKICNlbmRpZgogfQorCisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpCisjZGVmaW5lIFNEUjBfUElOU1RQX1NISUZUCTI5CitzdGF0aWMgY2hhciAqYm9vdHN0cmFwX3N0cltdID0geworCSJFQkMgKDE2IGJpdHMpIiwKKwkiRUJDICg4IGJpdHMpIiwKKwkiRUJDICgzMiBiaXRzKSIsCisJIkVCQyAoOCBiaXRzKSIsCisJIlBDSSIsCisJIkkyQyAoQWRkciAweDU0KSIsCisJIlJlc2VydmVkIiwKKwkiSTJDIChBZGRyIDB4NTApIiwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpCisjZGVmaW5lIFNEUjBfUElOU1RQX1NISUZUCTMwCitzdGF0aWMgY2hhciAqYm9vdHN0cmFwX3N0cltdID0geworCSJFQkMgKDggYml0cykiLAorCSJQQ0kiLAorCSJJMkMgKEFkZHIgMHg1NCkiLAorCSJJMkMgKEFkZHIgMHg1MCkiLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKQorI2RlZmluZSBTRFIwX1BJTlNUUF9TSElGVAkyOQorc3RhdGljIGNoYXIgKmJvb3RzdHJhcF9zdHJbXSA9IHsKKwkiRUJDICg4IGJpdHMpIiwKKwkiUENJIiwKKwkiTkFORCAoOCBiaXRzKSIsCisJIkVCQyAoMTYgYml0cykiLAorCSJFQkMgKDE2IGJpdHMpIiwKKwkiSTJDIChBZGRyIDB4NTQpIiwKKwkiUENJIiwKKwkiSTJDIChBZGRyIDB4NTIpIiwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorI2RlZmluZSBTRFIwX1BJTlNUUF9TSElGVAkyOQorc3RhdGljIGNoYXIgKmJvb3RzdHJhcF9zdHJbXSA9IHsKKwkiRUJDICg4IGJpdHMpIiwKKwkiRUJDICgxNiBiaXRzKSIsCisJIkVCQyAoMTYgYml0cykiLAorCSJOQU5EICg4IGJpdHMpIiwKKwkiUENJIiwKKwkiSTJDIChBZGRyIDB4NTQpIiwKKwkiUENJIiwKKwkiSTJDIChBZGRyIDB4NTIpIiwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoU0RSMF9QSU5TVFBfU0hJRlQpCitzdGF0aWMgaW50IGJvb3RzdHJhcF9vcHRpb24odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCW1mc2RyKHNkcl9waW5zdHAsIHZhbCk7CisJcmV0dXJuICgodmFsICYgMHhlMDAwMDAwMCkgPj4gU0RSMF9QSU5TVFBfU0hJRlQpOworfQorI2VuZGlmIC8qIFNEUjBfUElOU1RQX1NISUZUICovCiAjZW5kaWYKIAogCkBAIC0yNDAsNiArMzA3LDIyIEBACiAjZW5kaWYgLyogQ09ORklHXzQ0MEdSICovCiAjZW5kaWYgLyogQ09ORklHXzQ0MCAqLwogCisJY2FzZSBQVlJfNDQwRVBYMV9SQToKKwkJcHV0cygiRVB4IFJldi4gQSAtIFNlY3VyaXR5L0thc3VtaSBzdXBwb3J0Iik7CisJCWJyZWFrOworCisJY2FzZSBQVlJfNDQwRVBYMl9SQToKKwkJcHV0cygiRVB4IFJldi4gQSAtIE5vIFNlY3VyaXR5L0thc3VtaSBzdXBwb3J0Iik7CisJCWJyZWFrOworCisJY2FzZSBQVlJfNDQwR1JYMV9SQToKKwkJcHV0cygiR1J4IFJldi4gQSAtIFNlY3VyaXR5L0thc3VtaSBzdXBwb3J0Iik7CisJCWJyZWFrOworCisJY2FzZSBQVlJfNDQwR1JYMl9SQToKKwkJcHV0cygiR1J4IFJldi4gQSAtIE5vIFNlY3VyaXR5L0thc3VtaSBzdXBwb3J0Iik7CisJCWJyZWFrOworCiAJY2FzZSBQVlJfNDQwU1BfUkE6CiAJCXB1dHMoIlNQIFJldi4gQSIpOwogCQlicmVhazsKQEAgLTI0OCw2ICszMzEsMTQgQEAKIAkJcHV0cygiU1AgUmV2LiBCIik7CiAJCWJyZWFrOwogCisJY2FzZSBQVlJfNDQwU1BlX1JBOgorCQlwdXRzKCJTUGUgUmV2LiBBIik7CisJCWJyZWFrOworCisJY2FzZSBQVlJfNDQwU1BlX1JCOgorCQlwdXRzKCJTUGUgUmV2LiBCIik7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcHJpbnRmICgiIFVOS05PV04gKFBWUj0lMDh4KSIsIHB2cik7CiAJCWJyZWFrOwpAQCAtMjYwLDYgKzM1MSwxMCBAQAogCiAjaWYgZGVmaW5lZChJMkNfQk9PVFJPTSkKIAlwcmludGYgKCIgICAgICAgSTJDIGJvb3QgRUVQUk9NICVzYWJsZWRcbiIsIGkyY19ib290cm9tX2VuYWJsZWQoKSA/ICJlbiIgOiAiZGlzIik7CisjaWYgZGVmaW5lZChTRFIwX1BJTlNUUF9TSElGVCkKKwlwcmludGYgKCIgICAgICAgQm9vdHN0cmFwIE9wdGlvbiAlYyAtICIsIChjaGFyKWJvb3RzdHJhcF9vcHRpb24oKSArICdBJyk7CisJcHJpbnRmICgiQm9vdCBST00gTG9jYXRpb24gJXNcbiIsIGJvb3RzdHJhcF9zdHJbYm9vdHN0cmFwX29wdGlvbigpXSk7CisjZW5kaWYKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQpAQCAtMzAzLDYgKzM5OCwxNyBAQAogCXJldHVybiAwOwogfQogCisjaWYgZGVmaW5lZCAoQ09ORklHXzQ0MFNQRSkKK2ludCBwcGM0NDBzcGVfcmV2QigpIHsKKwl1bnNpZ25lZCBpbnQgcHZyOworCisJcHZyID0gZ2V0X3B2cigpOworCWlmIChwdnIgPT0gUFZSXzQ0MFNQZV9SQikKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvaW50ZXJydXB0cy5jIGIvY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLmMKaW5kZXggM2FhZTRjZS4uYzVhOWYwMiAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLmMKQEAgLTUwLDE4ICs1MCwyMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfYWN0aW9uIGlycV92ZWNzWzMyXTsKK3ZvaWQgdWljMF9pbnRlcnJ1cHQoIHZvaWQgKiBwYXJtcyk7IC8qIFVJQzAgaGFuZGxlciAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQogc3RhdGljIHN0cnVjdCBpcnFfYWN0aW9uIGlycV92ZWNzMVszMl07IC8qIEZvciBVSUMxICovCiAKIHZvaWQgdWljMV9pbnRlcnJ1cHQoIHZvaWQgKiBwYXJtcyk7IC8qIFVJQzEgaGFuZGxlciAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpCisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQogc3RhdGljIHN0cnVjdCBpcnFfYWN0aW9uIGlycV92ZWNzMlszMl07IC8qIEZvciBVSUMyICovCi0KLXZvaWQgdWljMF9pbnRlcnJ1cHQoIHZvaWQgKiBwYXJtcyk7IC8qIFVJQzAgaGFuZGxlciAqLwogdm9pZCB1aWMyX2ludGVycnVwdCggdm9pZCAqIHBhcm1zKTsgLyogVUlDMiBoYW5kbGVyICovCi0jZW5kaWYgLyogQ09ORklHXzQ0MEdYICovCisjZW5kaWYgLyogQ09ORklHXzQ0MEdYIENPTkZJR180NDBTUEUgKi8KKworI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCitzdGF0aWMgc3RydWN0IGlycV9hY3Rpb24gaXJxX3ZlY3MzWzMyXTsgLyogRm9yIFVJQzMgKi8KK3ZvaWQgdWljM19pbnRlcnJ1cHQoIHZvaWQgKiBwYXJtcyk7IC8qIFVJQzMgaGFuZGxlciAqLworI2VuZGlmIC8qIENPTkZJR180NDBTUEUgKi8KIAogI2VuZGlmIC8qIENPTkZJR180NDAgKi8KIApAQCAtMTE1LDExICsxMjAsMTcgQEAKIAkJaXJxX3ZlY3MxW3ZlY10uaGFuZGxlciA9IE5VTEw7CiAJCWlycV92ZWNzMVt2ZWNdLmFyZyA9IE5VTEw7CiAJCWlycV92ZWNzMVt2ZWNdLmNvdW50ID0gMDsKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJCWlycV92ZWNzMlt2ZWNdLmhhbmRsZXIgPSBOVUxMOwogCQlpcnFfdmVjczJbdmVjXS5hcmcgPSBOVUxMOwogCQlpcnFfdmVjczJbdmVjXS5jb3VudCA9IDA7CiAjZW5kaWYgLyogQ09ORklHXzQ0MEdYICovCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKKwkJaXJxX3ZlY3MzW3ZlY10uaGFuZGxlciA9IE5VTEw7CisJCWlycV92ZWNzM1t2ZWNdLmFyZyA9IE5VTEw7CisJCWlycV92ZWNzM1t2ZWNdLmNvdW50ID0gMDsKKyNlbmRpZiAvKiBDT05GSUdfNDQwU1BFICovCiAjZW5kaWYKIAl9CiAKQEAgLTIyMSw2ICsyMzIsNjAgQEAKIAogfSAvKiBleHRlcm5hbF9pbnRlcnJ1cHQgQ09ORklHXzQ0MEdYICovCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQordm9pZCBleHRlcm5hbF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdWxvbmcgdWljX21zcjsKKworCS8qCisJICogUmVhZCBtYXNrZWQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBkZXRlcm1pbmUgaW50ZXJydXB0IHNvdXJjZQorCSAqLworCS8qIDQ0MCBTUGUgdXNlcyBiYXNlIHVpYyByZWdpc3RlciAqLworCXVpY19tc3IgPSBtZmRjcih1aWMwbXNyKTsKKworCWlmICggKFVJQ0IwX1VJQzFDSSAmIHVpY19tc3IpIHx8IChVSUNCMF9VSUMxTkNJICYgdWljX21zcikgKQorCQl1aWMxX2ludGVycnVwdCgwKTsKKworCWlmICggKFVJQ0IwX1VJQzJDSSAmIHVpY19tc3IpIHx8IChVSUNCMF9VSUMyTkNJICYgdWljX21zcikgKQorCQl1aWMyX2ludGVycnVwdCgwKTsKKworCWlmICh1aWNfbXNyICYgfihVSUNCMF9BTEwpKQorCQl1aWMwX2ludGVycnVwdCgwKTsKKworCW10ZGNyKHVpYzBzciwgdWljX21zcik7CisKKwlyZXR1cm47CisKK30gLyogZXh0ZXJuYWxfaW50ZXJydXB0IENPTkZJR180NDBFUFggJiBDT05GSUdfNDQwR1JYICovCisKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKK3ZvaWQgZXh0ZXJuYWxfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVsb25nIHVpY19tc3I7CisKKwkvKgorCSAqIFJlYWQgbWFza2VkIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIGludGVycnVwdCBzb3VyY2UKKwkgKi8KKwkvKiA0NDAgU1BlIHVzZXMgYmFzZSB1aWMgcmVnaXN0ZXIgKi8KKwl1aWNfbXNyID0gbWZkY3IodWljMG1zcik7CisKKwlpZiAoIChVSUNCMF9VSUMxQ0kgJiB1aWNfbXNyKSB8fCAoVUlDQjBfVUlDMU5DSSAmIHVpY19tc3IpICkKKwkJdWljMV9pbnRlcnJ1cHQoMCk7CisKKwlpZiAoIChVSUNCMF9VSUMyQ0kgJiB1aWNfbXNyKSB8fCAoVUlDQjBfVUlDMk5DSSAmIHVpY19tc3IpICkKKwkJdWljMl9pbnRlcnJ1cHQoMCk7CisKKwlpZiAoIChVSUNCMF9VSUMzQ0kgJiB1aWNfbXNyKSB8fCAoVUlDQjBfVUlDM05DSSAmIHVpY19tc3IpICkKKwkJdWljM19pbnRlcnJ1cHQoMCk7CisKKwlpZiAodWljX21zciAmIH4oVUlDQjBfQUxMKSkKKwkJdWljMF9pbnRlcnJ1cHQoMCk7CisKKwltdGRjcih1aWMwc3IsIHVpY19tc3IpOworCisJcmV0dXJuOworfSAvKiBleHRlcm5hbF9pbnRlcnJ1cHQgQ09ORklHXzQ0MFNQRSAqLworCiAjZWxzZQogCiB2b2lkIGV4dGVybmFsX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTI2Niw3ICszMzEsOCBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAvKiBIYW5kbGVyIGZvciBVSUMwIGludGVycnVwdCAqLwogdm9pZCB1aWMwX2ludGVycnVwdCggdm9pZCAqIHBhcm1zKQogewpAQCAtMzU3LDggKzQyMyw5IEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNDQwKSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpCi0vKiBIYW5kbGVyIGZvciBVSUMxIGludGVycnVwdCAqLworI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKKy8qIEhhbmRsZXIgZm9yIFVJQzIgaW50ZXJydXB0ICovCiB2b2lkIHVpYzJfaW50ZXJydXB0KCB2b2lkICogcGFybXMpCiB7CiAJdWxvbmcgdWljMl9tc3I7CkBAIC0zODQsNyArNDUxLDcgQEAKIAkJCQkoKmlycV92ZWNzMlt2ZWNdLmhhbmRsZXIpKGlycV92ZWNzMlt2ZWNdLmFyZyk7CiAJCQl9IGVsc2UgewogCQkJCW10ZGNyKHVpYzJlciwgbWZkY3IodWljMmVyKSAmIH4oMHg4MDAwMDAwMCA+PiB2ZWMpKTsKLQkJCQlwcmludGYgKCJNYXNraW5nIGJvZ3VzIGludGVycnVwdCB2ZWN0b3IgKHVpYzEpIDB4JXhcbiIsIHZlYyk7CisJCQkJcHJpbnRmICgiTWFza2luZyBib2d1cyBpbnRlcnJ1cHQgdmVjdG9yICh1aWMyKSAweCV4XG4iLCB2ZWMpOwogCQkJfQogCiAJCQkvKgpAQCAtNDAyLDYgKzQ2OSw1MSBAQAogfQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzQ0MEdYKSAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKQorLyogSGFuZGxlciBmb3IgVUlDMyBpbnRlcnJ1cHQgKi8KK3ZvaWQgdWljM19pbnRlcnJ1cHQoIHZvaWQgKiBwYXJtcykKK3sKKwl1bG9uZyB1aWMzX21zcjsKKwl1bG9uZyBtc3Jfc2hpZnQ7CisJaW50IHZlYzsKKworCS8qCisJICogUmVhZCBtYXNrZWQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBkZXRlcm1pbmUgaW50ZXJydXB0IHNvdXJjZQorCSAqLworCXVpYzNfbXNyID0gbWZkY3IodWljM21zcik7CisJbXNyX3NoaWZ0ID0gdWljM19tc3I7CisJdmVjID0gMDsKKworCXdoaWxlIChtc3Jfc2hpZnQgIT0gMCkgeworCQlpZiAobXNyX3NoaWZ0ICYgMHg4MDAwMDAwMCkgeworCQkJLyoKKwkJCSAqIEluY3JlbWVudCBpcnEgY291bnRlciAoZm9yIGRlYnVnIHB1cnBvc2Ugb25seSkKKwkJCSAqLworCQkJaXJxX3ZlY3MzW3ZlY10uY291bnQrKzsKKworCQkJaWYgKGlycV92ZWNzM1t2ZWNdLmhhbmRsZXIgIT0gTlVMTCkgeworCQkJCS8qIGNhbGwgaXNyICovCisJCQkJKCppcnFfdmVjczNbdmVjXS5oYW5kbGVyKShpcnFfdmVjczNbdmVjXS5hcmcpOworCQkJfSBlbHNlIHsKKwkJCQltdGRjcih1aWMzZXIsIG1mZGNyKHVpYzNlcikgJiB+KDB4ODAwMDAwMDAgPj4gdmVjKSk7CisJCQkJcHJpbnRmICgiTWFza2luZyBib2d1cyBpbnRlcnJ1cHQgdmVjdG9yICh1aWMzKSAweCV4XG4iLCB2ZWMpOworCQkJfQorCisJCQkvKgorCQkJICogQWZ0ZXIgc2VydmljaW5nIHRoZSBpbnRlcnJ1cHQsIHdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBzdGF0dXMgaW5kaWNhdG9yLgorCQkJICovCisJCQltdGRjcih1aWMzc3IsICgweDgwMDAwMDAwID4+IHZlYykpOworCQl9CisKKwkJLyoKKwkJICogU2hpZnQgbXNyIHRvIG5leHQgcG9zaXRpb24gYW5kIGluY3JlbWVudCB2ZWN0b3IKKwkJICovCisJCW1zcl9zaGlmdCA8PD0gMTsKKwkJdmVjKys7CisJfQorfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC00MTQsNyArNTI2LDggQEAKIAlpbnQgaSA9IHZlYzsKIAogI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJaWYgKCh2ZWMgPiAzMSkgJiYgKHZlYyA8IDY0KSkgewogCQlpID0gdmVjIC0gMzI7CiAJCWlycWEgPSBpcnFfdmVjczE7CkBAIC00NDEsNyArNTU0LDggQEAKIAlpcnFhW2ldLmFyZyA9IGFyZzsKIAogI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJaWYgKCh2ZWMgPiAzMSkgJiYgKHZlYyA8IDY0KSkKIAkJbXRkY3IgKHVpYzFlciwgbWZkY3IgKHVpYzFlcikgfCAoMHg4MDAwMDAwMCA+PiBpKSk7CiAJZWxzZSBpZiAodmVjID4gNjMpCkBAIC00NjQsNyArNTc4LDggQEAKIAlpbnQgaSA9IHZlYzsKIAogI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJaWYgKCh2ZWMgPiAzMSkgJiYgKHZlYyA8IDY0KSkgewogCQlpcnFhID0gaXJxX3ZlY3MxOwogCQlpID0gdmVjIC0gMzI7CkBAIC00ODUsNyArNjAwLDggQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKIAlpZiAoKHZlYyA+IDMxKSAmJiAodmVjIDwgNjQpKQogCQltdGRjciAodWljMWVyLCBtZmRjciAodWljMWVyKSAmIH4oMHg4MDAwMDAwMCA+PiBpKSk7CiAJZWxzZSBpZiAodmVjID4gNjMpCkBAIC01NTMsNyArNjY5LDggQEAKIAlwcmludGYoIlxuIik7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKIAlwcmludGYgKCJcblVJQyAyXG4iKTsKIAlwcmludGYgKCJOciAgUm91dGluZSAgIEFyZyAgICAgICBDb3VudFxuIik7CiAKQEAgLTU2Niw2ICs2ODMsMTkgQEAKIAlwcmludGYoIlxuIik7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKKwlwcmludGYgKCJcblVJQyAzXG4iKTsKKwlwcmludGYgKCJOciAgUm91dGluZSAgIEFyZyAgICAgICBDb3VudFxuIik7CisKKwlmb3IgKHZlYz0wOyB2ZWM8MzI7IHZlYysrKSB7CisJCWlmIChpcnFfdmVjczNbdmVjXS5oYW5kbGVyICE9IE5VTEwpCisJCQlwcmludGYgKCIlMDJkICAlMDhseCAgJTA4bHggICVkXG4iLAorCQkJCQl2ZWMrNjMsICh1bG9uZylpcnFfdmVjczNbdmVjXS5oYW5kbGVyLAorCQkJCQkodWxvbmcpaXJxX3ZlY3MzW3ZlY10uYXJnLCBpcnFfdmVjczNbdmVjXS5jb3VudCk7CisJfQorCXByaW50ZigiXG4iKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgIC8qIENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSVJRICovCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L21paXBoeS5jIGIvY3B1L3BwYzR4eC9taWlwaHkuYwppbmRleCBmMjZmMmEyLi42Yjk4MDI1IDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L21paXBoeS5jCisrKyBiL2NwdS9wcGM0eHgvbWlpcGh5LmMKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlIDw0MDVfbWFsLmg+CiAjaW5jbHVkZSA8bWlpcGh5Lmg+CiAKLQorI3VuZGVmIEVUX0RFQlVHCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEdW1wIG91dCB0byB0aGUgc2NyZWVuIFBIWSByZWdzCQkJICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTkwLDYgKzkwLDEwIEBACiAJCVBIWV9BTkxQQVJfMTApOwogCW1paXBoeV93cml0ZSAoZGV2bmFtZSwgYWRkciwgUEhZX0FOQVIsIGFkdik7CiAKKwltaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZXzEwMDBCVENSLCAmYWR2KTsKKwlhZHYgfD0gKDB4MDMwMCk7CisJbWlpcGh5X3dyaXRlIChkZXZuYW1lLCBhZGRyLCBQSFlfMTAwMEJUQ1IsIGFkdik7CisKIAkvKiBTdGFydC9SZXN0YXJ0IGFuZWcgKi8KIAltaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZX0JNQ1IsICZjdGwpOwogCWN0bCB8PSAoUEhZX0JNQ1JfQVVUT04gfCBQSFlfQk1DUl9SU1RfTkVHKTsKQEAgLTEwNCw3ICsxMDgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdW5zaWduZWQgaW50IG1paXBoeV9nZXRlbWFjX29mZnNldCAodm9pZCkKIHsKLSNpZiAoZGVmaW5lZChDT05GSUdfNDQwKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwU1ApKSAmJiBkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpCisjaWYgKGRlZmluZWQoQ09ORklHXzQ0MCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MFNQKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwU1BFKSkgJiYgZGVmaW5lZChDT05GSUdfTkVUX01VTFRJKQogCXVuc2lnbmVkIGxvbmcgem1paTsKIAl1bnNpZ25lZCBsb25nIGVvZmZzZXQ7CiAKQEAgLTE1NSwxMCArMTU5LDEyIEBACiAJaSA9IDA7CiAKIAkvKiBzZWUgaWYgaXQgaXMgcmVhZHkgZm9yICBzZWMgKi8KLQl3aGlsZSAoKGluMzIgKEVNQUNfU1RBQ1IgKyBlbWFjX3JlZykgJiBFTUFDX1NUQUNSX09DKSA9PSAwKSB7CisJd2hpbGUgKChpbjMyIChFTUFDX1NUQUNSICsgZW1hY19yZWcpICYgRU1BQ19TVEFDUl9PQykgPT0gRU1BQ19TVEFDUl9PQ19NQVNLKSB7CiAJCXVkZWxheSAoNyk7CiAJCWlmIChpID4gNSkgewotI2lmIDAKKyNpZmRlZiBFVF9ERUJVRworCQkJc3RhX3JlZyA9IGluMzIgKEVNQUNfU1RBQ1IgKyBlbWFjX3JlZyk7CisJCQlwcmludGYgKCJyZWFkIDogRU1BQ19TVEFDUj0weCUweFxuIiwgc3RhX3JlZyk7CS8qIHRlc3Qtb25seSAqLwogCQkJcHJpbnRmICgicmVhZCBlcnIgMVxuIik7CiAjZW5kaWYKIAkJCXJldHVybiAtMTsKQEAgLTE2NywzMSArMTczLDQ0IEBACiAJfQogCXN0YV9yZWcgPSByZWc7CQkvKiByZWcgYWRkcmVzcyAqLwogCS8qIHNldCBjbG9jayAoNTBNaHopIGFuZCByZWFkIGZsYWdzICovCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpCi0Jc3RhX3JlZyB8PSBFTUFDX1NUQUNSX1JFQUQ7CisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorI2lmIGRlZmluZWQoQ09ORklHX0lCTV9FTUFDNF9WNCkgICAgICAvKiBFTUFDNCBWNCBjaGFuZ2VkIGJpdCBzZXR0aW5nICovCisJCXN0YV9yZWcgPSAoc3RhX3JlZyAmIH5FTUFDX1NUQUNSX09QX01BU0spIHwgRU1BQ19TVEFDUl9SRUFEOworI2Vsc2UKKwkJc3RhX3JlZyB8PSBFTUFDX1NUQUNSX1JFQUQ7CisjZW5kaWYKICNlbHNlCiAJc3RhX3JlZyA9IChzdGFfcmVnIHwgRU1BQ19TVEFDUl9SRUFEKSAmIH5FTUFDX1NUQUNSX0NMS18xMDBNSFo7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1BIWV9DTEtfRlJFUSkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MEdYKQorI2lmIGRlZmluZWQoQ09ORklHX1BIWV9DTEtfRlJFUSkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MEdYKSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHXzQ0MFNQKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwU1BFKSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHXzQ0MEVQWCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MEdSWCkKIAlzdGFfcmVnID0gc3RhX3JlZyB8IENPTkZJR19QSFlfQ0xLX0ZSRVE7CiAjZW5kaWYKIAlzdGFfcmVnID0gc3RhX3JlZyB8IChhZGRyIDw8IDUpOwkvKiBQaHkgYWRkcmVzcyAqLwotCisJc3RhX3JlZyA9IHN0YV9yZWcgfCBFTUFDX1NUQUNSX09DX01BU0s7CS8qIG5ldyBJQk0gZW1hYyB2NCAqLwogCW91dDMyIChFTUFDX1NUQUNSICsgZW1hY19yZWcsIHN0YV9yZWcpOwotI2lmIDAJCQkJLyogdGVzdC1vbmx5ICovCisjaWZkZWYgRVRfREVCVUcKIAlwcmludGYgKCJhMjogd3JpdGU6IEVNQUNfU1RBQ1I9MHglMHhcbiIsIHN0YV9yZWcpOwkvKiB0ZXN0LW9ubHkgKi8KICNlbmRpZgogCiAJc3RhX3JlZyA9IGluMzIgKEVNQUNfU1RBQ1IgKyBlbWFjX3JlZyk7CisjaWZkZWYgRVRfREVCVUcKKwkJcHJpbnRmICgiYTIxOiByZWFkIDogRU1BQ19TVEFDUj0weCUweFxuIiwgc3RhX3JlZyk7CS8qIHRlc3Qtb25seSAqLworI2VuZGlmCiAJaSA9IDA7Ci0Jd2hpbGUgKChzdGFfcmVnICYgRU1BQ19TVEFDUl9PQykgPT0gMCkgeworCXdoaWxlICgoc3RhX3JlZyAmIEVNQUNfU1RBQ1JfT0MpID09IEVNQUNfU1RBQ1JfT0NfTUFTSykgewogCQl1ZGVsYXkgKDcpOwogCQlpZiAoaSA+IDUpIHsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpKys7CiAJCXN0YV9yZWcgPSBpbjMyIChFTUFDX1NUQUNSICsgZW1hY19yZWcpOworI2lmZGVmIEVUX0RFQlVHCisJCXByaW50ZiAoImEyMjogcmVhZCA6IEVNQUNfU1RBQ1I9MHglMHhcbiIsIHN0YV9yZWcpOwkvKiB0ZXN0LW9ubHkgKi8KKyNlbmRpZgogCX0KIAlpZiAoKHN0YV9yZWcgJiBFTUFDX1NUQUNSX1BIWUUpICE9IDApIHsKIAkJcmV0dXJuIC0xOwpAQCAtMjE5LDcgKzIzOCw3IEBACiAJLyogc2VlIGlmIGl0IGlzIHJlYWR5IGZvciAxMDAwIG5zZWMgKi8KIAlpID0gMDsKIAotCXdoaWxlICgoaW4zMiAoRU1BQ19TVEFDUiArIGVtYWNfcmVnKSAmIEVNQUNfU1RBQ1JfT0MpID09IDApIHsKKwl3aGlsZSAoKGluMzIgKEVNQUNfU1RBQ1IgKyBlbWFjX3JlZykgJiBFTUFDX1NUQUNSX09DKSA9PSBFTUFDX1NUQUNSX09DX01BU0spIHsKIAkJaWYgKGkgPiA1KQogCQkJcmV0dXJuIC0xOwogCQl1ZGVsYXkgKDcpOwpAQCAtMjI4LDE2ICsyNDcsMjQgQEAKIAlzdGFfcmVnID0gMDsKIAlzdGFfcmVnID0gcmVnOwkJLyogcmVnIGFkZHJlc3MgKi8KIAkvKiBzZXQgY2xvY2sgKDUwTWh6KSBhbmQgcmVhZCBmbGFncyAqLwotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQotCXN0YV9yZWcgfD0gRU1BQ19TVEFDUl9XUklURTsKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1BFKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCisjaWYgZGVmaW5lZChDT05GSUdfSUJNX0VNQUM0X1Y0KSAgICAgIC8qIEVNQUM0IFY0IGNoYW5nZWQgYml0IHNldHRpbmcgKi8KKwkJc3RhX3JlZyA9IChzdGFfcmVnICYgfkVNQUNfU1RBQ1JfT1BfTUFTSykgfCBFTUFDX1NUQUNSX1dSSVRFOworI2Vsc2UKKwkJc3RhX3JlZyB8PSBFTUFDX1NUQUNSX1dSSVRFOworI2VuZGlmCiAjZWxzZQogCXN0YV9yZWcgPSAoc3RhX3JlZyB8IEVNQUNfU1RBQ1JfV1JJVEUpICYgfkVNQUNfU1RBQ1JfQ0xLXzEwME1IWjsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfUEhZX0NMS19GUkVRKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1gpCisjaWYgZGVmaW5lZChDT05GSUdfUEhZX0NMS19GUkVRKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1gpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfNDQwU1ApICYmICFkZWZpbmVkKENPTkZJR180NDBTUEUpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfNDQwRVBYKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1JYKQogCXN0YV9yZWcgPSBzdGFfcmVnIHwgQ09ORklHX1BIWV9DTEtfRlJFUTsJLyogU2V0IGNsb2NrIGZyZXF1ZW5jeSAoUExCIGZyZXEuIGRlcGVuZGVuZCkgKi8KICNlbmRpZgotCXN0YV9yZWcgPSBzdGFfcmVnIHwgKCh1bnNpZ25lZCBsb25nKSBhZGRyIDw8IDUpOwkvKiBQaHkgYWRkcmVzcyAqLworCXN0YV9yZWcgPSBzdGFfcmVnIHwgKCh1bnNpZ25lZCBsb25nKSBhZGRyIDw8IDUpOy8qIFBoeSBhZGRyZXNzICovCisJc3RhX3JlZyA9IHN0YV9yZWcgfCBFTUFDX1NUQUNSX09DX01BU0s7CQkvKiBuZXcgSUJNIGVtYWMgdjQgKi8KIAltZW1jcHkgKCZzdGFfcmVnLCAmdmFsdWUsIDIpOwkvKiBwdXQgaW4gZGF0YSAqLwogCiAJb3V0MzIgKEVNQUNfU1RBQ1IgKyBlbWFjX3JlZywgc3RhX3JlZyk7CkBAIC0yNDUsMTIgKzI3MiwxOCBAQAogCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlpID0gMDsKIAlzdGFfcmVnID0gaW4zMiAoRU1BQ19TVEFDUiArIGVtYWNfcmVnKTsKLQl3aGlsZSAoKHN0YV9yZWcgJiBFTUFDX1NUQUNSX09DKSA9PSAwKSB7CisjaWZkZWYgRVRfREVCVUcKKwkJcHJpbnRmICgiYTMxOiByZWFkIDogRU1BQ19TVEFDUj0weCUweFxuIiwgc3RhX3JlZyk7CS8qIHRlc3Qtb25seSAqLworI2VuZGlmCisJd2hpbGUgKChzdGFfcmVnICYgRU1BQ19TVEFDUl9PQykgPT0gRU1BQ19TVEFDUl9PQ19NQVNLKSB7CiAJCXVkZWxheSAoNyk7CiAJCWlmIChpID4gNSkKIAkJCXJldHVybiAtMTsKIAkJaSsrOwogCQlzdGFfcmVnID0gaW4zMiAoRU1BQ19TVEFDUiArIGVtYWNfcmVnKTsKKyNpZmRlZiBFVF9ERUJVRworCQlwcmludGYgKCJhMzI6IHJlYWQgOiBFTUFDX1NUQUNSPTB4JTB4XG4iLCBzdGFfcmVnKTsJLyogdGVzdC1vbmx5ICovCisjZW5kaWYKIAl9CiAKIAlpZiAoKHN0YV9yZWcgJiBFTUFDX1NUQUNSX1BIWUUpICE9IDApCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L25kZmMuYyBiL2NwdS9wcGM0eHgvbmRmYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNTVmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvcHBjNHh4L25kZmMuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIE92ZXJ2aWV3OgorICogICBQbGF0Zm9ybSBpbmRlcGVuZGVuZCBkcml2ZXIgZm9yIE5ERkMgKE5hbkQgRmxhc2ggQ29udHJvbGxlcikKKyAqICAgaW50ZWdyYXRlZCBpbnRvIEVQNDQwIGNvcmVzCisgKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisgKgorICogQmFzZWQgb24gb3JpZ2luYWwgd29yayBieQorICoJVGhvbWFzIEdsZWl4bmVyCisgKglDb3B5cmlnaHQgMjAwNiBJQk0KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKSAmJiAhZGVmaW5lZChDRkdfTkFORF9MRUdBQ1kpICYmIFwKKwkoZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fAkgICAgIFwKKwkgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpKQorCisjaW5jbHVkZSA8bmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uZGZjLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHBwYzQ0MC5oPgorCitzdGF0aWMgdTggaHdjdGwgPSAwOworCitzdGF0aWMgdm9pZCBuZGZjX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE5BTkRfQ1RMX1NFVENMRToKKwkJaHdjdGwgfD0gMHgxOworCQlicmVhazsKKworCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgorCQlod2N0bCAmPSB+MHgxOworCQlicmVhazsKKworCWNhc2UgTkFORF9DVExfU0VUQUxFOgorCQlod2N0bCB8PSAweDI7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NUTF9DTFJBTEU6CisJCWh3Y3RsICY9IH4weDI7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgbmRmY193cml0ZV9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbywgdV9jaGFyIGJ5dGUpCit7CisgICAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGRpbmZvLT5wcml2OworICAgICAgICB1bG9uZyBiYXNlID0gKHVsb25nKSB0aGlzLT5JT19BRERSX1c7CisKKwlpZiAoaHdjdGwgJiAweDEpCisJCW91dDgoYmFzZSArIE5ERkNfQ01ELCBieXRlKTsKKwllbHNlIGlmIChod2N0bCAmIDB4MikKKwkJb3V0OChiYXNlICsgTkRGQ19BTEUsIGJ5dGUpOworCWVsc2UKKwkJb3V0OChiYXNlICsgTkRGQ19EQVRBLCBieXRlKTsKK30KKworc3RhdGljIHVfY2hhciBuZGZjX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8pCit7CisgICAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGRpbmZvLT5wcml2OworICAgICAgICB1bG9uZyBiYXNlID0gKHVsb25nKSB0aGlzLT5JT19BRERSX1c7CisKKwlyZXR1cm4gKGluOChiYXNlICsgTkRGQ19EQVRBKSk7Cit9CisKK3N0YXRpYyBpbnQgbmRmY19kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGRpbmZvKQoreworICAgICAgICBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkaW5mby0+cHJpdjsKKyAgICAgICAgdWxvbmcgYmFzZSA9ICh1bG9uZykgdGhpcy0+SU9fQUREUl9XOworCisJd2hpbGUgKCEoaW4zMihiYXNlICsgTkRGQ19TVEFUKSAmIE5ERkNfU1RBVF9JU19SRUFEWSkpCisJCTsKKworCXJldHVybiAxOworfQorCisjaWZuZGVmIENPTkZJR19OQU5EX1NQTAorLyoKKyAqIERvbid0IHVzZSB0aGVzZSBzcGVlZHVwIGZ1bmN0aW9ucyBpbiBOQU5EIGJvb3QgaW1hZ2UsIHNpbmNlIHRoZSBpbWFnZQorICogaGFzIHRvIGZpdCBpbnRvIDRrQnl0ZS4KKyAqLworCisvKgorICogU3BlZWR1cHMgZm9yIGJ1ZmZlciByZWFkL3dyaXRlL3ZlcmlmeQorICoKKyAqIE5ERkMgYWxsb3dzIDMyYml0IHJlYWQvd3JpdGUgb2YgZGF0YS4gU28gd2UgY2FuIHNwZWVkIHVwIHRoZSBidWZmZXIKKyAqIGZ1bmN0aW9ucy4gTm8gZnVydGhlciBjaGVja2luZywgYXMgbmFuZF9iYXNlIHdpbGwgYWx3YXlzIHJlYWQvd3JpdGUKKyAqIHBhZ2UgYWxpZ25lZC4KKyAqLworc3RhdGljIHZvaWQgbmRmY19yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZGluZm8tPnByaXY7CisgICAgICAgIHVsb25nIGJhc2UgPSAodWxvbmcpIHRoaXMtPklPX0FERFJfVzsKKwl1aW50MzJfdCAqcCA9ICh1aW50MzJfdCAqKSBidWY7CisKKwlmb3IoO2xlbiA+IDA7IGxlbiAtPSA0KQorCQkqcCsrID0gaW4zMihiYXNlICsgTkRGQ19EQVRBKTsKK30KKworc3RhdGljIHZvaWQgbmRmY193cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGRpbmZvLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisgICAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGRpbmZvLT5wcml2OworICAgICAgICB1bG9uZyBiYXNlID0gKHVsb25nKSB0aGlzLT5JT19BRERSX1c7CisJdWludDMyX3QgKnAgPSAodWludDMyX3QgKikgYnVmOworCisJZm9yKDsgbGVuID4gMDsgbGVuIC09IDQpCisJCW91dDMyKGJhc2UgKyBOREZDX0RBVEEsICpwKyspOworfQorCitzdGF0aWMgaW50IG5kZmNfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKyAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZGluZm8tPnByaXY7CisgICAgICAgIHVsb25nIGJhc2UgPSAodWxvbmcpIHRoaXMtPklPX0FERFJfVzsKKwl1aW50MzJfdCAqcCA9ICh1aW50MzJfdCAqKSBidWY7CisKKwlmb3IoOyBsZW4gPiAwOyBsZW4gLT0gNCkKKwkJaWYgKCpwKysgIT0gaW4zMihiYXNlICsgTkRGQ19EQVRBKSkKKwkJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qICNpZm5kZWYgQ09ORklHX05BTkRfU1BMICovCisKK3ZvaWQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCit7CisJbmFuZC0+ZWNjbW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwluYW5kLT5od2NvbnRyb2wgID0gbmRmY19od2NvbnRyb2w7CisJbmFuZC0+cmVhZF9ieXRlICA9IG5kZmNfcmVhZF9ieXRlOworCW5hbmQtPndyaXRlX2J5dGUgPSBuZGZjX3dyaXRlX2J5dGU7CisJbmFuZC0+ZGV2X3JlYWR5ICA9IG5kZmNfZGV2X3JlYWR5OworCisjaWZuZGVmIENPTkZJR19OQU5EX1NQTAorCW5hbmQtPndyaXRlX2J1ZiAgPSBuZGZjX3dyaXRlX2J1ZjsKKwluYW5kLT5yZWFkX2J1ZiAgID0gbmRmY19yZWFkX2J1ZjsKKwluYW5kLT52ZXJpZnlfYnVmID0gbmRmY192ZXJpZnlfYnVmOworI2Vsc2UKKwkvKgorCSAqIFNldHVwIEVCQyAoQ1MwIG9ubHkgcmlnaHQgbm93KQorCSAqLworCW10ZGNyKGViY2NmZ2EsIHhiY2ZnKTsKKwltdGRjcihlYmNjZmdkLCAweGI4NDAwMDAwKTsKKworCW10ZWJjKHBiMGNyLCBDRkdfRUJDX1BCMENSKTsKKwltdGViYyhwYjBhcCwgQ0ZHX0VCQ19QQjBBUCk7CisjZW5kaWYKKworCS8qIFNldCBOYW5kRmxhc2ggQ29yZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJLyogQ2hpcCBzZWxlY3QgMywgMWNvbCB4IDIgcm93cyAqLworCW91dDMyKENGR19OQU5EX0JBU0UgKyBOREZDX0NDUiwgMHgwMDAwMDAwMCB8IChDRkdfTkFORF9DUyA8PCAyNCkpOworCW91dDMyKENGR19OQU5EX0JBU0UgKyBOREZDX0JDRkcwICsgKENGR19OQU5EX0NTIDw8IDIpLCAweDgwMDAyMjIyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3NkcmFtLmMgYi9jcHUvcHBjNHh4L3NkcmFtLmMKaW5kZXggZTMxZDU5ZC4uZmFlZWE1YyAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zZHJhbS5jCisrKyBiL2NwdS9wcGM0eHgvc2RyYW0uYwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJCS8qCiAJCSAqIEVuYWJsZSB0aGUgY29udHJvbGxlciwgdGhlbiB3YWl0IGZvciBEQ0VOIHRvIGNvbXBsZXRlCiAJCSAqLwotCQltdHNkcmFtKG1lbV9jZmcwLCAweDg2MDAwMDAwKTsJLyogRENFTj0xLCBQTVVEPTEsIDY0LWJpdAkqLworCQltdHNkcmFtKG1lbV9jZmcwLCAweDgyMDAwMDAwKTsJLyogRENFTj0xLCBQTVVEPTAsIDY0LWJpdAkqLwogCQl1ZGVsYXkoMTAwMDApOwogCiAJCWlmIChnZXRfcmFtX3NpemUoMCwgbWIwY2ZbaV0uc2l6ZSkgPT0gbWIwY2ZbaV0uc2l6ZSkgewpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9zZXJpYWwuYyBiL2NwdS9wcGM0eHgvc2VyaWFsLmMKaW5kZXggODNjOTQ3OS4uZmFiMGQ5NSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zZXJpYWwuYworKysgYi9jcHUvcHBjNHh4L3NlcmlhbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI2NCwxMCArMjY0LDEyIEBACiAjZW5kaWYJLyogQ09ORklHX0lPUDQ4MCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfNDA1R1ApIHx8IGRlZmluZWQoQ09ORklHXzQwNUNSKSB8fCBkZWZpbmVkKENPTkZJR180NDApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKQorI2lmIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBkZWZpbmVkKENPTkZJR180MDVDUikgfHwgZGVmaW5lZChDT05GSUdfNDA1RVApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDApCiAKICNpZiBkZWZpbmVkKENPTkZJR180NDApCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQogI2RlZmluZSBVQVJUMF9CQVNFICBDRkdfUEVSSVBIRVJBTF9CQVNFICsgMHgwMDAwMDMwMAogI2RlZmluZSBVQVJUMV9CQVNFICBDRkdfUEVSSVBIRVJBTF9CQVNFICsgMHgwMDAwMDQwMAogI2Vsc2UKQEAgLTI3NSwxOSArMjc3LDM4IEBACiAjZGVmaW5lIFVBUlQxX0JBU0UgIENGR19QRVJJUEhFUkFMX0JBU0UgKyAweDAwMDAwMzAwCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpCiAjZGVmaW5lIFVBUlQyX0JBU0UgIENGR19QRVJJUEhFUkFMX0JBU0UgKyAweDAwMDAwNjAwCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKQotI2RlZmluZSBDUjBfTUFTSyAgICAgICAgMHhkZmZmZmZmZgotI2RlZmluZSBDUjBfRVhUQ0xLX0VOQSAgMHgwMDgwMDAwMAotI2RlZmluZSBDUjBfVURJVl9QT1MgICAgMAotI2Vsc2UKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHUCkKICNkZWZpbmUgQ1IwX01BU0sgICAgICAgIDB4M2ZmZjAwMDAKICNkZWZpbmUgQ1IwX0VYVENMS19FTkEgIDB4MDA2MDAwMDAKICNkZWZpbmUgQ1IwX1VESVZfUE9TICAgIDE2Ci0jZW5kaWYgLyogQ09ORklHXzQ0MEdYICovCisjZGVmaW5lIFVESVZfU1VCVFJBQ1QJMQorI2RlZmluZSBVQVJUMF9TRFIJY250cmwwCisjZGVmaW5lIE1GUkVHKGEsIGQpCWQgPSBtZmRjcihhKQorI2RlZmluZSBNVFJFRyhhLCBkKQltdGRjcihhLCBkKQorI2Vsc2UgLyogI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdQKSAqLworLyogYWxsIG90aGVyIDQ0MCBQUEMncyBhY2Nlc3MgY2xvY2sgZGl2aWRlciB2aWEgc2RyIHJlZ2lzdGVyICovCisjZGVmaW5lIENSMF9NQVNLICAgICAgICAweGRmZmZmZmZmCisjZGVmaW5lIENSMF9FWFRDTEtfRU5BICAweDAwODAwMDAwCisjZGVmaW5lIENSMF9VRElWX1BPUyAgICAwCisjZGVmaW5lIFVESVZfU1VCVFJBQ1QJMAorI2RlZmluZSBVQVJUMF9TRFIJc2RyX3VhcnQwCisjZGVmaW5lIFVBUlQxX1NEUglzZHJfdWFydDEKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVB4KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSeCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUGUpCisjZGVmaW5lIFVBUlQyX1NEUglzZHJfdWFydDIKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUHgpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgZGVmaW5lZChDT05GSUdfNDQwR1J4KQorI2RlZmluZSBVQVJUM19TRFIJc2RyX3VhcnQzCisjZW5kaWYKKyNkZWZpbmUgTUZSRUcoYSwgZCkJbWZzZHIoYSwgZCkKKyNkZWZpbmUgTVRSRUcoYSwgZCkJbXRzZHIoYSwgZCkKKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChDT05GSUdfNDQwR1ApICovCiAjZWxpZiBkZWZpbmVkKENPTkZJR180MDVFUCkKICNkZWZpbmUgVUFSVDBfQkFTRSAgICAgIDB4ZWY2MDAzMDAKICNkZWZpbmUgVUFSVDFfQkFTRSAgICAgIDB4ZWY2MDA0MDAKQEAgLTMwOSwxNyArMzMwLDE1IEBACiAjaWYgZGVmaW5lZChDT05GSUdfVUFSVDFfQ09OU09MRSkKICNkZWZpbmUgQUNUSU5HX1VBUlQwX0JBU0UJVUFSVDFfQkFTRQogI2RlZmluZSBBQ1RJTkdfVUFSVDFfQkFTRQlVQVJUMF9CQVNFCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApCi0jZGVmaW5lIFVBUlQwX1NEUiAgICAgICAgICAgc2RyX3VhcnQxCi0jZGVmaW5lIFVBUlQxX1NEUiAgICAgICAgICAgc2RyX3VhcnQwCi0jZW5kaWYgLyogQ09ORklHXzQ0MEdYICovCiAjZWxzZQogI2RlZmluZSBBQ1RJTkdfVUFSVDBfQkFTRQlVQVJUMF9CQVNFCiAjZGVmaW5lIEFDVElOR19VQVJUMV9CQVNFCVVBUlQxX0JBU0UKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKLSNkZWZpbmUgVUFSVDBfU0RSICAgICAgICAgICBzZHJfdWFydDAKLSNkZWZpbmUgVUFSVDFfU0RSICAgICAgICAgICBzZHJfdWFydDEKLSNlbmRpZiAvKiBDT05GSUdfNDQwR1ggKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01VTFRJKQorI2RlZmluZSBVQVJUX0JBU0UJZGV2X2Jhc2UKKyNlbHNlCisjZGVmaW5lIFVBUlRfQkFTRQlBQ1RJTkdfVUFSVDBfQkFTRQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR180MDVFUCkgJiYgZGVmaW5lZChDRkdfRVhUX1NFUklBTF9DTE9DSykKQEAgLTQxNSw3ICs0MzQsNyBAQAogCSpwYmRpdiA9IGRpdi91ZGl2OwogCiB9Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNDQwKSAmJiAhZGVmaW5lZChDRkdfRVhUX1NFUklBTF9DTEsgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR180NDApICYmICFkZWZpbmVkKENGR19FWFRfU0VSSUFMX0NMSykgKi8KIAogLyoKICAqIE1pbmltYWwgc2VyaWFsIGZ1bmN0aW9ucyBuZWVkZWQgdG8gdXNlIG9uZSBvZiB0aGUgU01DIHBvcnRzCkBAIC00MzcsMjIgKzQ1Niw5IEBACiAJdW5zaWduZWQgbG9uZyB0bXA7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCi0JaWYgKFVBUlQwX0JBU0UgPT0gZGV2X2Jhc2UpIHsKLQkJbWZzZHIoVUFSVDBfU0RSLHJlZyk7Ci0JCXJlZyAmPSB+Q1IwX01BU0s7Ci0JfSBlbHNlIHsKLQkJbWZzZHIoVUFSVDFfU0RSLHJlZyk7Ci0JCXJlZyAmPSB+Q1IwX01BU0s7Ci0JfQotI2Vsc2UKLQltZnNkcihVQVJUMF9TRFIscmVnKTsKKwlNRlJFRyhVQVJUMF9TRFIsIHJlZyk7CiAJcmVnICY9IH5DUjBfTUFTSzsKLSNlbmRpZgotI2Vsc2UKLQlyZWcgPSBtZmRjcihjbnRybDApICYgfkNSMF9NQVNLOwotI2VuZGlmIC8qIENPTkZJR180NDBHWCAqLworCiAjaWZkZWYgQ0ZHX0VYVF9TRVJJQUxfQ0xPQ0sKIAlyZWcgfD0gQ1IwX0VYVENMS19FTkE7CiAJdWRpdiA9IDE7CkBAIC00NjYsNDUgKzQ3MiwzNCBAQAogCXNlcmlhbF9kaXZzIChnZC0+YmF1ZHJhdGUsICZ1ZGl2LCAmYmRpdik7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKQotCXJlZyB8PSB1ZGl2IDw8IENSMF9VRElWX1BPUzsJLyogc2V0IHRoZSBVQVJUIGRpdmlzb3IgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCi0JaWYgKFVBUlQwX0JBU0UgPT0gZGV2X2Jhc2UpIHsKLQkJbXRzZHIgKFVBUlQwX1NEUixyZWcpOwotCX0gZWxzZSB7Ci0JCW10c2RyIChVQVJUMV9TRFIscmVnKTsKLQl9Ci0jZWxzZQotCW10c2RyIChVQVJUMF9TRFIscmVnKTsKKwlyZWcgfD0gKHVkaXYgLSBVRElWX1NVQlRSQUNUKSA8PCBDUjBfVURJVl9QT1M7CS8qIHNldCB0aGUgVUFSVCBkaXZpc29yICovCisKKwkvKgorCSAqIENvbmZpZ3VyZSBpbnB1dCBjbG9jayB0byBiYXVkcmF0ZSBnZW5lcmF0b3IgZm9yIGFsbAorCSAqIGF2YWlsYWJsZSBzZXJpYWwgcG9ydHMgaGVyZQorCSAqLworCU1UUkVHKFVBUlQwX1NEUiwgcmVnKTsKKyNpZiBkZWZpbmVkKFVBUlQxX1NEUikKKwlNVFJFRyhVQVJUMV9TRFIsIHJlZyk7CiAjZW5kaWYKLSNlbHNlCi0JcmVnIHw9ICh1ZGl2IC0gMSkgPDwgQ1IwX1VESVZfUE9TOwkvKiBzZXQgdGhlIFVBUlQgZGl2aXNvciAqLwotCW10ZGNyIChjbnRybDAsIHJlZyk7CisjaWYgZGVmaW5lZChVQVJUMl9TRFIpCisJTVRSRUcoVUFSVDJfU0RSLCByZWcpOworI2VuZGlmCisjaWYgZGVmaW5lZChVQVJUM19TRFIpCisJTVRSRUcoVUFSVDNfU0RSLCByZWcpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCi0Jb3V0OCAoZGV2X2Jhc2UgKyBVQVJUX0xDUiwgMHg4MCk7CS8qIHNldCBETEFCIGJpdCAqLwotCW91dDggKGRldl9iYXNlICsgVUFSVF9ETEwsIGJkaXYpOwkvKiBzZXQgYmF1ZHJhdGUgZGl2aXNvciAqLwotCW91dDggKGRldl9iYXNlICsgVUFSVF9ETE0sIGJkaXYgPj4gOCk7Lyogc2V0IGJhdWRyYXRlIGRpdmlzb3IgKi8KLQlvdXQ4IChkZXZfYmFzZSArIFVBUlRfTENSLCAweDAzKTsJLyogY2xlYXIgRExBQjsgc2V0IDggYml0cywgbm8gcGFyaXR5ICovCi0Jb3V0OCAoZGV2X2Jhc2UgKyBVQVJUX0ZDUiwgMHgwMCk7CS8qIGRpc2FibGUgRklGTyAqLwotCW91dDggKGRldl9iYXNlICsgVUFSVF9NQ1IsIDB4MDApOwkvKiBubyBtb2RlbSBjb250cm9sIERUUiBSVFMgKi8KLQl2YWwgPSBpbjggKGRldl9iYXNlICsgVUFSVF9MU1IpOwkvKiBjbGVhciBsaW5lIHN0YXR1cyAqLwotCXZhbCA9IGluOCAoZGV2X2Jhc2UgKyBVQVJUX1JCUik7CS8qIHJlYWQgcmVjZWl2ZSBidWZmZXIgKi8KLQlvdXQ4IChkZXZfYmFzZSArIFVBUlRfU0NSLCAweDAwKTsJLyogc2V0IHNjcmF0Y2hwYWQgKi8KLQlvdXQ4IChkZXZfYmFzZSArIFVBUlRfSUVSLCAweDAwKTsJLyogc2V0IGludGVycnVwdCBlbmFibGUgcmVnICovCi0jZWxzZQotCW91dDggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9MQ1IsIDB4ODApOwkvKiBzZXQgRExBQiBiaXQgKi8KLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfRExMLCBiZGl2KTsJLyogc2V0IGJhdWRyYXRlIGRpdmlzb3IgKi8KLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfRExNLCBiZGl2ID4+IDgpOy8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCi0Jb3V0OCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX0xDUiwgMHgwMyk7CS8qIGNsZWFyIERMQUI7IHNldCA4IGJpdHMsIG5vIHBhcml0eSAqLwotCW91dDggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9GQ1IsIDB4MDApOwkvKiBkaXNhYmxlIEZJRk8gKi8KLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfTUNSLCAweDAwKTsJLyogbm8gbW9kZW0gY29udHJvbCBEVFIgUlRTICovCi0JdmFsID0gaW44IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfTFNSKTsJLyogY2xlYXIgbGluZSBzdGF0dXMgKi8KLQl2YWwgPSBpbjggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9SQlIpOwkvKiByZWFkIHJlY2VpdmUgYnVmZmVyICovCi0Jb3V0OCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX1NDUiwgMHgwMCk7CS8qIHNldCBzY3JhdGNocGFkICovCi0Jb3V0OCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX0lFUiwgMHgwMCk7CS8qIHNldCBpbnRlcnJ1cHQgZW5hYmxlIHJlZyAqLwotI2VuZGlmCisJb3V0OChVQVJUX0JBU0UgKyBVQVJUX0xDUiwgMHg4MCk7CS8qIHNldCBETEFCIGJpdCAqLworCW91dDgoVUFSVF9CQVNFICsgVUFSVF9ETEwsIGJkaXYpOwkvKiBzZXQgYmF1ZHJhdGUgZGl2aXNvciAqLworCW91dDgoVUFSVF9CQVNFICsgVUFSVF9ETE0sIGJkaXYgPj4gOCk7CS8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCisJb3V0OChVQVJUX0JBU0UgKyBVQVJUX0xDUiwgMHgwMyk7CS8qIGNsZWFyIERMQUI7IHNldCA4IGJpdHMsIG5vIHBhcml0eSAqLworCW91dDgoVUFSVF9CQVNFICsgVUFSVF9GQ1IsIDB4MDApOwkvKiBkaXNhYmxlIEZJRk8gKi8KKwlvdXQ4KFVBUlRfQkFTRSArIFVBUlRfTUNSLCAweDAwKTsJLyogbm8gbW9kZW0gY29udHJvbCBEVFIgUlRTICovCisJdmFsID0gaW44KFVBUlRfQkFTRSArIFVBUlRfTFNSKTsJLyogY2xlYXIgbGluZSBzdGF0dXMgKi8KKwl2YWwgPSBpbjgoVUFSVF9CQVNFICsgVUFSVF9SQlIpOwkvKiByZWFkIHJlY2VpdmUgYnVmZmVyICovCisJb3V0OChVQVJUX0JBU0UgKyBVQVJUX1NDUiwgMHgwMCk7CS8qIHNldCBzY3JhdGNocGFkICovCisJb3V0OChVQVJUX0JBU0UgKyBVQVJUX0lFUiwgMHgwMCk7CS8qIHNldCBpbnRlcnJ1cHQgZW5hYmxlIHJlZyAqLworCiAJcmV0dXJuICgwKTsKIH0KIApAQCAtNTU3LDI5ICs1NTIsMTcgQEAKIAl0bXAgPSBnZC0+YmF1ZHJhdGUgKiB1ZGl2ICogMTY7CiAJYmRpdiA9IChjbGsgKyB0bXAgLyAyKSAvIHRtcDsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKLQlvdXQ4IChkZXZfYmFzZSArIFVBUlRfTENSLCAweDgwKTsJLyogc2V0IERMQUIgYml0ICovCi0Jb3V0OCAoZGV2X2Jhc2UgKyBVQVJUX0RMTCwgYmRpdik7CS8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCi0Jb3V0OCAoZGV2X2Jhc2UgKyBVQVJUX0RMTSwgYmRpdiA+PiA4KTsvKiBzZXQgYmF1ZHJhdGUgZGl2aXNvciAqLwotCW91dDggKGRldl9iYXNlICsgVUFSVF9MQ1IsIDB4MDMpOwkvKiBjbGVhciBETEFCOyBzZXQgOCBiaXRzLCBubyBwYXJpdHkgKi8KLQlvdXQ4IChkZXZfYmFzZSArIFVBUlRfRkNSLCAweDAwKTsJLyogZGlzYWJsZSBGSUZPICovCi0Jb3V0OCAoZGV2X2Jhc2UgKyBVQVJUX01DUiwgMHgwMCk7CS8qIG5vIG1vZGVtIGNvbnRyb2wgRFRSIFJUUyAqLwotCXZhbCA9IGluOCAoZGV2X2Jhc2UgKyBVQVJUX0xTUik7CS8qIGNsZWFyIGxpbmUgc3RhdHVzICovCi0JdmFsID0gaW44IChkZXZfYmFzZSArIFVBUlRfUkJSKTsJLyogcmVhZCByZWNlaXZlIGJ1ZmZlciAqLwotCW91dDggKGRldl9iYXNlICsgVUFSVF9TQ1IsIDB4MDApOwkvKiBzZXQgc2NyYXRjaHBhZCAqLwotCW91dDggKGRldl9iYXNlICsgVUFSVF9JRVIsIDB4MDApOwkvKiBzZXQgaW50ZXJydXB0IGVuYWJsZSByZWcgKi8KLSNlbHNlCi0Jb3V0OCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX0xDUiwgMHg4MCk7CS8qIHNldCBETEFCIGJpdCAqLwotCW91dDggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9ETEwsIGJkaXYpOwkvKiBzZXQgYmF1ZHJhdGUgZGl2aXNvciAqLwotCW91dDggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9ETE0sIGJkaXYgPj4gOCk7Lyogc2V0IGJhdWRyYXRlIGRpdmlzb3IgKi8KLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfTENSLCAweDAzKTsJLyogY2xlYXIgRExBQjsgc2V0IDggYml0cywgbm8gcGFyaXR5ICovCi0Jb3V0OCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX0ZDUiwgMHgwMCk7CS8qIGRpc2FibGUgRklGTyAqLwotCW91dDggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9NQ1IsIDB4MDApOwkvKiBubyBtb2RlbSBjb250cm9sIERUUiBSVFMgKi8KLQl2YWwgPSBpbjggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9MU1IpOwkvKiBjbGVhciBsaW5lIHN0YXR1cyAqLwotCXZhbCA9IGluOCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX1JCUik7CS8qIHJlYWQgcmVjZWl2ZSBidWZmZXIgKi8KLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfU0NSLCAweDAwKTsJLyogc2V0IHNjcmF0Y2hwYWQgKi8KLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfSUVSLCAweDAwKTsJLyogc2V0IGludGVycnVwdCBlbmFibGUgcmVnICovCi0jZW5kaWYKKwlvdXQ4KFVBUlRfQkFTRSArIFVBUlRfTENSLCAweDgwKTsJLyogc2V0IERMQUIgYml0ICovCisJb3V0OChVQVJUX0JBU0UgKyBVQVJUX0RMTCwgYmRpdik7CS8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCisJb3V0OChVQVJUX0JBU0UgKyBVQVJUX0RMTSwgYmRpdiA+PiA4KTsJLyogc2V0IGJhdWRyYXRlIGRpdmlzb3IgKi8KKwlvdXQ4KFVBUlRfQkFTRSArIFVBUlRfTENSLCAweDAzKTsJLyogY2xlYXIgRExBQjsgc2V0IDggYml0cywgbm8gcGFyaXR5ICovCisJb3V0OChVQVJUX0JBU0UgKyBVQVJUX0ZDUiwgMHgwMCk7CS8qIGRpc2FibGUgRklGTyAqLworCW91dDgoVUFSVF9CQVNFICsgVUFSVF9NQ1IsIDB4MDApOwkvKiBubyBtb2RlbSBjb250cm9sIERUUiBSVFMgKi8KKwl2YWwgPSBpbjgoVUFSVF9CQVNFICsgVUFSVF9MU1IpOwkvKiBjbGVhciBsaW5lIHN0YXR1cyAqLworCXZhbCA9IGluOChVQVJUX0JBU0UgKyBVQVJUX1JCUik7CS8qIHJlYWQgcmVjZWl2ZSBidWZmZXIgKi8KKwlvdXQ4KFVBUlRfQkFTRSArIFVBUlRfU0NSLCAweDAwKTsJLyogc2V0IHNjcmF0Y2hwYWQgKi8KKwlvdXQ4KFVBUlRfQkFTRSArIFVBUlRfSUVSLCAweDAwKTsJLyogc2V0IGludGVycnVwdCBlbmFibGUgcmVnICovCisKIAlyZXR1cm4gKDApOwogfQogCkBAIC01OTEsMzUgKzU3NCwxMCBAQAogdm9pZCBzZXJpYWxfc2V0YnJnICh2b2lkKQogI2VuZGlmCiB7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0JdW5zaWduZWQgbG9uZyBjbGs7Ci0JdW5zaWduZWQgbG9uZyB1ZGl2OwotCXVuc2lnbmVkIHNob3J0IGJkaXY7Ci0KLSNpZmRlZiBDRkdfRVhUX1NFUklBTF9DTE9DSwotCWNsayA9IENGR19FWFRfU0VSSUFMX0NMT0NLOwotI2Vsc2UKLQljbGsgPSBnZC0+Y3B1X2NsazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHXzQwNUVQCi0JdWRpdiA9ICgobWZkY3IgKGNwYzBfdWNyKSAmIFVDUjBfTUFTSykgPj4gVUNSMF9VRElWX1BPUyk7Ci0jZWxzZQotCXVkaXYgPSAoKG1mZGNyIChjbnRybDApICYgMHgzZSkgPj4gMSkgKyAxOwotI2VuZGlmIC8qIENPTkZJR180MDVFUCAqLwotCXRtcCA9IGdkLT5iYXVkcmF0ZSAqIHVkaXYgKiAxNjsKLQliZGl2ID0gKGNsayArIHRtcCAvIDIpIC8gdG1wOwotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01VTFRJKQotCW91dDggKGRldl9iYXNlICsgVUFSVF9MQ1IsIDB4ODApOwkvKiBzZXQgRExBQiBiaXQgKi8KLQlvdXQ4IChkZXZfYmFzZSArIFVBUlRfRExMLCBiZGl2KTsJLyogc2V0IGJhdWRyYXRlIGRpdmlzb3IgKi8KLQlvdXQ4IChkZXZfYmFzZSArIFVBUlRfRExNLCBiZGl2ID4+IDgpOy8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCi0Jb3V0OCAoZGV2X2Jhc2UgKyBVQVJUX0xDUiwgMHgwMyk7CS8qIGNsZWFyIERMQUI7IHNldCA4IGJpdHMsIG5vIHBhcml0eSAqLworCXNlcmlhbF9pbml0X2RldihkZXZfYmFzZSk7CiAjZWxzZQotCW91dDggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9MQ1IsIDB4ODApOwkvKiBzZXQgRExBQiBiaXQgKi8KLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfRExMLCBiZGl2KTsJLyogc2V0IGJhdWRyYXRlIGRpdmlzb3IgKi8KLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfRExNLCBiZGl2ID4+IDgpOy8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCi0Jb3V0OCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX0xDUiwgMHgwMyk7CS8qIGNsZWFyIERMQUI7IHNldCA4IGJpdHMsIG5vIHBhcml0eSAqLworCXNlcmlhbF9pbml0KCk7CiAjZW5kaWYKIH0KIApAQCAtNjQwLDE5ICs1OTgsMTEgQEAKIAogCS8qIGNoZWNrIFRIUkUgYml0LCB3YWl0IGZvciB0cmFuc21pdGVyIGF2YWlsYWJsZSAqLwogCWZvciAoaSA9IDE7IGkgPCAzNTAwOyBpKyspIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCi0JCWlmICgoaW44IChkZXZfYmFzZSArIFVBUlRfTFNSKSAmIDB4MjApID09IDB4MjApCi0jZWxzZQotCQlpZiAoKGluOCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX0xTUikgJiAweDIwKSA9PSAweDIwKQotI2VuZGlmCisJCWlmICgoaW44IChVQVJUX0JBU0UgKyBVQVJUX0xTUikgJiAweDIwKSA9PSAweDIwKQogCQkJYnJlYWs7CiAJCXVkZWxheSAoMTAwKTsKIAl9Ci0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01VTFRJKQotCW91dDggKGRldl9iYXNlICsgVUFSVF9USFIsIGMpOwkvKiBwdXQgY2hhcmFjdGVyIG91dCAqLwotI2Vsc2UKLQlvdXQ4IChBQ1RJTkdfVUFSVDBfQkFTRSArIFVBUlRfVEhSLCBjKTsJLyogcHV0IGNoYXJhY3RlciBvdXQgKi8KLSNlbmRpZgorCW91dDggKFVBUlRfQkFTRSArIFVBUlRfVEhSLCBjKTsJLyogcHV0IGNoYXJhY3RlciBvdXQgKi8KIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKQEAgLTY4MiwxMSArNjMyLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19IV19XQVRDSERPRykKIAkJV0FUQ0hET0dfUkVTRVQgKCk7CS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KICNlbmRpZgkvKiBDT05GSUdfSFdfV0FUQ0hET0cgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCi0JCXN0YXR1cyA9IGluOCAoZGV2X2Jhc2UgKyBVQVJUX0xTUik7Ci0jZWxzZQotCQlzdGF0dXMgPSBpbjggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9MU1IpOwotI2VuZGlmCisJCXN0YXR1cyA9IGluOCAoVUFSVF9CQVNFICsgVUFSVF9MU1IpOwogCQlpZiAoKHN0YXR1cyAmIGFzeW5jTFNSRGF0YVJlYWR5MSkgIT0gMHgwKSB7CiAJCQlicmVhazsKIAkJfQpAQCAtNjk0LDIyICs2NDAsMTQgQEAKIAkJCQlhc3luY0xTUk92ZXJydW5FcnJvcjEgfAogCQkJCWFzeW5jTFNSUGFyaXR5RXJyb3IxICB8CiAJCQkJYXN5bmNMU1JCcmVha0ludGVycnVwdDEgKSkgIT0gMCkgewotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKLQkJCW91dDggKGRldl9iYXNlICsgVUFSVF9MU1IsCi0jZWxzZQotCQkJb3V0OCAoQUNUSU5HX1VBUlQwX0JBU0UgKyBVQVJUX0xTUiwKLSNlbmRpZgorCQkJb3V0OCAoVUFSVF9CQVNFICsgVUFSVF9MU1IsCiAJCQkgICAgICBhc3luY0xTUkZyYW1pbmdFcnJvcjEgfAogCQkJICAgICAgYXN5bmNMU1JPdmVycnVuRXJyb3IxIHwKIAkJCSAgICAgIGFzeW5jTFNSUGFyaXR5RXJyb3IxICB8CiAJCQkgICAgICBhc3luY0xTUkJyZWFrSW50ZXJydXB0MSk7CiAJCX0KIAl9Ci0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01VTFRJKQotCXJldHVybiAoMHgwMDAwMDBmZiAmIChpbnQpIGluOCAoZGV2X2Jhc2UpKTsKLSNlbHNlCi0JcmV0dXJuICgweDAwMDAwMGZmICYgKGludCkgaW44IChBQ1RJTkdfVUFSVDBfQkFTRSkpOwotI2VuZGlmCisJcmV0dXJuICgweDAwMDAwMGZmICYgKGludCkgaW44IChVQVJUX0JBU0UpKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKQEAgLTcyMCwxMSArNjU4LDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKLQlzdGF0dXMgPSBpbjggKGRldl9iYXNlICsgVUFSVF9MU1IpOwotI2Vsc2UKLQlzdGF0dXMgPSBpbjggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9MU1IpOwotI2VuZGlmCisJc3RhdHVzID0gaW44IChVQVJUX0JBU0UgKyBVQVJUX0xTUik7CiAJaWYgKChzdGF0dXMgJiBhc3luY0xTUkRhdGFSZWFkeTEpICE9IDB4MCkgewogCQlyZXR1cm4gKDEpOwogCX0KQEAgLTczMiwxMSArNjY2LDcgQEAKIAkJCWFzeW5jTFNST3ZlcnJ1bkVycm9yMSB8CiAJCQlhc3luY0xTUlBhcml0eUVycm9yMSAgfAogCQkJYXN5bmNMU1JCcmVha0ludGVycnVwdDEgKSkgIT0gMCkgewotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKLQkJb3V0OCAoZGV2X2Jhc2UgKyBVQVJUX0xTUiwKLSNlbHNlCi0JCW91dDggKEFDVElOR19VQVJUMF9CQVNFICsgVUFSVF9MU1IsCi0jZW5kaWYKKwkJb3V0OCAoVUFSVF9CQVNFICsgVUFSVF9MU1IsCiAJCSAgICAgIGFzeW5jTFNSRnJhbWluZ0Vycm9yMSB8CiAJCSAgICAgIGFzeW5jTFNST3ZlcnJ1bkVycm9yMSB8CiAJCSAgICAgIGFzeW5jTFNSUGFyaXR5RXJyb3IxICB8CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3NwZF9zZHJhbS5jIGIvY3B1L3BwYzR4eC9zcGRfc2RyYW0uYwppbmRleCBjMGE2OTMzLi5jMjQ0NTZiIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L3NwZF9zZHJhbS5jCisrKyBiL2NwdS9wcGM0eHgvc3BkX3NkcmFtLmMKQEAgLTEwMDcsOSArMTAwNyw5IEBACiAJfQogCiAJLyoKLQkgKiBwcm9ncmFtIFBhZ2UgTWFuYWdlbWVudCBVbml0CisJICogcHJvZ3JhbSBQYWdlIE1hbmFnZW1lbnQgVW5pdCAoMCA9PSBlbmFibGVkKQogCSAqLwotCWNmZzAgfD0gU0RSQU1fQ0ZHMF9QTVVEOworCWNmZzAgJj0gflNEUkFNX0NGRzBfUE1VRDsKIAogCS8qCiAJICogcHJvZ3JhbSBNZW1vcnkgQ29udHJvbGxlciBPcHRpb25zIDAKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvc3BlZWQuYyBiL2NwdS9wcGM0eHgvc3BlZWQuYwppbmRleCAwMmI0MzgzLi4yZDE2YTgzIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L3NwZWVkLmMKKysrIGIvY3B1L3BwYzR4eC9zcGVlZC5jCkBAIC0yOSw3ICsyOSwxMSBAQAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKICNkZWZpbmUgT05FX0JJTExJT04gICAgICAgIDEwMDAwMDAwMDAKLQorI2lmZGVmIERFQlVHCisjZGVmaW5lIERFQlVHRihmbXQsYXJncy4uLikgcHJpbnRmKGZtdCAsIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdGKGZtdCxhcmdzLi4uKQorI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR180MDVHUCkgfHwgZGVmaW5lZChDT05GSUdfNDA1Q1IpCiAKQEAgLTE5NSw3ICsxOTksOCBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR180NDApCiAKLSNpZiAgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQogdm9pZCBnZXRfc3lzX2luZm8gKHN5c19pbmZvX3QgKnN5c0luZm8pCiB7CiAJdW5zaWduZWQgbG9uZyB0ZW1wOwpAQCAtMjgzLDcgKzI4OCw3IEBACiAJcmV0dXJuIHN5c19pbmZvLmZyZXFQQ0k7CiB9CiAKLSNlbGlmICFkZWZpbmVkKENPTkZJR180NDBHWCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MFNQKQorI2VsaWYgIWRlZmluZWQoQ09ORklHXzQ0MEdYKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwU1ApICYmICFkZWZpbmVkKENPTkZJR180NDBTUEUpCiB2b2lkIGdldF9zeXNfaW5mbyAoc3lzX2luZm9fdCAqIHN5c0luZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBzdHJwMDsKQEAgLTMyNiw2ICszMzEsMjYgQEAKIAl1bnNpZ25lZCBsb25nIG07CiAJdW5zaWduZWQgbG9uZyBwcmJkdjA7CiAKKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUEUpCisJdW5zaWduZWQgbG9uZyBzeXNfZnJlcTsKKwl1bnNpZ25lZCBsb25nIHN5c19wZXI9MDsKKwl1bnNpZ25lZCBsb25nIG1zcjsKKwl1bnNpZ25lZCBsb25nIHBjaV9jbG9ja19wZXI7CisJdW5zaWduZWQgbG9uZyBzZHJfZGRycGxsOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSB8IEdldCB0aGUgc3lzdGVtIGNsb2NrIHBlcmlvZC4KKwkgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXN5c19wZXIgPSBkZXRlcm1pbmVfc3lzcGVyKCk7CisKKwltc3IgPSAobWZtc3IgKCkgJiB+KE1TUl9FRSkpOwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgfCBDYWxjdWxhdGUgdGhlIHN5c3RlbSBjbG9jayBzcGVlZCBmcm9tIHRoZSBwZXJpb2QuCisJICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlzeXNfZnJlcT0oT05FX0JJTExJT04vc3lzX3BlcikqMTAwMDsKKyNlbmRpZgorCiAJLyogRXh0cmFjdCBjb25maWd1cmVkIGRpdmlzb3JzICovCiAJbWZzZHIoIHNkcl9zZHN0cDAsc3RycDAgKTsKIAltZnNkciggc2RyX3Nkc3RwMSxzdHJwMSApOwpAQCAtMzYwLDEyICszODUsMjM4IEBACiAJCW0gPSBzeXNJbmZvLT5wbGxFeHRCdXNEaXYgKiBzeXNJbmZvLT5wbGxPcGJEaXYgKiBzeXNJbmZvLT5wbGxGd2REaXZCOwogCiAJLyogTm93IGNhbGN1bGF0ZSB0aGUgaW5kaXZpZHVhbCBjbG9ja3MgKi8KKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUEUpCisJc3lzSW5mby0+ZnJlcVZDT01oeiA9IChtICogc3lzX2ZyZXEpIDsKKyNlbHNlCiAJc3lzSW5mby0+ZnJlcVZDT01oeiA9IChtICogQ09ORklHX1NZU19DTEtfRlJFUSkgKyAobT4+MSk7CisjZW5kaWYKIAlzeXNJbmZvLT5mcmVxUHJvY2Vzc29yID0gc3lzSW5mby0+ZnJlcVZDT01oei9zeXNJbmZvLT5wbGxGd2REaXZBOwogCXN5c0luZm8tPmZyZXFQTEIgPSBzeXNJbmZvLT5mcmVxVkNPTWh6L3N5c0luZm8tPnBsbEZ3ZERpdkIvcHJiZHYwOwogCXN5c0luZm8tPmZyZXFPUEIgPSBzeXNJbmZvLT5mcmVxUExCL3N5c0luZm8tPnBsbE9wYkRpdjsKIAlzeXNJbmZvLT5mcmVxRVBCID0gc3lzSW5mby0+ZnJlcU9QQi9zeXNJbmZvLT5wbGxFeHRCdXNEaXY7CiAKKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUEUpCisJLyogRGV0ZXJtaW5lIFBDSSBDbG9jayBQZXJpb2QgKi8KKwlwY2lfY2xvY2tfcGVyID0gZGV0ZXJtaW5lX3BjaV9jbG9ja19wZXIoKTsKKwlzeXNJbmZvLT5mcmVxUENJID0gKE9ORV9CSUxMSU9OL3BjaV9jbG9ja19wZXIpICogMTAwMDsKKwltZnNkcihzZHJfZGRyMCwgc2RyX2RkcnBsbCk7CisJc3lzSW5mby0+ZnJlcUREUiA9ICgoc3lzSW5mby0+ZnJlcVBMQikgKiBTRFIwX0REUjBfRERSTV9ERUNPREUoc2RyX2RkcnBsbCkpOworI2VuZGlmCisKKworfQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKK3Vuc2lnbmVkIGxvbmcgZGV0ZXJtaW5lX3N5c3Blcih2b2lkKQoreworCXVuc2lnbmVkIGludCBmcGdhX2Nsb2NraW5nX3JlZzsKKwl1bnNpZ25lZCBpbnQgbWFzdGVyX2Nsb2NrX3NlbGVjdGlvbjsKKwl1bnNpZ25lZCBsb25nIG1hc3Rlcl9jbG9ja19wZXIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmJfZGl2X3NlbGVjdGlvbjsKKwl1bnNpZ25lZCBpbnQgdmNvX2Rpdl9yZWdfdmFsdWU7CisJdW5zaWduZWQgbG9uZyB2Y29fZGl2X3NlbGVjdGlvbjsKKwl1bnNpZ25lZCBsb25nIHN5c19wZXIgPSAwOworCWludCBleHRDbGtWYWw7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJIHwgUmVhZCBGUEdBIHJlZyAwIGFuZCByZWcgMSB0byBnZXQgRlBHQSByZWcgaW5mb3JtYXRpb24KKwkgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWZwZ2FfY2xvY2tpbmdfcmVnID0gaW4xNihGUEdBX1JFRzE2KTsKKworCisJLyogRGV0ZXJtaW5lIE1hc3RlciBDbG9jayBTb3VyY2UgU2VsZWN0aW9uICovCisJbWFzdGVyX2Nsb2NrX3NlbGVjdGlvbiA9IGZwZ2FfY2xvY2tpbmdfcmVnICYgRlBHQV9SRUcxNl9NQVNURVJfQ0xLX01BU0s7CisKKwlzd2l0Y2gobWFzdGVyX2Nsb2NrX3NlbGVjdGlvbikgeworCQljYXNlIEZQR0FfUkVHMTZfTUFTVEVSX0NMS182Nl82NjoKKwkJCW1hc3Rlcl9jbG9ja19wZXIgPSBQRVJJT0RfNjZfNjZNSFo7CisJCQlicmVhazsKKwkJY2FzZSBGUEdBX1JFRzE2X01BU1RFUl9DTEtfNTA6CisJCQltYXN0ZXJfY2xvY2tfcGVyID0gUEVSSU9EXzUwXzAwTUhaOworCQkJYnJlYWs7CisJCWNhc2UgRlBHQV9SRUcxNl9NQVNURVJfQ0xLXzMzXzMzOgorCQkJbWFzdGVyX2Nsb2NrX3BlciA9IFBFUklPRF8zM18zM01IWjsKKwkJCWJyZWFrOworCQljYXNlIEZQR0FfUkVHMTZfTUFTVEVSX0NMS18yNToKKwkJCW1hc3Rlcl9jbG9ja19wZXIgPSBQRVJJT0RfMjVfMDBNSFo7CisJCQlicmVhazsKKwkJY2FzZSBGUEdBX1JFRzE2X01BU1RFUl9DTEtfRVhUOgorCQkJaWYgKChleHRDbGtWYWw9PUVYVENMS18zM18zMykKKwkJCQkJJiYgKGV4dENsa1ZhbD09RVhUQ0xLXzUwKQorCQkJCQkmJiAoZXh0Q2xrVmFsPT1FWFRDTEtfNjZfNjYpCisJCQkJCSYmIChleHRDbGtWYWw9PUVYVENMS184MykpIHsKKwkJCQkvKiBjYWxjdWxhdGUgbWFzdGVyIGNsb2NrIHBlcmlvZCBmcm9tIGV4dGVybmFsIGNsb2NrIHZhbHVlICovCisJCQkJbWFzdGVyX2Nsb2NrX3Blcj0oT05FX0JJTExJT04vZXh0Q2xrVmFsKSAqIDEwMDA7CisJCQl9IGVsc2UgeworCQkJCS8qIFVuc3VwcG9ydGVkICovCisJCQkJREVCVUdGICgiJXNbJWRdICoqKiBtYXN0ZXIgY2xvY2sgc2VsZWN0aW9uIGZhaWxlZCAqKipcbiIsIF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQkJaGFuZygpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBVbnN1cHBvcnRlZCAqLworCQkJREVCVUdGICgiJXNbJWRdICoqKiBtYXN0ZXIgY2xvY2sgc2VsZWN0aW9uIGZhaWxlZCAqKipcbiIsIF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQloYW5nKCk7CisJCQlicmVhazsKKwl9CisKKwkvKiBEZXRlcm1pbmUgRkIgZGl2aXNvcnMgdmFsdWVzICovCisJaWYgKChmcGdhX2Nsb2NraW5nX3JlZyAmIEZQR0FfUkVHMTZfRkIxX0RJVl9NQVNLKSA9PSBGUEdBX1JFRzE2X0ZCMV9ESVZfTE9XKSB7CisJCWlmICgoZnBnYV9jbG9ja2luZ19yZWcgJiBGUEdBX1JFRzE2X0ZCMl9ESVZfTUFTSykgPT0gRlBHQV9SRUcxNl9GQjJfRElWX0xPVykKKwkJCWZiX2Rpdl9zZWxlY3Rpb24gPSBGUEdBX0ZCX0RJVl82OworCQllbHNlCisJCQlmYl9kaXZfc2VsZWN0aW9uID0gRlBHQV9GQl9ESVZfMTI7CisJfSBlbHNlIHsKKwkJaWYgKChmcGdhX2Nsb2NraW5nX3JlZyAmIEZQR0FfUkVHMTZfRkIyX0RJVl9NQVNLKSA9PSBGUEdBX1JFRzE2X0ZCMl9ESVZfTE9XKQorCQkJZmJfZGl2X3NlbGVjdGlvbiA9IEZQR0FfRkJfRElWXzEwOworCQllbHNlCisJCQlmYl9kaXZfc2VsZWN0aW9uID0gRlBHQV9GQl9ESVZfMjA7CisJfQorCisJLyogRGV0ZXJtaW5lIFZDTyBkaXZpc29ycyB2YWx1ZXMgKi8KKwl2Y29fZGl2X3JlZ192YWx1ZSA9IGZwZ2FfY2xvY2tpbmdfcmVnICYgRlBHQV9SRUcxNl9WQ09fRElWX01BU0s7CisKKwlzd2l0Y2godmNvX2Rpdl9yZWdfdmFsdWUpIHsKKwkJY2FzZSBGUEdBX1JFRzE2X1ZDT19ESVZfNDoKKwkJCXZjb19kaXZfc2VsZWN0aW9uID0gRlBHQV9WQ09fRElWXzQ7CisJCQlicmVhazsKKwkJY2FzZSBGUEdBX1JFRzE2X1ZDT19ESVZfNjoKKwkJCXZjb19kaXZfc2VsZWN0aW9uID0gRlBHQV9WQ09fRElWXzY7CisJCQlicmVhazsKKwkJY2FzZSBGUEdBX1JFRzE2X1ZDT19ESVZfODoKKwkJCXZjb19kaXZfc2VsZWN0aW9uID0gRlBHQV9WQ09fRElWXzg7CisJCQlicmVhazsKKwkJY2FzZSBGUEdBX1JFRzE2X1ZDT19ESVZfMTA6CisJCWRlZmF1bHQ6CisJCQl2Y29fZGl2X3NlbGVjdGlvbiA9IEZQR0FfVkNPX0RJVl8xMDsKKwkJCWJyZWFrOworCX0KKworCWlmIChtYXN0ZXJfY2xvY2tfc2VsZWN0aW9uID09IEZQR0FfUkVHMTZfTUFTVEVSX0NMS19FWFQpIHsKKwkJc3dpdGNoKG1hc3Rlcl9jbG9ja19wZXIpIHsKKwkJCWNhc2UgUEVSSU9EXzI1XzAwTUhaOgorCQkJCWlmIChmYl9kaXZfc2VsZWN0aW9uID09IEZQR0FfRkJfRElWXzEyKSB7CisJCQkJCWlmICh2Y29fZGl2X3NlbGVjdGlvbiA9PSBGUEdBX1ZDT19ESVZfNCkKKwkJCQkJCXN5c19wZXIgPSBQRVJJT0RfNzVfMDBNSFo7CisJCQkJCWlmICh2Y29fZGl2X3NlbGVjdGlvbiA9PSBGUEdBX1ZDT19ESVZfNikKKwkJCQkJCXN5c19wZXIgPSBQRVJJT0RfNTBfMDBNSFo7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQRVJJT0RfMzNfMzNNSFo6CisJCQkJaWYgKGZiX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9GQl9ESVZfNikgeworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzQpCisJCQkJCQlzeXNfcGVyID0gUEVSSU9EXzUwXzAwTUhaOworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzYpCisJCQkJCQlzeXNfcGVyID0gUEVSSU9EXzMzXzMzTUhaOworCQkJCX0KKwkJCQlpZiAoZmJfZGl2X3NlbGVjdGlvbiA9PSBGUEdBX0ZCX0RJVl8xMCkgeworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzQpCisJCQkJCQlzeXNfcGVyID0gUEVSSU9EXzgzXzMzTUhaOworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzEwKQorCQkJCQkJc3lzX3BlciA9IFBFUklPRF8zM18zM01IWjsKKwkJCQl9CisJCQkJaWYgKGZiX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9GQl9ESVZfMTIpIHsKKwkJCQkJaWYgKHZjb19kaXZfc2VsZWN0aW9uID09IEZQR0FfVkNPX0RJVl80KQorCQkJCQkJc3lzX3BlciA9IFBFUklPRF8xMDBfMDBNSFo7CisJCQkJCWlmICh2Y29fZGl2X3NlbGVjdGlvbiA9PSBGUEdBX1ZDT19ESVZfNikKKwkJCQkJCXN5c19wZXIgPSBQRVJJT0RfNjZfNjZNSFo7CisJCQkJCWlmICh2Y29fZGl2X3NlbGVjdGlvbiA9PSBGUEdBX1ZDT19ESVZfOCkKKwkJCQkJCXN5c19wZXIgPSBQRVJJT0RfNTBfMDBNSFo7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQRVJJT0RfNTBfMDBNSFo6CisJCQkJaWYgKGZiX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9GQl9ESVZfNikgeworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzQpCisJCQkJCQlzeXNfcGVyID0gUEVSSU9EXzc1XzAwTUhaOworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzYpCisJCQkJCQlzeXNfcGVyID0gUEVSSU9EXzUwXzAwTUhaOworCQkJCX0KKwkJCQlpZiAoZmJfZGl2X3NlbGVjdGlvbiA9PSBGUEdBX0ZCX0RJVl8xMCkgeworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzYpCisJCQkJCQlzeXNfcGVyID0gUEVSSU9EXzgzXzMzTUhaOworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzEwKQorCQkJCQkJc3lzX3BlciA9IFBFUklPRF81MF8wME1IWjsKKwkJCQl9CisJCQkJaWYgKGZiX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9GQl9ESVZfMTIpIHsKKwkJCQkJaWYgKHZjb19kaXZfc2VsZWN0aW9uID09IEZQR0FfVkNPX0RJVl82KQorCQkJCQkJc3lzX3BlciA9IFBFUklPRF8xMDBfMDBNSFo7CisJCQkJCWlmICh2Y29fZGl2X3NlbGVjdGlvbiA9PSBGUEdBX1ZDT19ESVZfOCkKKwkJCQkJCXN5c19wZXIgPSBQRVJJT0RfNzVfMDBNSFo7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQRVJJT0RfNjZfNjZNSFo6CisJCQkJaWYgKGZiX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9GQl9ESVZfNikgeworCQkJCQlpZiAodmNvX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9WQ09fRElWXzQpCisJCQkJCQlzeXNfcGVyID0gUEVSSU9EXzEwMF8wME1IWjsKKwkJCQkJaWYgKHZjb19kaXZfc2VsZWN0aW9uID09IEZQR0FfVkNPX0RJVl82KQorCQkJCQkJc3lzX3BlciA9IFBFUklPRF82Nl82Nk1IWjsKKwkJCQkJaWYgKHZjb19kaXZfc2VsZWN0aW9uID09IEZQR0FfVkNPX0RJVl84KQorCQkJCQkJc3lzX3BlciA9IFBFUklPRF81MF8wME1IWjsKKwkJCQl9CisJCQkJaWYgKGZiX2Rpdl9zZWxlY3Rpb24gPT0gRlBHQV9GQl9ESVZfMTApIHsKKwkJCQkJaWYgKHZjb19kaXZfc2VsZWN0aW9uID09IEZQR0FfVkNPX0RJVl84KQorCQkJCQkJc3lzX3BlciA9IFBFUklPRF84M18zM01IWjsKKwkJCQkJaWYgKHZjb19kaXZfc2VsZWN0aW9uID09IEZQR0FfVkNPX0RJVl8xMCkKKwkJCQkJCXN5c19wZXIgPSBQRVJJT0RfNjZfNjZNSFo7CisJCQkJfQorCQkJCWlmIChmYl9kaXZfc2VsZWN0aW9uID09IEZQR0FfRkJfRElWXzEyKSB7CisJCQkJCWlmICh2Y29fZGl2X3NlbGVjdGlvbiA9PSBGUEdBX1ZDT19ESVZfOCkKKwkJCQkJCXN5c19wZXIgPSBQRVJJT0RfMTAwXzAwTUhaOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc3lzX3BlciA9PSAwKSB7CisJCQkvKiBPdGhlciBjb21iaW5hdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KKwkJCURFQlVHRiAoIiVzWyVkXSAqKiogc3lzIHBlcmlvZCBjb21wdXRlIGZhaWxlZCAqKipcbiIsIF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7CisJCQloYW5nKCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBjYWxjdWwgc3lzdGVtIGNsb2NrIHdpdGhvdXQgY2hla2luZyAqLworCQkvKiBpZiBlbmdpbmVlcmluZyBvcHRpb24gY2xvY2sgbm8gY2hlY2sgaXMgc2VsZWN0ZWQgKi8KKwkJLyogc3lzX3BlciA9IG1hc3Rlcl9jbG9ja19wZXIgKiB2Y29fZGl2X3NlbGVjdGlvbiAvIGZiX2Rpdl9zZWxlY3Rpb24gKi8KKwkJc3lzX3BlciA9IChtYXN0ZXJfY2xvY2tfcGVyL2ZiX2Rpdl9zZWxlY3Rpb24pICogdmNvX2Rpdl9zZWxlY3Rpb247CisJfQorCisJcmV0dXJuKHN5c19wZXIpOworCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZGV0ZXJtaW5lX3BjaV9jbG9ja19wZXIuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit1bnNpZ25lZCBsb25nIGRldGVybWluZV9wY2lfY2xvY2tfcGVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwY2lfY2xvY2tfc2VsZWN0aW9uLCAgcGNpX3BlcmlvZDsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgfCBSZWFkIEZQR0EgcmVnIDYgdG8gZ2V0IFBDSSAwIEZQR0EgcmVnIGluZm9ybWF0aW9uCisJICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlwY2lfY2xvY2tfc2VsZWN0aW9uID0gaW4xNihGUEdBX1JFRzE2KTsJLyogd2FzIHJlZzYgYXZlcmlmaWVyICovCisKKworCXBjaV9jbG9ja19zZWxlY3Rpb24gPSBwY2lfY2xvY2tfc2VsZWN0aW9uICYgRlBHQV9SRUcxNl9QQ0kwX0NMS19NQVNLOworCisJc3dpdGNoIChwY2lfY2xvY2tfc2VsZWN0aW9uKSB7CisJCWNhc2UgRlBHQV9SRUcxNl9QQ0kwX0NMS18xMzNfMzM6CisJCQlwY2lfcGVyaW9kID0gUEVSSU9EXzEzM18zM01IWjsKKwkJCWJyZWFrOworCQljYXNlIEZQR0FfUkVHMTZfUENJMF9DTEtfMTAwOgorCQkJcGNpX3BlcmlvZCA9IFBFUklPRF8xMDBfMDBNSFo7CisJCQlicmVhazsKKwkJY2FzZSBGUEdBX1JFRzE2X1BDSTBfQ0xLXzY2XzY2OgorCQkJcGNpX3BlcmlvZCA9IFBFUklPRF82Nl82Nk1IWjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGNpX3BlcmlvZCA9IFBFUklPRF8zM18zM01IWjs7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4ocGNpX3BlcmlvZCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9zdGFydC5TIGIvY3B1L3BwYzR4eC9zdGFydC5TCmluZGV4IDY0NzA4OGYuLjVhMWFiMzggMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvc3RhcnQuUworKysgYi9jcHUvcHBjNHh4L3N0YXJ0LlMKQEAgLTExNywxMiArMTE3LDE2IEBACiAKIAkuZXh0ZXJuIGV4dF9idXNfY250bHJfaW5pdAogCS5leHRlcm4gc2RyYW1faW5pdAorI2lmZGVmIENPTkZJR19OQU5EX1VfQk9PVAorCS5leHRlcm4gcmVjb25maWdfdGxiMAorI2VuZGlmCiAKIC8qCiAgKiBTZXQgdXAgR09UOiBHbG9iYWwgT2Zmc2V0IFRhYmxlCiAgKgogICogVXNlIHIxNCB0byBhY2Nlc3MgdGhlIEdPVAogICovCisjaWYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQogCVNUQVJUX0dPVAogCUdPVF9FTlRSWShfR09UMl9UQUJMRV8pCiAJR09UX0VOVFJZKF9GSVhVUF9UQUJMRV8pCkBAIC0xMzYsNiArMTQwLDE4IEBACiAJR09UX0VOVFJZKF9lbmQpCiAJR09UX0VOVFJZKF9fYnNzX3N0YXJ0KQogCUVORF9HT1QKKyNlbmRpZiAvKiBDT05GSUdfTkFORF9TUEwgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX05BTkRfVV9CT09UKSAmJiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisJLyoKKwkgKiBOQU5EIFUtQm9vdCBpbWFnZSBpcyBzdGFydGVkIGZyb20gb2Zmc2V0IDAKKwkgKi8KKwkudGV4dAorCWJsCXJlY29uZmlnX3RsYjAKKwlHRVRfR09UCisJYmwJY3B1X2luaXRfZgkvKiBydW4gbG93LWxldmVsIENQVSBpbml0IGNvZGUJICAgKGZyb20gRmxhc2gpICovCisJYmwJYm9hcmRfaW5pdF9mCisjZW5kaWYKIAogLyoKICAqIDQ0MCBTdGFydHVwIC0tIG9uIHJlc2V0IG9ubHkgdGhlIHRvcCA0ayBvZiB0aGUgZWZmZWN0aXZlCkBAIC0xNTAsMTEgKzE2NiwyNiBAQAogICovCiAKICNpZiBkZWZpbmVkKENPTkZJR180NDApCisjaWYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQogICAgIC5zZWN0aW9uIC5ib290cGcsImF4IgorI2VuZGlmCiAgICAgLmdsb2JsIF9zdGFydF80NDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogX3N0YXJ0XzQ0MDoKKyAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgfCA0NDBFUFggQlVQIENoYW5nZSAtIEhhcmR3YXJlIHRlYW0gcmVxdWVzdAorICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorCXN5bmMKKwlub3AKKwlub3AKKyNlbmRpZgorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwl8IENvcmUgYnVnIGZpeC4gIENsZWFyIHRoZSBlc3IKKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWxpCXIwLDAKKwltdHNwcgllc3IscjAKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCS8qIENsZWFyIGFuZCBzZXQgdXAgc29tZSByZWdpc3RlcnMuICovCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE2NiwxNSArMTk3LDE5IEBACiAJbXRzcHIJc3JyMSxyMAogCW10c3ByCWNzcnIwLHIwCiAJbXRzcHIJY3NycjEscjAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApIC8qIE5PVEU6IDQ0MEdYIGFkZHMgbWFjaGluZSBjaGVjayBzdGF0dXMgcmVncyAqLworCS8qIE5PVEU6IDQ0MEdYIGFkZHMgbWFjaGluZSBjaGVjayBzdGF0dXMgcmVncyAqLworI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MEdQKQogCW10c3ByCW1jc3JyMCxyMAogCW10c3ByCW1jc3JyMSxyMAotCW1mc3ByCXIxLCBtY3NyCisJbWZzcHIJcjEsbWNzcgogCW10c3ByCW1jc3IscjEKICNlbmRpZgogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAJLyogSW5pdGlhbGl6ZSBkZWJ1ZyAqLwogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbWZzcHIJcjEsZGJjcjAKKwlhbmRpcy4JcjEsIHIxLCAweDgwMDAJLyogdGVzdCBEQkNSMFtFRE1dIGJpdAkJCSovCisJYm5lCXNraXBfZGVidWdfaW5pdAkvKiBpZiBzZXQsIGRvbid0IGNsZWFyIGRlYnVnIHJlZ2lzdGVyCSovCiAJbXRzcHIJZGJjcjAscjAKIAltdHNwcglkYmNyMSxyMAogCW10c3ByCWRiY3IyLHIwCkBAIC0xODgsNiArMjIzLDcgQEAKIAogCW1mc3ByCXIxLGRic3IKIAltdHNwcglkYnNyLHIxCQkvKiBDbGVhciBhbGwgdmFsaWQgYml0cyAqLworc2tpcF9kZWJ1Z19pbml0OgogCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAkvKiBDQ1IwIGluaXQgKi8KQEAgLTIwMCw2ICsyMzYsMzEgQEAKIAlvcmkJcjEscjEsMHg2MDAwCS8qIGNhY2hlIHRvdWNoICovCiAJbXRzcHIJY2NyMCxyMQogCisjaWYgZGVmaW5lZCAoQ09ORklHXzQ0MFNQRSkKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCBJbml0aWFsaXplIENvcmUgQ29uZmlndXJhdGlvbiBSZWcxLgorCXwgYS4gSUNEUEVJOiBSZWNvcmQgZXZlbiBwYXJpdHkuIE5vcm1hbCBvcGVyYXRpb24uCisJfCBiLiBJQ1RQRUk6IFJlY29yZCBldmVuIHBhcml0eS4gTm9ybWFsIG9wZXJhdGlvbi4KKwl8IGMuIERDVFBFSTogUmVjb3JkIGV2ZW4gcGFyaXR5LiBOb3JtYWwgb3BlcmF0aW9uLgorCXwgZC4gRENEUEVJOiBSZWNvcmQgZXZlbiBwYXJpdHkuIE5vcm1hbCBvcGVyYXRpb24uCisJfCBlLiBEQ1VQRUk6IFJlY29yZCBldmVuIHBhcml0eS4gTm9ybWFsIG9wZXJhdGlvbi4KKwl8IGYuIERDTVBFSTogUmVjb3JkIGV2ZW4gcGFyaXR5LiBOb3JtYWwgb3BlcmF0aW9uLgorCXwgZy4gRkNPTTogICBOb3JtYWwgb3BlcmF0aW9uCisJfCBoLiBNTVVQRUk6IFJlY29yZCBldmVuIHBhcml0eS4gTm9ybWFsIG9wZXJhdGlvbi4KKwl8IGkuIEZGRjogICAgRmx1c2ggb25seSBhcyBtdWNoIGRhdGEgYXMgbmVjZXNzYXJ5LgorCXwgai4gVENTOiAgICBUaW1lYmFzZSBpbmNyZW1lbnRzIGZyb20gQ1BVIGNsb2NrLgorCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbGkJcjAsMAorCW10c3ByCWNjcjEsIHIwCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJfCBSZXNldCB0aGUgdGltZWJhc2UuCisJfCBUaGUgcHJldmlvdXMgd3JpdGUgdG8gQ0NSMSBzZXRzIHRoZSB0aW1lYmFzZSBzb3VyY2UuCisJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwltdHNwcgl0YmwsIHIwCisJbXRzcHIJdGJ1LCByMAorI2VuZGlmCisKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCS8qIFNldHVwIGludGVycnVwdCB2ZWN0b3JzICovCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI2MSwyMCArMzIyLDQ3IEBACiAJbXRzcHIJaXZsaW0scjEKIAltdHNwcglkdmxpbSxyMQogCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCXxJbml0aWFsaXplIE1NVUNSW1NUSURdID0gMC4KKwkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW1mc3ByCXIwLG1tdWNyCisJYWRkaXMJcjEsMCwweEZGRkYKKwlvcmkJcjEscjEsMHhGRjAwCisJYW5kCXIwLHIwLHIxCisJbXRzcHIJbW11Y3IscjAKKwogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAJLyogQ2xlYXIgYWxsIFRMQiBlbnRyaWVzIC0tIFRJRCA9IDAsIFRTID0gMCAqLwogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbXRzcHIJbW11Y3IscjAKKwlhZGRpcwlyMCwwLDB4MDAwMAogCWxpCXIxLDB4MDAzZgkvKiA2NCBUTEIgZW50cmllcyAqLwogCW10Y3RyCXIxCi0wOgl0bGJ3ZQlyMCxyMSwweDAwMDAJLyogSW52YWxpZGF0ZSBhbGwgZW50cmllcyAoVj0wKSovCityc3R0bGI6CXRsYndlCXIwLHIxLDB4MDAwMAkvKiBJbnZhbGlkYXRlIGFsbCBlbnRyaWVzIChWPTApKi8KKwl0bGJ3ZQlyMCxyMSwweDAwMDEKKwl0bGJ3ZQlyMCxyMSwweDAwMDIKIAlzdWJpCXIxLHIxLDB4MDAwMQotCWJkbnoJMGIKKwliZG56CXJzdHRsYgogCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAkvKiBUTEIgZW50cnkgc2V0dXAgLS0gc3RlcCB0aHJ1IHRsYnRhYiAqLwogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKQorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyogV2UgaGF2ZSBkaWZmZXJlbnQgVExCIHRhYmxlcyBmb3IgcmV2QSBhbmQgcmV2IEIgb2YgNDQwU1BlICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwltZnNwcglyMSwgUFZSCisJbGlzCXIwLDB4NTM0MgorCW9yaQlyMCxyMCwweDE4OTEKKwljbXB3CXI3LHIxLHIwCisJYm5lCXI3LC4ucmV2QQorCWJsCXRsYnRhYkIKKwliCS4uZ29vbgorLi5yZXZBOgorCWJsCXRsYnRhYkEKKy4uZ29vbjoKKyNlbHNlCiAJYmwJdGxidGFiCQkvKiBHZXQgdGxidGFiIHBvaW50ZXIgKi8KKyNlbmRpZgogCW1yCXI1LHIwCiAJbGkJcjEsMHgwMDNmCS8qIDY0IFRMQiBlbnRyaWVzIG1heCAqLwogCW10Y3RyCXIxCkBAIC0yOTUsNyArMzgzLDUzIEBACiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAkvKiBDb250aW51ZSBmcm9tICdub3JtYWwnIHN0YXJ0ICovCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLTI6CWJsCTNmCisyOgorCisjaWYgZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisJLyoKKwkgKiBFbmFibGUgaW50ZXJuYWwgU1JBTQorCSAqLworCWxpcwlyMiwweDdmZmYKKwlvcmkJcjIscjIsMHhmZmZmCisJbWZkY3IJcjEsaXNyYW0wX2RwYworCWFuZAlyMSxyMSxyMgkJLyogRGlzYWJsZSBwYXJpdHkgY2hlY2sgKi8KKwltdGRjcglpc3JhbTBfZHBjLHIxCisJbWZkY3IJcjEsaXNyYW0wX3BtZWcKKwlhbmQJcjEscjEscjIJCS8qIERpc2FibGUgcHdyIG1nbXQgKi8KKwltdGRjcglpc3JhbTBfcG1lZyxyMQorCisJLyoKKwkgKiBDb3B5IFNQTCBmcm9tIGNhY2hlIGludG8gaW50ZXJuYWwgU1JBTQorCSAqLworCWxpCXI0LChDRkdfTkFORF9CT09UX1NQTF9TSVpFID4+IDIpIC0gMQorCW10Y3RyCXI0CisJbGlzCXIyLENGR19OQU5EX0JPT1RfU1BMX1NSQ0BoCisJb3JpCXIyLHIyLENGR19OQU5EX0JPT1RfU1BMX1NSQ0BsCisJbGlzCXIzLENGR19OQU5EX0JPT1RfU1BMX0RTVEBoCisJb3JpCXIzLHIzLENGR19OQU5EX0JPT1RfU1BMX0RTVEBsCitzcGxfbG9vcDoKKwlsd3p1CXI0LDQocjIpCisJc3R3dQlyNCw0KHIzKQorCWJkbnoJc3BsX2xvb3AKKworCS8qCisJICogSnVtcCB0byBjb2RlIGluIFJBTQorCSAqLworCWJsCTAwZgorMDA6CW1mbHIJcjEwCisJbGlzCXIzLChDRkdfTkFORF9CT09UX1NQTF9TUkMgLSBDRkdfTkFORF9CT09UX1NQTF9EU1QpQGgKKwlvcmkJcjMscjMsKENGR19OQU5EX0JPT1RfU1BMX1NSQyAtIENGR19OQU5EX0JPT1RfU1BMX0RTVClAbAorCXN1YglyMTAscjEwLHIzCisJYWRkaQlyMTAscjEwLDI4CisJbXRscglyMTAKKwlibHIKKworc3RhcnRfcmFtOgorCXN5bmMKKwlpc3luYworI2VuZGlmCisKKwlibAkzZgogCWIJX3N0YXJ0CiAKIDM6CWxpCXIwLDAKQEAgLTMwOSw2ICs0NDMsNyBAQAogICogcjMgLSAxc3QgYXJnIHRvIGJvYXJkX2luaXQoKTogSU1NUCBwb2ludGVyCiAgKiByNCAtIDJuZCBhcmcgdG8gYm9hcmRfaW5pdCgpOiBib290IGZsYWcKICAqLworI2lmbmRlZiBDT05GSUdfTkFORF9TUEwKIAkudGV4dAogCS5sb25nCTB4MjcwNTE5NTYJCS8qIFUtQm9vdCBNYWdpYyBOdW1iZXIJCQkqLwogCS5nbG9ibAl2ZXJzaW9uX3N0cmluZwpAQCAtMzIyLDYgKzQ1Nyw3IEBACiAgKiBsb2NhdGlvbiAoMHgxMDApIGlzIHdoZXJlIHRoZSBDcml0aWNhbElucHV0IEV4ZWNwdGlvbiBzaG91bGQgYmUuCiAgKi8KIAkuID0gRVhDX09GRl9TWVNfUkVTRVQKKyNlbmRpZgogCS5nbG9ibAlfc3RhcnQKIF9zdGFydDoKIApAQCAtMzYwLDcgKzQ5Niw4IEBACiAJLyogU2V0dXAgdGhlIGludGVybmFsIFNSQU0gKi8KIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCWxpCXIwLDAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpCisKKyNpZmRlZiBDRkdfSU5JVF9SQU1fRENBQ0hFCiAJLyogQ2xlYXIgRGNhY2hlIHRvIHVzZSBhcyBSQU0gKi8KIAlhZGRpcwlyMyxyMCxDRkdfSU5JVF9SQU1fQUREUkBoCiAJb3JpCXIzLHIzLENGR19JTklUX1JBTV9BRERSQGwKQEAgLTM3NiwxOSArNTEzLDIyIEBACiAJZGNieglyMCxyMwogCWFkZGkJcjMscjMsMzIKIAliZG56CS4uZF9hZwotI2Vsc2UKLSNpZiBkZWZpbmVkIChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKQorI2VuZGlmIC8qIENGR19JTklUX1JBTV9EQ0FDSEUgKi8KKworCS8qIDQ0MEVQICYgNDQwR1IgYXJlIG9ubHkgNDQwZXIgUFBDJ3Mgd2l0aG91dCBpbnRlcm5hbCBTUkFNICovCisjaWYgIWRlZmluZWQoQ09ORklHXzQ0MEVQKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1IpCisJLyogbm90IGFsbCBQUEMncyBoYXZlIGludGVybmFsIFNSQU0gdXNhYmxlIGFzIEwyLWNhY2hlICovCisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUEUpCiAJbXRkY3IJbDJfY2FjaGVfY2ZnLHIwCQkvKiBFbnN1cmUgTDIgQ2FjaGUgaXMgb2ZmICovCiAjZW5kaWYKLQltdGRjcglpc3JhbTBfc2IxY3IscjAJCS8qIERpc2FibGUgYmFuayAxICovCiAKLQlsaQlyMiwweDdmZmYKKwlsaXMJcjIsMHg3ZmZmCiAJb3JpCXIyLHIyLDB4ZmZmZgogCW1mZGNyCXIxLGlzcmFtMF9kcGMKIAlhbmQJcjEscjEscjIJCS8qIERpc2FibGUgcGFyaXR5IGNoZWNrICovCiAJbXRkY3IJaXNyYW0wX2RwYyxyMQogCW1mZGNyCXIxLGlzcmFtMF9wbWVnCi0JYW5kaXMuCXIxLHIxLHIyCQkvKiBEaXNhYmxlIHB3ciBtZ210ICovCisJYW5kCXIxLHIxLHIyCQkvKiBEaXNhYmxlIHB3ciBtZ210ICovCiAJbXRkY3IJaXNyYW0wX3BtZWcscjEKIAogCWxpcwlyMSwweDgwMDAJCS8qIEJBUyA9IDgwMDBfMDAwMCAqLwpAQCAtNDA0LDExICs1NDQsMjUgQEAKIAlsaXMJcjEsIDB4ODAwMwogCW9yaQlyMSxyMSwgMHgwOTgwCQkvKiBmb3VydGggNjRrICovCiAJbXRkY3IJaXNyYW0wX3NiM2NyLHIxCi0jZWxzZQorI2VsaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKQorCWxpcwlyMSwweDAwMDAJCS8qIEJBUyA9IDAwMDBfMDAwMCAqLworCW9yaQlyMSxyMSwweDA5ODQJCS8qIGZpcnN0IDY0ayAqLworCW10ZGNyCWlzcmFtMF9zYjBjcixyMQorCWxpcwlyMSwweDAwMDEKKwlvcmkJcjEscjEsMHgwOTg0CQkvKiBzZWNvbmQgNjRrICovCisJbXRkY3IJaXNyYW0wX3NiMWNyLHIxCisJbGlzCXIxLCAweDAwMDIKKwlvcmkJcjEscjEsIDB4MDk4NAkJLyogdGhpcmQgNjRrICovCisJbXRkY3IJaXNyYW0wX3NiMmNyLHIxCisJbGlzCXIxLCAweDAwMDMKKwlvcmkJcjEscjEsIDB4MDk4NAkJLyogZm91cnRoIDY0ayAqLworCW10ZGNyCWlzcmFtMF9zYjNjcixyMQorI2VsaWYgZGVmaW5lZChDT05GSUdfNDQwR1ApCiAJb3JpCXIxLHIxLDB4MDM4MAkJLyogOGsgcncgKi8KIAltdGRjcglpc3JhbTBfc2IwY3IscjEKKwltdGRjcglpc3JhbTBfc2IxY3IscjAJCS8qIERpc2FibGUgYmFuayAxICovCiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qICNpZiAhZGVmaW5lZChDT05GSUdfNDQwRVApICYmICFkZWZpbmVkKENPTkZJR180NDBHUikgKi8KIAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAJLyogU2V0dXAgdGhlIHN0YWNrIGluIGludGVybmFsIFNSQU0gKi8KQEAgLTQyNSwxMCArNTc5LDE0IEBACiAJc3R3dQlyMSwtOChyMSkJCS8qIFNhdmUgYmFjayBjaGFpbiBhbmQgbW92ZSBTUCAqLwogCXN0dwlyMCwrMTIocjEpCQkvKiBTYXZlIHJldHVybiBhZGRyICh1bmRlcmZsb3cgdmVjdCkgKi8KIAorI2lmZGVmIENPTkZJR19OQU5EX1NQTAorCWJsCW5hbmRfYm9vdAkJLyogd2lsbCBub3QgcmV0dXJuICovCisjZWxzZQogCUdFVF9HT1QKIAogCWJsCWNwdV9pbml0X2YJLyogcnVuIGxvdy1sZXZlbCBDUFUgaW5pdCBjb2RlCSAgIChmcm9tIEZsYXNoKSAqLwogCWJsCWJvYXJkX2luaXRfZgorI2VuZGlmCiAKICNlbmRpZiAvKiBDT05GSUdfNDQwICovCiAKQEAgLTczOCw2ICs4OTYsNyBAQAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCisjaWZuZGVmIENPTkZJR19OQU5EX1NQTAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCS5nbG9ibAlfc3RhcnRfb2ZfdmVjdG9ycwogX3N0YXJ0X29mX3ZlY3RvcnM6CkBAIC05NDMsNiArMTEwMiw3IEBACiAJbHd6CXIxLEdQUjEocjEpCiAJU1lOQwogCXJmY2kKKyNlbmRpZiAvKiBDT05GSUdfTkFORF9TUEwgKi8KIAogLyogQ2FjaGUgZnVuY3Rpb25zLgogKi8KQEAgLTExODQsNiArMTM0NCw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmbmRlZiBDT05GSUdfTkFORF9TUEwKIC8qCiAgKiB2b2lkIHJlbG9jYXRlX2NvZGUgKGFkZHJfc3AsIGdkLCBhZGRyX21vbmkpCiAgKgpAQCAtMTE5Nyw3ICsxMzU4LDkgQEAKICAqLwogCS5nbG9ibAlyZWxvY2F0ZV9jb2RlCiByZWxvY2F0ZV9jb2RlOgotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKIAkvKgogCSAqIE9uIHNvbWUgNDQwZXIgcGxhdGZvcm1zIHRoZSBjYWNoZSBpcyBlbmFibGVkIGluIHRoZSBmaXJzdCBUTEIgKEJvb3QtQ1MpCiAJICogdG8gc3BlZWQgdXAgdGhlIGJvb3QgcHJvY2Vzcy4gTm93IHRoaXMgY2FjaGUgbmVlZHMgdG8gYmUgZGlzYWJsZWQuCkBAIC0xNDEyLDIyICsxNTc1LDIyIEBACiAJY21wbHcJMCwgcjcsIHI4CiAJYmx0CTRiCiAKLSNpZiAhZGVmaW5lZChDT05GSUdfNDQwX0dYKQorI2lmICFkZWZpbmVkKENPTkZJR180NDApCiAJYWRkaQlyNyxyMCwweDEwMDAJCS8qIHNldCBNRSBiaXQgKE1hY2hpbmUgRXhjZXB0aW9ucykgKi8KIAlvcmlzCXI3LHI3LDB4MDAwMgkJLyogc2V0IENFIGJpdCAoQ3JpdGljYWwgRXhjZXB0aW9ucykgKi8KIAltdG1zcglyNwkJCS8qIGNoYW5nZSBNU1IgKi8KICNlbHNlCi0JYmwJX180NDBneF9tc3Jfc2V0Ci0JYglfXzQ0MGd4X21zcl9jb250aW51ZQorCWJsCV9fNDQwX21zcl9zZXQKKwliCV9fNDQwX21zcl9jb250aW51ZQogCi1fXzQ0MGd4X21zcl9zZXQ6CitfXzQ0MF9tc3Jfc2V0OgogCWFkZGkJcjcscjAsMHgxMDAwCQkvKiBzZXQgTUUgYml0IChNYWNoaW5lIEV4Y2VwdGlvbnMpICovCiAJb3JpcwlyNyxyNywweDAwMDIJCS8qIHNldCBDRSBiaXQgKENyaXRpY2FsIEV4Y2VwdGlvbnMpICovCiAJbXRzcHIJc3JyMSxyNwogCW1mbHIJcjcKIAltdHNwcglzcnIwLHI3CiAJcmZpCi1fXzQ0MGd4X21zcl9jb250aW51ZToKK19fNDQwX21zcl9jb250aW51ZToKICNlbmRpZgogCiAJbXRscglyNAkJCS8qIHJlc3RvcmUgbGluayByZWdpc3RlcgkqLwpAQCAtMTQ0Niw2ICsxNjA5LDcgQEAKIAlzdHcJcjAsIDQocjcpCiAKIAlibHIKKyNlbmRpZiAvKiBDT05GSUdfTkFORF9TUEwgKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3VzYl9vaGNpLmMgYi9jcHUvcHBjNHh4L3VzYl9vaGNpLmMKaW5kZXggYmI1NzY1OC4uYWI4NTJjNSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC91c2Jfb2hjaS5jCisrKyBiL2NwdS9wcGM0eHgvdXNiX29oY2kuYwpAQCAtNzYsNyArNzYsNyBAQAogI2RlZmluZSBtMTZfc3dhcCh4KSBzd2FwXzE2KHgpCiAjZGVmaW5lIG0zMl9zd2FwKHgpIHN3YXBfMzIoeCkKIAotI2lmZGVmIENPTkZJR180NDBFUAorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUFgpCiAjZGVmaW5lIG9oY2lfY3B1X3RvX2xlMTYoeCkgKHgpCiAjZGVmaW5lIG9oY2lfY3B1X3RvX2xlMzIoeCkgKHgpCiAjZWxzZQpAQCAtMTU5OSw3ICsxNTk5LDExIEBACiAJZ29oY2kuZGlzYWJsZWQgPSAxOwogCWdvaGNpLnNsZWVwaW5nID0gMDsKIAlnb2hjaS5pcnEgPSAtMTsKLQlnb2hjaS5yZWdzID0gKHN0cnVjdCBvaGNpX3JlZ3MgKikoQ0ZHX1BFUklQSEVSQUxfQkFTRSB8IDB4MTAwMCk7CisjaWYgZGVmaW5lZChDT05GSUdfNDQwRVApCisgCWdvaGNpLnJlZ3MgPSAoc3RydWN0IG9oY2lfcmVncyAqKShDRkdfUEVSSVBIRVJBTF9CQVNFIHwgMHgxMDAwKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkKKwlnb2hjaS5yZWdzID0gKHN0cnVjdCBvaGNpX3JlZ3MgKikoQ0ZHX1VTQl9IT1NUKTsKKyNlbmRpZgogCiAJZ29oY2kuZmxhZ3MgPSAwOwogCWdvaGNpLnNsb3RfbmFtZSA9ICJwcGM0NDAiOwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC91c2JkZXYuYyBiL2NwdS9wcGM0eHgvdXNiZGV2LmMKaW5kZXggODI2MmM1NC4uNjE0MGQyYSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC91c2JkZXYuYworKysgYi9jcHUvcHBjNHh4L3VzYmRldi5jCkBAIC0zLDcgKzMsNyBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAotI2lmZGVmIENPTkZJR180NDBFUAorI2lmIChkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVBYKSkgJiYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfVVNCKQogCiAjaW5jbHVkZSA8dXNiLmg+CiAjaW5jbHVkZSAidXNiZGV2LmgiCkBAIC0xODYsNiArMTg2LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpCit2b2lkIHVzYl9kZXZfaW5pdCgpCit7CisJcHJpbnRmKCJVU0IgMi4wIERldmljZSBpbml0XG4iKTsKKworCS8qdXNiIGRldiBpbml0ICovCisJKih1bnNpZ25lZCBjaGFyICopVVNCMkQwX1BPV0VSXzggPSAweGExOwkvKiAyLjAgKi8KKworCS8qZW5hYmxlIGludGVycnVwdHMgKi8KKwkqKHVuc2lnbmVkIGNoYXIgKilVU0IyRDBfSU5UUlVTQkVfOCA9IDB4MGY7CisKKwlpcnFfaW5zdGFsbF9oYW5kbGVyKFZFQ05VTV9IU0IyRCwgKGludGVycnVwdF9oYW5kbGVyX3QgKikgdXNiSW50LAorCQkJICAgIE5VTEwpOworfQorI2Vsc2UKIHZvaWQgdXNiX2Rldl9pbml0KCkKIHsKICNpZmRlZiBVU0JfMl8wX0RFVklDRQpAQCAtMjEwLDUgKzIyNSw2IEBACiAJaXJxX2luc3RhbGxfaGFuZGxlcihWRUNOVU1fVVNCREVWLCAoaW50ZXJydXB0X2hhbmRsZXJfdCAqKSB1c2JJbnQsCiAJCQkgICAgTlVMTCk7CiB9CisjZW5kaWYKIAotI2VuZGlmCQkJCS8qQ09ORklHXzQ0MEVQICovCisjZW5kaWYgLyogQ09ORklHXzQ0MEVQIHx8IENPTkZJR180NDBFUFggKi8KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvdmVjbnVtLmggYi9jcHUvcHBjNHh4L3ZlY251bS5oCmluZGV4IGNiZmU0MWQuLjcwZTQzNmEgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvdmVjbnVtLmgKKysrIGIvY3B1L3BwYzR4eC92ZWNudW0uaApAQCAtMzEsNyArMzEsMTM1IEBACiAjaWZuZGVmIF9WRUNOVU1TX0hfCiAjZGVmaW5lIF9WRUNOVU1TX0hfCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MF9HUlgpCisKKy8qIFVJQyAwICovCisjZGVmaW5lIFZFQ05VTV9VMCAgICAgICAgICAgICAgICAgICAwICAvKiBVQVJUIDAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fVTEgICAgICAgICAgICAgICAgICAgMSAgLyogVUFSVCAxICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0lJQzAgICAgICAgICAgICAgICAgIDIgIC8qIElJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9LUkQgICAgICAgICAgICAgICAgICAzICAvKiBLYXN1bWkgUmVhZHkgZm9yIGRhdGEgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fS0RBICAgICAgICAgICAgICAgICAgNCAgLyogS2FzdW1pIERhdGEgQXZhaWxhYmxlICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1BDUlcgICAgICAgICAgICAgICAgIDUgIC8qIFBDSSBjb21tYW5kIHJlZ2lzdGVyIHdyaXRlICAgICovCisjZGVmaW5lIFZFQ05VTV9QUE0gICAgICAgICAgICAgICAgICA2ICAvKiBQQ0kgcG93ZXIgbWFuYWdlbWVudCAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fSUlDMSAgICAgICAgICAgICAgICAgNyAgLyogSUlDICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1NQSSAgICAgICAgICAgICAgICAgIDggIC8qIFNQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FUENJU0VSICAgICAgICAgICAgICA5ICAvKiBFeHRlcm5hbCBQQ0kgU0VSUiAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fTVRFICAgICAgICAgICAgICAgICAxMCAgLyogTUFMIFRYRU9CICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX01SRSAgICAgICAgICAgICAgICAgMTEgIC8qIE1BTCBSWEVPQiAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9EMCAgICAgICAgICAgICAgICAgIDEyICAvKiBETUEgY2hhbm5lbCAwICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRDEgICAgICAgICAgICAgICAgICAxMyAgLyogRE1BIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0QyICAgICAgICAgICAgICAgICAgMTQgIC8qIERNQSBjaGFubmVsIDIgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9EMyAgICAgICAgICAgICAgICAgIDE1ICAvKiBETUEgY2hhbm5lbCAzICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fVUQwICAgICAgICAgICAgICAgICAxNiAgLyogVURNQSBpcnEgMCAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1VEMSAgICAgICAgICAgICAgICAgMTcgIC8qIFVETUEgaXJxIDEgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9VRDIgICAgICAgICAgICAgICAgIDE4ICAvKiBVRE1BIGlycSAyICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fVUQzICAgICAgICAgICAgICAgICAxOSAgLyogVURNQSBpcnEgMyAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0hTQjJEICAgICAgICAgICAgICAgMjAgIC8qIFVTQjIuMCBEZXZpY2UgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9VU0JERVYJCSAgIDIwICAvKiBVU0IgMS4xL1VTQiAyLjAgRGV2aWNlICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fT0hDSTEgICAgICAgICAgICAgICAyMSAgLyogVVNCMi4wIEhvc3QgT0hDSSBpcnEgMSAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX09IQ0kyICAgICAgICAgICAgICAgMjIgIC8qIFVTQjIuMCBIb3N0IE9IQ0kgaXJxIDIgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FSVA5NCAgICAgICAgICAgICAgIDIzICAvKiBTZWN1cml0eSBFSVA5NCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRVRIMCAgICAgICAgICAgICAgICAyNCAgLyogRW1hYyAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0VUSDEgICAgICAgICAgICAgICAgMjUgIC8qIEVtYWMgMSAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FSENJICAgICAgICAgICAgICAgIDI2ICAvKiBVU0IyLjAgSG9zdCBFSENJICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRUlSNCAgICAgICAgICAgICAgICAyNyAgLyogRXh0ZXJuYWwgaW50ZXJydXB0IDQgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1VJQzJOQyAgICAgICAgICAgICAgMjggIC8qIFVJQzIgbm9uLWNyaXRpY2FsIGludGVycnVwdCAgICovCisjZGVmaW5lIFZFQ05VTV9VSUMyQyAgICAgICAgICAgICAgIDI5ICAvKiBVSUMyIGNyaXRpY2FsIGludGVycnVwdCAgICAgICAqLworI2RlZmluZSBWRUNOVU1fVUlDMU5DICAgICAgICAgICAgICAzMCAgLyogVUlDMSBub24tY3JpdGljYWwgaW50ZXJydXB0ICAgKi8KKyNkZWZpbmUgVkVDTlVNX1VJQzFDICAgICAgICAgICAgICAgMzEgIC8qIFVJQzEgY3JpdGljYWwgaW50ZXJydXB0ICAgICAgICovCisKKy8qIFVJQyAxICovCisjZGVmaW5lIFZFQ05VTV9NUyAgICAgICAgICAgKDMyICsgIDApICAvKiBNQUwgU0VSUiAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fTVRERSAgICAgICAgICgzMiArICAxKSAgLyogTUFMIFRYREUgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX01SREUgICAgICAgICAoMzIgKyAgMikgIC8qIE1BTCBSWERFICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9VMiAgICAgICAgICAgKDMyICsgIDMpICAvKiBVQVJUIDIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fVTMgICAgICAgICAgICgzMiArICA0KSAgLyogVUFSVCAzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0VCQ08gICAgICAgICAoMzIgKyAgNSkgIC8qIEVCQ08gaW50ZXJydXB0IHN0YXR1cyAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9OREZDICAgICAgICAgKDMyICsgIDYpICAvKiBOREZDICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fS1NMRSAgICAgICAgICgzMiArICA3KSAgLyogS0FTVU1JIHNsYXZlIGVycm9yICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0NUNSAgICAgICAgICAoMzIgKyAgOCkgIC8qIEdQVCBjb21wYXJlIHRpbWVyIDUgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9DVDYgICAgICAgICAgKDMyICsgIDkpICAvKiBHUFQgY29tcGFyZSB0aW1lciA2ICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fUExCMzRJMCAgICAgICgzMiArIDEwKSAgLyogUExCM1g0WCBNSVJRMCAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1BMQjM0STEgICAgICAoMzIgKyAxMSkgIC8qIFBMQjNYNFggTUlSUTEgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9QTEIzNEkyICAgICAgKDMyICsgMTIpICAvKiBQTEIzWDRYIE1JUlEyICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fUExCMzRJMyAgICAgICgzMiArIDEzKSAgLyogUExCM1g0WCBNSVJRMyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1BMQjM0STQgICAgICAoMzIgKyAxNCkgIC8qIFBMQjNYNFggTUlSUTQgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9QTEIzNEk1ICAgICAgKDMyICsgMTUpICAvKiBQTEIzWDRYIE1JUlE1ICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fQ1QwICAgICAgICAgICgzMiArIDE2KSAgLyogR1BUIGNvbXBhcmUgdGltZXIgMCAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0NUMSAgICAgICAgICAoMzIgKyAxNykgIC8qIEdQVCBjb21wYXJlIHRpbWVyIDEgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FSVI3ICAgICAgICAgKDMyICsgMTgpICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgNyAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRUlSOCAgICAgICAgICgzMiArIDE5KSAgLyogRXh0ZXJuYWwgaW50ZXJydXB0IDggICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0VJUjkgICAgICAgICAoMzIgKyAyMCkgIC8qIEV4dGVybmFsIGludGVycnVwdCA5ICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9DVDIgICAgICAgICAgKDMyICsgMjEpICAvKiBHUFQgY29tcGFyZSB0aW1lciAyICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fQ1QzICAgICAgICAgICgzMiArIDIyKSAgLyogR1BUIGNvbXBhcmUgdGltZXIgMyAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0NUNCAgICAgICAgICAoMzIgKyAyMykgIC8qIEdQVCBjb21wYXJlIHRpbWVyIDQgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9TUkUgICAgICAgICAgKDMyICsgMjQpICAvKiBTZXJpYWwgUk9NIGVycm9yICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fR1BUREMgICAgICAgICgzMiArIDI1KSAgLyogR1BUIGRlY3JlbWVudGVyIHB1bHNlICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1JTVkQwICAgICAgICAoMzIgKyAyNikgIC8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FUENJUEVSICAgICAgKDMyICsgMjcpICAvKiBFeHRlcm5hbCBQQ0kgUEVSUiAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRUlSMCAgICAgICAgICgzMiArIDI4KSAgLyogRXh0ZXJuYWwgaW50ZXJydXB0IDAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0VXVTAgICAgICAgICAoMzIgKyAyOSkgIC8qIEV0aGVybmV0IDAgd2FrZXVwICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FSVIxICAgICAgICAgKDMyICsgMzApICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMSAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRVdVMSAgICAgICAgICgzMiArIDMxKSAgLyogRXRoZXJuZXQgMSB3YWtldXAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBWRUNOVU1fVFhERSAgICAgICAgIFZFQ05VTV9NVERFCisjZGVmaW5lIFZFQ05VTV9SWERFICAgICAgICAgVkVDTlVNX01SREUKKworLyogVUlDIDIgKi8KKyNkZWZpbmUgVkVDTlVNX0VJUjUgICAgICAgICAoNjIgKyAgMCkgIC8qIEV4dGVybmFsIGludGVycnVwdCA1ICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FSVI2ICAgICAgICAgKDYyICsgIDEpICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgNiAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fT1BCICAgICAgICAgICg2MiArICAyKSAgLyogT1BCIHRvIFBMQiBicmlkZ2UgaW50IHN0YXQgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0VJUjIgICAgICAgICAoNjIgKyAgMykgIC8qIEV4dGVybmFsIGludGVycnVwdCAyICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FSVIzICAgICAgICAgKDYyICsgIDQpICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMyAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRERSMiAgICAgICAgICg2MiArICA1KSAgLyogRERSMiBzZHJhbSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX01DVFgwICAgICAgICAoNjIgKyAgNikgIC8qIE1BbCBpbnRwIGNvYWxlc2NlbmNlIFRYMCAgICAgICovCisjZGVmaW5lIFZFQ05VTV9NQ1RYMSAgICAgICAgKDYyICsgIDcpICAvKiBNQWwgaW50cCBjb2FsZXNjZW5jZSBUWDEgICAgICAqLworI2RlZmluZSBWRUNOVU1fTUNUUjAgICAgICAgICg2MiArICA4KSAgLyogTUFsIGludHAgY29hbGVzY2VuY2UgVFIwICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX01DVFIxICAgICAgICAoNjIgKyAgOSkgIC8qIE1BbCBpbnRwIGNvYWxlc2NlbmNlIFRSMSAgICAgICovCisKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKKworLyogVUlDIDAgKi8KKyNkZWZpbmUgVkVDTlVNX1UwICAgICAgICAgICAwICAgICAgICAgICAvKiBVQVJUMCAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9VMSAgICAgICAgICAgMSAgICAgICAgICAgLyogVUFSVDEgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fSUlDMCAgICAgICAgIDIgICAgICAgICAgIC8qIElJQzAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0lJQzEgICAgICAgICAzICAgICAgICAgICAvKiBJSUMxICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9QSU0gICAgICAgICAgNCAgICAgICAgICAgLyogUENJIGluYm91bmQgbWVzc2FnZSAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fUENSVyAgICAgICAgIDUgICAgICAgICAgIC8qIFBDSSBjb21tYW5kIHJlZyB3cml0ZSAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1BQTSAgICAgICAgICA2ICAgICAgICAgICAvKiBQQ0kgcG93ZXIgbWFuYWdlbWVudCAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9NU0kwICAgICAgICAgNyAgICAgICAgICAgLyogUENJIE1TSSBsZXZlbCAwICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fTVNJMSAgICAgICAgIDggICAgICAgICAgIC8qIFBDSSBNU0kgbGV2ZWwgMCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX01TSTIgICAgICAgICA5ICAgICAgICAgICAvKiBQQ0kgTVNJIGxldmVsIDAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9EMCAgICAgICAgICAgMTIgICAgICAgICAgLyogRE1BIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRDEgICAgICAgICAgIDEzICAgICAgICAgIC8qIERNQSBjaGFubmVsIDEgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0QyICAgICAgICAgICAxNCAgICAgICAgICAvKiBETUEgY2hhbm5lbCAyICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9EMyAgICAgICAgICAgMTUgICAgICAgICAgLyogRE1BIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fVUlDMU5DICAgICAgIDMwICAgICAgICAgIC8qIFVJQzEgbm9uLWNyaXRpY2FsIGludGVycnVwdCAgKi8KKyNkZWZpbmUgVkVDTlVNX1VJQzFDICAgICAgICAzMSAgICAgICAgICAvKiBVSUMxIGNyaXRpY2FsIGludGVycnVwdCAgICAgICovCisKKy8qIFVJQyAxICovCisjZGVmaW5lIFZFQ05VTV9NUyAgICAgICAgICAgKDMyICsgMSApICAgLyogTUFMIFNFUlIgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fVFhERSAgICAgICAgICgzMiArIDIgKSAgIC8qIE1BTCBUWERFICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX1JYREUgICAgICAgICAoMzIgKyAzICkgICAvKiBNQUwgUlhERSAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9NVEUgICAgICAgICAgKDMyICsgNiApICAgLyogTUFMIFR4IEVPQiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fTVJFICAgICAgICAgICgzMiArIDcgKSAgIC8qIE1BTCBSeCBFT0IgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0NUMCAgICAgICAgICAoMzIgKyAxMiApICAvKiBHUFQgY29tcGFyZSB0aW1lciAwICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9DVDEgICAgICAgICAgKDMyICsgMTMgKSAgLyogR1BUIGNvbXBhcmUgdGltZXIgMSAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fQ1QyICAgICAgICAgICgzMiArIDE0ICkgIC8qIEdQVCBjb21wYXJlIHRpbWVyIDIgICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0NUMyAgICAgICAgICAoMzIgKyAxNSApICAvKiBHUFQgY29tcGFyZSB0aW1lciAzICAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9DVDQgICAgICAgICAgKDMyICsgMTYgKSAgLyogR1BUIGNvbXBhcmUgdGltZXIgNCAgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRVRIMCAgICAgICAgICgzMiArIDI4KSAgIC8qIEV0aGVybmV0IGludGVycnVwdCBzdGF0dXMgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0VXVTAgICAgICAgICAoMzIgKyAyOSkgICAvKiBFbWFjICB3YWtldXAgICAgICAgICAgICAgICAgICovCisKKy8qIFVJQyAyICovCisjZGVmaW5lIFZFQ05VTV9FSVI1ICAgICAgICAgKDYyICsgMjQpICAgLyogRXh0ZXJuYWwgaW50ZXJydXB0IDUgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRUlSNCAgICAgICAgICg2MiArIDI1KSAgIC8qIEV4dGVybmFsIGludGVycnVwdCA0ICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0VJUjMgICAgICAgICAoNjIgKyAyNikgICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMyAgICAgICAgICovCisjZGVmaW5lIFZFQ05VTV9FSVIyICAgICAgICAgKDYyICsgMjcpICAgLyogRXh0ZXJuYWwgaW50ZXJydXB0IDIgICAgICAgICAqLworI2RlZmluZSBWRUNOVU1fRUlSMSAgICAgICAgICg2MiArIDI4KSAgIC8qIEV4dGVybmFsIGludGVycnVwdCAxICAgICAgICAgKi8KKyNkZWZpbmUgVkVDTlVNX0VJUjAgICAgICAgICAoNjIgKyAyOSkgICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMCAgICAgICAgICovCisKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MFNQKQogCiAvKiBVSUMgMCAqLwogI2RlZmluZSBWRUNOVU1fVTAgICAgICAgICAgIDAgICAgICAgICAgIC8qIFVBUlQwICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2NwdS9weGEvTWFrZWZpbGUgYi9jcHUvcHhhL01ha2VmaWxlCmluZGV4IDFhZjUzZDYuLmE2ZjZiNTkgMTAwNjQ0Ci0tLSBhL2NwdS9weGEvTWFrZWZpbGUKKysrIGIvY3B1L3B4YS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMSArMjMsMjUgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQ1BVKS5hCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8KLU9CSlMJPSBzZXJpYWwubyBpbnRlcnJ1cHRzLm8gY3B1Lm8gaTJjLm8gcHhhZmIubyBtbWMubworQ09CSlMJPSBzZXJpYWwubyBpbnRlcnJ1cHRzLm8gY3B1Lm8gaTJjLm8gcHhhZmIubyBtbWMubwogCi1hbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvczNjNDRiMC9NYWtlZmlsZSBiL2NwdS9zM2M0NGIwL01ha2VmaWxlCmluZGV4IGQ0M2M3M2UuLjYyY2I1MTQgMTAwNjQ0Ci0tLSBhL2NwdS9zM2M0NGIwL01ha2VmaWxlCisrKyBiL2NwdS9zM2M0NGIwL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjEgKzIzLDI1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vCi1PQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vCitDT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubwogCi1hbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvc2ExMTAwL01ha2VmaWxlIGIvY3B1L3NhMTEwMC9NYWtlZmlsZQppbmRleCA4Yzk1MGRhLi42MmNiNTE0IDEwMDY0NAotLS0gYS9jcHUvc2ExMTAwL01ha2VmaWxlCisrKyBiL2NwdS9zYTExMDAvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjEgKzIzLDI1IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKENQVSkuYQorTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vCi1PQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vCitDT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubwogCi1hbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCiAkKExJQik6CSQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoU1RBUlQ6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9kaXNrL01ha2VmaWxlIGIvZGlzay9NYWtlZmlsZQppbmRleCAzOTY3N2YxLi4zYmRiMDE4IDEwMDY0NAotLS0gYS9kaXNrL01ha2VmaWxlCisrKyBiL2Rpc2svTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjUsMjAgKzI1LDIzIEBACiAKICNDRkxBR1MgKz0gLURFVF9ERUJVRyAtRERFQlVHCiAKLUxJQgk9IGxpYmRpc2suYQorTElCCT0gJChvYmopbGliZGlzay5hCiAKLU9CSlMJPSBwYXJ0Lm8gcGFydF9tYWMubyBwYXJ0X2Rvcy5vIHBhcnRfaXNvLm8gcGFydF9hbWlnYS5vCitDT0JKUwk9IHBhcnQubyBwYXJ0X21hYy5vIHBhcnRfZG9zLm8gcGFydF9pc28ubyBwYXJ0X2FtaWdhLm8KKworU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCiAKIGFsbDoJJChMSUIpCiAKLSQoTElCKToJJChTVEFSVCkgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLjQ0MC1ERFItcGVyZm9ybWFuY2UgYi9kb2MvUkVBRE1FLjQ0MC1ERFItcGVyZm9ybWFuY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiYzc0NwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUuNDQwLUREUi1wZXJmb3JtYW5jZQpAQCAtMCwwICsxLDkwIEBACitBTUNDIHN1Z2dlc3RlZCB0byBzZXQgdGhlIFBNVSBiaXQgdG8gMCBmb3IgYmVzdCBwZXJmb3JtYWNlIG9uIHRoZQorUFBDNDQwIEREUiBjb250cm9sbGVyLiBUaGUgNDQwZXIgY29tbW9uIEREUiBzZXR1cCBmaWxlcyAoc2RyYW0uYyAmCitzcGRfc2RyYW0uYykgYXJlIGNoYW5nZWQgYWNjb3JkaW5nbHkuIFNvIGFsbCA0NDBlciBib2FyZHMgdXNpbmcKK3RoZXNlIHNldHVwIHJvdXRpbmVzIHdpbGwgYXV0b21hdGljYWxseSByZWNlaXZlIHRoaXMgcGVyZm9ybWFuY2UKK2luY3JlYXNlLgorCitQbGVhc2Ugc2VlIGJlbG93IHNvbWUgYmVuY2htYXJrcyBkb25lIGJ5IEFNQ0MgdG8gZGVtb25zdHJhdGUgdGhpcworcGVyZm9ybWFuY2UgY2hhbmdlczoKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTRFJBTTBfQ0ZHMFtQTVVdID0gMSAoVS1ib290IGRlZmF1bHQgZm9yIEJhbWJvbywgWW9zZW1pdGUgYW5kIFllbGxvd3N0b25lKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RyZWFtIGJlbmNobWFyayByZXN1bHRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIHN5c3RlbSB1c2VzIDggYnl0ZXMgcGVyIERPVUJMRSBQUkVDSVNJT04gd29yZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FycmF5IHNpemUgPSAyMDAwMDAwLCBPZmZzZXQgPSAwCitUb3RhbCBtZW1vcnkgcmVxdWlyZWQgPSA0NS44IE1CLgorRWFjaCB0ZXN0IGlzIHJ1biAxMCB0aW1lcywgYnV0IG9ubHkKK3RoZSAqYmVzdCogdGltZSBmb3IgZWFjaCBpcyB1c2VkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91ciBjbG9jayBncmFudWxhcml0eS9wcmVjaXNpb24gYXBwZWFycyB0byBiZSAxIG1pY3Jvc2Vjb25kcy4KK0VhY2ggdGVzdCBiZWxvdyB3aWxsIHRha2Ugb24gdGhlIG9yZGVyIG9mIDExMjM0NSBtaWNyb3NlY29uZHMuCisgICAoPSAxMTIzNDUgY2xvY2sgdGlja3MpCitJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzIGlmIHRoaXMgc2hvd3MgdGhhdCB5b3UgYXJlIG5vdCBnZXR0aW5nCithdCBsZWFzdCAyMCBjbG9jayB0aWNrcyBwZXIgdGVzdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dBUk5JTkcgLS0gVGhlIGFib3ZlIGlzIG9ubHkgYSByb3VnaCBndWlkZWxpbmUuCitGb3IgYmVzdCByZXN1bHRzLCBwbGVhc2UgYmUgc3VyZSB5b3Uga25vdyB0aGUgcHJlY2lzaW9uIG9mIHlvdXIgc3lzdGVtCit0aW1lci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Z1bmN0aW9uICAgICAgUmF0ZSAoTUIvcykgICBSTVMgdGltZSAgICAgTWluIHRpbWUgICAgIE1heCB0aW1lCitDb3B5OiAgICAgICAgIDI1Ni43NjgzICAgICAgIDAuMTI0OCAgICAgICAwLjEyNDYgICAgICAgMC4xMjUwCitTY2FsZTogICAgICAgIDI0Ni4wMTU3ICAgICAgIDAuMTMwMiAgICAgICAwLjEzMDEgICAgICAgMC4xMzAyCitBZGQ6ICAgICAgICAgIDI1NS4wMzE2ICAgICAgIDAuMTg4MyAgICAgICAwLjE4ODIgICAgICAgMC4xODg1CitUcmlhZDogICAgICAgIDI1My4xMjQ1ICAgICAgIDAuMTg5NyAgICAgICAwLjE4OTYgICAgICAgMC4xODk5CisKKworVFRDUCBCZW5jaG1hcmsgUmVzdWx0cwordHRjcC10OiBzb2NrZXQKK3R0Y3AtdDogY29ubmVjdAordHRjcC10OiBidWZsZW49ODE5MiwgbmJ1Zj0yMDQ4LCBhbGlnbj0xNjM4NC8wLCBwb3J0PTUwMDAgIHRjcCAgLT4KK2xvY2FsaG9zdAordHRjcC10OiAxNjc3NzIxNiBieXRlcyBpbiAwLjI4IHJlYWwgc2Vjb25kcyA9IDQ1NC4yOSBNYml0L3NlYyArKysKK3R0Y3AtdDogMjA0OCBJL08gY2FsbHMsIG1zZWMvY2FsbCA9IDAuMTQsIGNhbGxzL3NlYyA9IDcyNjguNTcKK3R0Y3AtdDogMC4wdXNlciAwLjFzeXMgMDowMHJlYWwgNjAlIDBpKzBkIDBtYXhyc3MgMCsycGYgMysxNTA2Y3N3CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NEUkFNMF9DRkcwW1BNVV0gPSAwIChTdWdnZXN0ZWQgbW9kaWZpY2F0aW9uKQorU2V0dGluZyBQTVUgPSAwIHByb3ZpZGVzIGEgbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCAqMiUgdG8KKzUlIGltcHJvdmVtZW50IGluIG1lbW9yeSBwZXJmb3JtYW5jZS4KKypJbXByb3ZlcyB0aGUgTWJpdC9zZWMgZm9yIFRUQ1AgYmVuY2htYXJrIGJ5IGFsbW9zdCA3NiUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdHJlYW0gYmVuY2htYXJrIHJlc3VsdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgc3lzdGVtIHVzZXMgOCBieXRlcyBwZXIgRE9VQkxFIFBSRUNJU0lPTiB3b3JkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXJyYXkgc2l6ZSA9IDIwMDAwMDAsIE9mZnNldCA9IDAKK1RvdGFsIG1lbW9yeSByZXF1aXJlZCA9IDQ1LjggTUIuCitFYWNoIHRlc3QgaXMgcnVuIDEwIHRpbWVzLCBidXQgb25seQordGhlICpiZXN0KiB0aW1lIGZvciBlYWNoIGlzIHVzZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3VyIGNsb2NrIGdyYW51bGFyaXR5L3ByZWNpc2lvbiBhcHBlYXJzIHRvIGJlIDEgbWljcm9zZWNvbmRzLgorRWFjaCB0ZXN0IGJlbG93IHdpbGwgdGFrZSBvbiB0aGUgb3JkZXIgb2YgMTIwMDY2IG1pY3Jvc2Vjb25kcy4KKyAgICg9IDEyMDA2NiBjbG9jayB0aWNrcykKK0luY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBhcnJheXMgaWYgdGhpcyBzaG93cyB0aGF0IHlvdSBhcmUgbm90IGdldHRpbmcKK2F0IGxlYXN0IDIwIGNsb2NrIHRpY2tzIHBlciB0ZXN0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV0FSTklORyAtLSBUaGUgYWJvdmUgaXMgb25seSBhIHJvdWdoIGd1aWRlbGluZS4KK0ZvciBiZXN0IHJlc3VsdHMsIHBsZWFzZSBiZSBzdXJlIHlvdSBrbm93IHRoZSBwcmVjaXNpb24gb2YgeW91ciBzeXN0ZW0KK3RpbWVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRnVuY3Rpb24gICAgICBSYXRlIChNQi9zKSAgIFJNUyB0aW1lICAgICBNaW4gdGltZSAgICAgTWF4IHRpbWUKK0NvcHk6ICAgICAgICAgMjYyLjUxNjcgICAgICAgMC4xMjIxICAgICAgIDAuMTIxOSAgICAgICAwLjEyMjMKK1NjYWxlOiAgICAgICAgMjU4LjQ4NTYgICAgICAgMC4xMjM4ICAgICAgIDAuMTIzOCAgICAgICAwLjEyNDAKK0FkZDogICAgICAgICAgMjYyLjU0MDQgICAgICAgMC4xODI5ICAgICAgIDAuMTgyOCAgICAgICAwLjE4MzEKK1RyaWFkOiAgICAgICAgMjY2Ljg1OTQgICAgICAgMC4xODAwICAgICAgIDAuMTc5OSAgICAgICAwLjE4MDIKKworVFRDUCBCZW5jaG1hcmsgUmVzdWx0cwordHRjcC10OiBzb2NrZXQKK3R0Y3AtdDogY29ubmVjdAordHRjcC10OiBidWZsZW49ODE5MiwgbmJ1Zj0yMDQ4LCBhbGlnbj0xNjM4NC8wLCBwb3J0PTUwMDAgIHRjcCAgLT4KK2xvY2FsaG9zdAordHRjcC10OiAxNjc3NzIxNiBieXRlcyBpbiAwLjE2IHJlYWwgc2Vjb25kcyA9IDgwNC4wNiBNYml0L3NlYyArKysKK3R0Y3AtdDogMjA0OCBJL08gY2FsbHMsIG1zZWMvY2FsbCA9IDAuMDgsIGNhbGxzL3NlYyA9IDEyODY0Ljg5Cit0dGNwLXQ6IDAuMHVzZXIgMC4wc3lzIDA6MDByZWFsIDQ2JSAwaSswZCAwbWF4cnNzIDArMnBmIDEyMCsxY3N3CisKKworMjAwNi0wNy0yOCwgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5iYW1ib28gYi9kb2MvUkVBRE1FLmJhbWJvbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTBiZTAxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5iYW1ib28KQEAgLTAsMCArMSwxNSBAQAorVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBTUNDIDQ0MEVQIGV2YWwgYm9hcmQgIkJhbWJvbyIgd2FzIGNoYW5nZWQKK3RvIG9ubHkgdXNlIDM4NCBrYnl0ZXMgb2YgRkxBU0ggZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIFRoaXMgd2F5IHRoZQorcmVkdW5kYW50IGVudmlyb25tZW50IGNhbiBiZSBzYXZlZCBpbiB0aGUgcmVtYWluaW5nIDIgc2VjdG9ycyBvZiB0aGUKK3NhbWUgZmxhc2ggY2hpcC4KKworQ2F1dGlvbjogV2l0aCBhbiB1cGdyYWRlIGZyb20gYW4gZWFybGllciBVLUJvb3QgdmVyc2lvbiB0aGUgY3VycmVudAorZW52aXJvbm1lbnQgd2lsbCBiZSBlcmFzZWQgc2luY2UgdGhlIGVudmlyb25tZW50IGlzIG5vdyBzYXZlZCBpbgorZGlmZmVyZW50IHNlY3RvcnMuIEJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0aGUgZW52aXJvbm1lbnQgY2FuCitiZSBzYXZlZCBhZnRlciB1cGdyYWRpbmcgdGhlIFUtQm9vdCBpbWFnZSBhbmQgKmJlZm9yZSogcmVzZXR0aW5nIHRoZQorYm9hcmQ6CisKK3NldGVudiByZWNvdmVyX2VudiAncHJvdCBvZmYgRkZGODAwMDAgRkZGOUZGRkY7ZXJhIEZGRjgwMDAwIEZGRjlGRkZGOycgXAorCSdjcC5iIEZGRjYwMDAwIEZGRjgwMDAwIDIwMDAwJworCisyMDA2LTA3LTI3LCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLm1wYzg2NDFocGNuIGIvZG9jL1JFQURNRS5tcGM4NjQxaHBjbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWEwYjFlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5tcGM4NjQxaHBjbgpAQCAtMCwwICsxLDEyMyBAQAorRnJlZXNjYWxlIE1QQzg2NDFIUENOIGJvYXJkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ3JlYXRlZCAwNS8yNC8yMDA2IEhhaXlpbmcgV2FuZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBCdWlsZGluZyBVLUJvb3QKKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIDg2eHggSFBDTiBjb2RlIGJhc2UgaXMga25vd24gdG8gY29tcGlsZSB1c2luZzoKKyAgICBCaW51dGlscyAyLjE1LCBHY2MgMy40LjMsIEdsaWJjIDIuMy4zCisKKyAgICAkIG1ha2UgTVBDODY0MUhQQ05fY29uZmlnCisgICAgQ29uZmlndXJpbmcgZm9yIE1QQzg2NDFIUENOIGJvYXJkLi4uCisKKyAgICAkIG1ha2UKKworCisyLiBTd2l0Y2ggYW5kIEp1bXBlciBTZXR0aW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitKdW1wZXJzOgorCUoxNCBQaW5zIDEtMiAobmVhciBwbGNjMzIgc29ja2V0KQorCitTd2l0Y2hlczoKKwlTVzEoMS01KSA9IDAxMTAwCUNGR19DT1JFUExMCT0gMDEwMDAgOjogQ09SRSA9ICAgMjoxCisJCQkJCQkgIDAxMTAwIDo6IENPUkUgPSAyLjU6MQorCQkJCQkJICAxMDAwMCA6OiBDT1JFID0gICAzOjEKKwkJCQkJCSAgMTExMDAgOjogQ09SRSA9IDMuNToxCisJCQkJCQkgIDEwMTAwIDo6IENPUkUgPSAgIDQ6MQorCQkJCQkJICAwMTExMCA6OiBDT1JFID0gNC41OjEKKwlTVzEoNi04KSA9IDAwMQkJQ0ZHX1NZU0NMSwk9IDAwMAk6OiBTWVNDTEsgPSAzM01IegorCQkJCQkJICAwMDEJOjogU1lTQ0xLID0gNDBNSHoKKworCVNXMigxLTQpID0gMTEwMAkJQ0ZHX0NDQlBMTAk9IDAwMTAJOjogMlggCisJCQkJCQkgIDAxMDAJOjogNFgKKwkJCQkJCSAgMDExMAk6OiA2WAorCQkJCQkJICAxMDAwCTo6IDhYCisJCQkJCQkgIDEwMTAJOjogMTBYCisJCQkJCQkgIDExMDAJOjogMTJYCisJCQkJCQkgIDExMTAJOjogMTRYCisJCQkJCQkgIDAwMDAJOjogMTZYCisJU1cyKDUtOCkgPSAxMTEwCQlDRkdfQk9PVExPQwk9IDExMTAJOjogYm9vdCAxNi1iaXQgbG9jYWxidXMKKworCVNXMygxLTcpID0gMDAxMTAwMAlDRkdfVklECQk9IDAwMTEwMDAgOjogVkNPUkUgPSAxLjJWCisJCQkJCQkgIDAxMDAwMDAgOjogVkNPUkUgPSAxLjExVgorCVNXMyg4KQkgPSAwCQlWQ0NfUExBVAk9IDAJOjogVkNDX1BMQVQgPSAxLjJWCisJCQkJCQkgIDEJOjogVkNDX1BMQVQgPSAxLjBWCisKKwlTVzQoMS0yKSA9IDExCQlDRkdfSE9TVE1PREUJPSAxMQk6OiBib3RoIHByb3RzIGhvc3Qvcm9vdAorCVNXNCgzLTQpID0gMTEJCUNGR19CT09UU0VRCT0gMTEJOjogbm8gYm9vdCBzZXEKKwlTVzQoNS04KSA9IDAwMTEJCUNGR19JT1BPUlQJPSAwMDExCTo6IGJvdGggUEVYCisKKwlTVzUoMSkJID0gMQkJQ0ZHX0ZMQVNITUFQCT0gMQk6OiBib290IGZyb20gZmxhc2gKKwkJCQkJCSAgMAk6OiBib290IGZyb20gUHJvbUpldAorCVNXNSgyKQkgPSAxCQlDRkdfRkxBU0hCQU5LCT0gMQk6OiBzd2FwIHVwcGVyL2xvd2VyCisJCQkJCQkJIGhhbHZlcyAodmlydHVhbCBiYW5rcykKKwkJCQkJCSAgMAk6OiBub3JtYWwKKwlTVzUoMykJID0gMAkJQ0ZHX0ZMQVNIV1AJPSAwCTo6IG5vdCBwcm90ZWN0ZWQKKwlTVzUoNCkJID0gMCAJCUNGR19QT1JURElWCT0gMQk6OiAyOjEgZm9yIFBENAorCQkJCQkJCSAgIDE6MSBmb3IgUEQ2CisJU1c1KDUtNikgPSAxMQkJQ0ZHX1BJWElTT1BUCT0gMTEJOjogcy93IGRldGVybWluZWQKKwlTVzUoNy04KSA9IDExCQlDRkdfTEFET1BUCT0gMTEJOjogcy93IGRldGVybWluZWQKKworCVNXNigxKQkgPSAxCQlDRkdfQ1BVQk9PVAk9IDEJOjogbm8gYm9vdCBob2xkb2ZmCisJU1c2KDIpCSA9IDEJCUNGR19CT09UQUREUgk9IDEJOjogbm8gdHJhc2xhdGlvbgorCVNXNigzLTUpID0gMDAwCQlDRkdfUkVGQ0xLU0VMCT0gMDAwCTo6IDEwME1IWgorCVNXNig2KQkgPSAxCQlDRkdfU0VSUk9NX0FERFI9IDEJOjoKKwlTVzYoNykJID0gMQkJQ0ZHX01FTURFQlVHCT0gMQk6OgorCVNXNig4KQkgPSAxCQlDRkdfRERSREVCVUcJPSAxCTo6CisKKwlTVzgoMSkJID0gMQkJQUNaX1NZTkMJPSAxCTo6IDQ4TUh6IG9uIFRQNDkKKwlTVzgoMikJID0gMQkJQUNCX1NZTkMJPSAxCTo6IFRIUk1UUklQIGRpc2FibGVkCisJU1c4KDMpCSA9IDEJCUFDWl9TRE9VVAk9IDEJOjogcDQgbW9kZQorCVNXOCg0KQkgPSAxCQlBQ0JfU0RPVVQJPSAxCTo6IFBBVEEgZnJlcS4gPSAxMzNNSHoKKwlTVzgoNSkJID0gMAkJU1VTTEVECQk9IDAJOjogU291dGhCcmlkZ2UgTW9kZQorCVNXOCg2KQkgPSAwCQlTUFJFQUQJCT0gMAk6OiBSRUZDTEsgU1NDRyBEaXNhYmxlZAorCVNXOCg3KQkgPSAxCQlBQ1BXUgkJPSAxCTo6IG5vbi1iYXR0ZXJ5CisJU1c4KDgpCSA9IDAJCUNGR19JRFdQCT0gMAk6OiB3cml0ZSBlbmFibGUKKworCiszLiBGbGFzaCBVLUJvb3QKKy0tLS0tLS0tLS0tLS0tLQorVGhlIGZsYXNoIHJhbmdlIDB4RkY4MDAwMDAgdG8gMHhGRkZGRkZGRiBjYW4gYmUgZGl2aWRlZCBpbnRvIDIgaGFsdmVzLgorSXQgaXMgcG9zc2libGUgdG8gdXNlIGVpdGhlciBoYWxmIHRvIGJvb3QgdXNpbmcgdS1ib290LiAgU3dpdGNoIDUgYml0IDIKK2lzIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4KKworMHhGRjgwMDAwMCB0byAweEZGQkZGRkZGIC0gNE1CCisweEZGQzAwMDAwIHRvIDB4RkZGRkZGRkYgLSA0TUIKK1doZW4gdGhpcyBiaXQgaXMgMCwgVS1Cb290IGlzIGF0IDB4RkZGMDAwMDAuCitXaGVuIHRoaXMgYml0IGlzIDEsIFUtQm9vdCBpcyBhdCAweEZGQjAwMDAwLgorCitVc2UgdGhlIGFib3ZlIG1lbnRpb25lZCBmbGFzaCBjb21tYW5kcyB0byBwcm9ncmFtIHRoZSBvdGhlciBoYWxmLCBhbmQKK3VzZSBzd2l0Y2ggNSwgYml0IDIgdG8gYWx0ZXJuYXRlIGJldHdlZW4gdGhlIGhhbHZlcy4gIE5vdGU6IFRoZSBib290aW5nCit2ZXJzaW9uIG9mIFUtQm9vdCB3aWxsIGFsd2F5cyBiZSBhdCAweEZGRjAwMDAwLgorCitUbyBGbGFzaCBVLUJvb3QgaW50byB0aGUgYm9vdGluZyBiYW5rICgweEZGQzAwMDAwIC0gMHhGRkZGRkZGRik6CisKKwl0ZnRwIDEwMDAwMDAgdS1ib290LmJpbgorCXByb3RlY3Qgb2ZmIGFsbAorCWVyYXNlIGZmZjAwMDAwIGZmZmZmZmZmCisJY3AuYiAxMDAwMDAwIGZmZjAwMTAwIDgwMDAwCisKK1RvIEZsYXNoIFUtYm9vdCBpbnRvIHRoZSBhbHRlcm5hdGl2ZSBiYW5rICgweEZGODAwMDAwIC0gMHhGRkJGRkZGRik6CisKKwl0ZnRwIDEwMDAwMDAgdS1ib290LmJpbgorCWVyYXNlIGZmYjAwMDAwIGZmYmZmZmZmCisJY3AuYiAxMDAwMDAwIGZmYjAwMTAwIDgwMDAwCisKKworNC4gTWVtb3J5IE1hcAorLS0tLS0tLS0tLS0tLQorCisJTWVtb3J5IFJhbmdlCQkJRGV2aWNlCQlTaXplCQkKKwktLS0tLS0tLS0tLS0JCQktLS0tLS0JCS0tLS0KKwkweDAwMDBfMDAwMAkweDdmZmZfZmZmZglERFIJCTJHCisJMHg4MDAwXzAwMDAJMHg5ZmZmX2ZmZmYJUENJMS9QRVgxIE1FTQk1MTJNCisJMHhhMDAwXzAwMDAJMHhhZmZmX2ZmZmYJUENJMi9QRVgyIE1FTQk1MTJNCisJMHhmODAwXzAwMDAJMHhmODBmX2ZmZmYJQ0NTUgkJMU0KKwkweGY4MTBfMDAwMAkweGY4MWZfZmZmZglQSVhJUwkJMU0KKwkweGY4NDBfMDAwMAkweGY4NDBfM2ZmZglTdGFjayBzcGFjZQkzMksKKwkweGUyMDBfMDAwMAkweGUyZmZfZmZmZglQQ0kxL1BFWDEgSU8JMTZNCisJMHhlMzAwXzAwMDAJMHhlM2ZmX2ZmZmYJUENJMi9QRVgyIElPCTE2TQorCTB4ZmUwMF8wMDAwCTB4ZmVmZl9mZmZmCUZsYXNoKGFsdGVybmF0ZSkxNk0KKwkweGZmMDBfMDAwMAkweGZmZmZfZmZmZglGbGFzaChib290IGJhbmspMTZNCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLm5hbmQtYm9vdC1wcGM0NDAgYi9kb2MvUkVBRE1FLm5hbmQtYm9vdC1wcGM0NDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjMWQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUubmFuZC1ib290LXBwYzQ0MApAQCAtMCwwICsxLDYwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTkFORCBib290IG9uIFBQQzQ0MCBwbGF0Zm9ybXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBVLUJvb3QgTkFORCBib290IGZlYXR1cmUgYXMgaXQKK2lzIGltcGxlbWVudGVkIGZvciB0aGUgQU1DQyBTZXF1b2lhIChQUEM0NDBFUHgpIGJvYXJkLgorCitUaGUgUFBDNDQwRVAoeCkvR1IoeCkgY3B1J3MgY2FuIGJvb3QgZGlyZWN0bHkgZnJvbSBOQU5EIEZMQVNILAorY29tcGxldGVseSB3aXRob3V0IE5PUiBGTEFTSC4gVGhpcyBjYW4gYmUgZG9uZSBieSB1c2luZyB0aGUgTkFORAorYm9vdCBmZWF0dXJlIG9mIHRoZSA0NDAgTkFORCBmbGFzaCBjb250cm9sbGVyIChOREZDKS4KKworSGVyZSBhIHNob3J0IGRlc2NpcHRpb24gb2YgdGhlIGRpZmZlcmVudCBib290IHN0YWdlczoKKworYSkgSVBMIChJbml0aWFsIFByb2dyYW0gTG9hZGVyLCBpbnRlZ3JhdGVkIGluc2lkZSBDUFUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dpbGwgbG9hZCBmaXJzdCA0ayBmcm9tIE5BTkQgKFNQTCkgaW50byBjYWNoZSBhbmQgZXhlY3V0ZSBpdCBmcm9tIHRoZXJlLgorCitiKSBTUEwgKFNlY29uZGFyeSBQcm9ncmFtIExvYWRlcikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2lsbCBsb2FkIHNwZWNpYWwgVS1Cb290IHZlcnNpb24gKE5VQikgZnJvbSBOQU5EIGFuZCBleGVjdXRlIGl0LiBUaGlzIFNQTAoraGFzIHRvIGZpdCBpbnRvIDRrQnl0ZS4gSXQgc2V0cyB1cCB0aGUgQ1BVIGFuZCBjb25maWd1cmVzIHRoZSBTRFJBTQorY29udHJvbGxlciBhbmQgdGhlIE5BTkQgY29udHJvbGxlciBzbyB0aGF0IHRoZSBzcGVjaWFsIFUtQm9vdCBpbWFnZSBjYW4gYmUKK2xvYWRlZCBmcm9tIE5BTkQgdG8gU0RSQU0uCitUaGlzIHNwZWNpYWwgaW1hZ2UgaXMgYnVpbGQgaW4gdGhlIGRpcmVjdG9yeSAibmFuZF9zcGwiLgorCitjKSBOVUIgKE5BTkQgVS1Cb290KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgTkFORCBVLUJvb3QgKE5VQikgaXMgYSBzcGVjaWFsIFUtQm9vdCB2ZXJzaW9uIHdoaWNoIGNhbiBiZSBzdGFydGVkCitmcm9tIFJBTS4gVGhlcmVmb3JlIGl0IG11c3RuJ3QgKHJlLSljb25maWd1cmUgdGhlIFNEUkFNIGNvbnRyb2xsZXIuCisKK09uIDQ0MEVQeCB0aGUgU1BMIGlzIGNvcGllZCB0byBpbnRlcm5hbCBTUkFNIGJlZm9yZSB0aGUgTkFORCBjb250cm9sbGVyCitpcyBzZXQgdXAuIFdoaWxlIHN0aWxsIHJ1bm5pbmcgZnJvbSBjYWNoZSwgSSBleHBlcmllbmNlZCBwcm9ibGVtcyBhY2Nlc3NpbmcKK3RoZSBOQU5EIGNvbnRyb2xsZXIuCisKKworRXhhbXBsZTogQnVpbGQgYW5kIGluc3RhbGwgTkFORCBib290IGltYWdlIGZvciBTZXF1b2lhICg0NDBFUHgpOgorCithKSBDb25maWd1cmUgZm9yIHNlcXVvaWEgd2l0aCBOQU5EIGJvb3Qgc3VwcG9ydDoKKyMgbWFrZSBzZXF1b2lhX25hbmRfY29uZmlnCisKK2IpIEJ1aWxkIGltYWdlKHMpCisjIG1ha2UKKworVGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBTUEwgaW1hZ2UgaW4gdGhlICJuYW5kX3NwbCIgZGlyZWN0b3J5OgorbmFuZF9zcGwvdS1ib290LXNwbC5iaW4KK0Fsc28gYW5vdGhlciBpbWFnZSBpcyBjcmVhdGVkIHNwYW5uaW5nIGEgd2hvbGUgTkFORCBibG9jayAoMTZrQnl0ZXMpOgorbmFuZF9zcGwvdS1ib290LXNwbC0xNmsuYmluCitUaGUgbWFpbiBOQU5EIFUtQm9vdCBpbWFnZSBpcyBnZW5lcmF0ZWQgaW4gdGhlIHRvcGxldmVsIGRpcmVjdG9yeToKK3UtYm9vdC5iaW4KK0EgY29tYmluZWQgaW1hZ2Ugb2YgdS1ib290LXNwbC0xNmsuYmluIGFuZCB1LWJvb3QuYmluIGlzIGFsc28gY3JlYXRlZDoKK3UtYm9vdC1uYW5kLmJpbgorCitUaGlzIGltYWdlIHNob3VsZCBiZSBwcm9ncmFtbWVkIGF0IG9mZnNldCAwIGluIHRoZSBOQU5EIGZsYXNoOgorCisjIHRmdHAgMTAwMDAwIC90ZnRwYm9vdC9zZXF1b2lhL3UtYm9vdC1uYW5kLmJpbgorIyBuYW5kIGVyYXNlIDAgNjAwMDAKKyMgbmFuZCB3cml0ZSAxMDAwMDAgMCA2MDAwMAorCisKK1NlcHRlbWJlciAwNyAyMDA2LCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCBlNjE3NmVkLi45NjBkYTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNSwxMyArMjUsMTMgQEAKIAogIyBDRkxBR1MgKz0gLURFVF9ERUJVRyAtRERFQlVHCiAKLUxJQgk9IGxpYmRyaXZlcnMuYQorTElCCT0gJChvYmopbGliZHJpdmVycy5hCiAKLU9CSlMJPSAzYzU4OS5vIDU3MDFybHMubyBhbGk1MTJ4Lm8gXAorQ09CSlMJPSAzYzU4OS5vIDU3MDFybHMubyBhbGk1MTJ4Lm8gXAogCSAgYmNtNTcweC5vIGJjbTU3MHhfYXV0b25lZy5vIGNmYl9jb25zb2xlLm8gY2ZpX2ZsYXNoLm8gXAogCSAgY3M4OTAwLm8gY3Q2OTAwMC5vIGRhdGFmbGFzaC5vIGRjMjExNHgubyBkbTkwMDB4Lm8gXAogCSAgZTEwMDAubyBlZXBybzEwMC5vIFwKLQkgIGk4MDQyLm8gaTgyMzY1Lm8gaW5jYS1pcF9zdy5vIGtleWJvYXJkLm8gXAorCSAgaTgwNDIubyBpbmNhLWlwX3N3Lm8ga2V5Ym9hcmQubyBcCiAJICBsYW45MWM5Ni5vIFwKIAkgIG5hdHNlbWkubyBuZTIwMDAubyBuZXRhcm1fZXRoLm8gbmV0Y29uc29sZS5vIFwKIAkgIG5zMTY1NTAubyBuczgzODJ4Lm8gbnM4NzMwOC5vIG5zNzUyMF9ldGgubyBvbWFwMTUxMF9pMmMubyBcCkBAIC00NCwyMiArNDQsMjcgQEAKIAkgIHNlcmlhbC5vIHNlcmlhbF9tYXgzMTAwLm8gXAogCSAgc2VyaWFsX3BsMDEwLm8gc2VyaWFsX3BsMDExLm8gc2VyaWFsX3h1YXJ0bGl0ZS5vIFwKIAkgIHNsODExX3VzYi5vIHNtNTAxLm8gc21jOTExMTEubyBzbWlMeW54RU0ubyBcCi0JICBzdGF0dXNfbGVkLm8gc3ltNTNjOHh4Lm8gXAorCSAgc3RhdHVzX2xlZC5vIHN5bTUzYzh4eC5vIGFoY2kubyBcCiAJICB0aV9wY2kxNDEwYS5vIHRpZ29uMy5vIHRzZWMubyBcCiAJICB1c2JkY29yZS5vIHVzYmRjb3JlX2VwMC5vIHVzYmRjb3JlX29tYXAxNTEwLm8gdXNidHR5Lm8gXAogCSAgdmlkZW9tb2Rlcy5vIHc4M2M1NTNmLm8gXAotCSAga3M4Njk1ZXRoLm8KKwkgIGtzODY5NWV0aC5vIFwKKwkgIHB4YV9wY21jaWEubyBtcGM4eHhfcGNtY2lhLm8gdHFtOHh4X3BjbWNpYS5vCVwKKwkgIHJweF9wY21jaWEubworCitTUkNTCTo9ICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKIAogYWxsOgkkKExJQikKIAotJChMSUIpOiAkKE9CSlMpCiskKExJQik6ICQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWhjaS5jIGIvZHJpdmVycy9haGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNlZmYwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWhjaS5jCkBAIC0wLDAgKzEsNzAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAyMDA2LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBKYXNvbiBKaW48SmFzb24uamluQGZyZWVzY2FsZS5jb20+CisgKiAgICAgICAgIFpoYW5nIFdlaTx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiB3aXRoIHRoZSByZWZlcmVuY2Ugb24gbGliYXRhIGFuZCBhaGNpIGRydmllciBpbiBrZXJuZWwKKyAqCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmZGVmIENPTkZJR19TQ1NJX0FIQ0kKKworI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c2NzaS5oPgorI2luY2x1ZGUgPGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8YWhjaS5oPgorCitzdHJ1Y3QgYWhjaV9wcm9iZV9lbnQgKnByb2JlX2VudCA9IE5VTEw7CitoZF9kcml2ZWlkX3QgKmF0YWlkW0FIQ0lfTUFYX1BPUlRTXTsKKworI2RlZmluZSB3cml0ZWxfd2l0aF9mbHVzaChhLGIpCWRvIHsgd3JpdGVsKGEsYik7IHJlYWRsKGIpOyB9IHdoaWxlICgwKQorCisKK3N0YXRpYyBpbmxpbmUgdTMyIGFoY2lfcG9ydF9iYXNlKHUzMiBiYXNlLCB1MzIgcG9ydCkKK3sKKwlyZXR1cm4gYmFzZSArIDB4MTAwICsgKHBvcnQgKiAweDgwKTsKK30KKworCitzdGF0aWMgdm9pZCBhaGNpX3NldHVwX3BvcnQoc3RydWN0IGFoY2lfaW9wb3J0cyAqcG9ydCwgdW5zaWduZWQgbG9uZyBiYXNlLAorCQkJICAgIHVuc2lnbmVkIGludCBwb3J0X2lkeCkKK3sKKwliYXNlID0gYWhjaV9wb3J0X2Jhc2UoYmFzZSwgcG9ydF9pZHgpOworCisJcG9ydC0+Y21kX2FkZHIgPSBiYXNlOworCXBvcnQtPnNjcl9hZGRyID0gYmFzZSArIFBPUlRfU0NSOworfQorCisKKyNkZWZpbmUgbXNsZWVwKGEpIHVkZWxheShhICogMTAwMCkKKyNkZWZpbmUgc3NsZWVwKGEpIG1zbGVlcChhICogMTAwMCkKKworc3RhdGljIGludCB3YWl0aW5nX2Zvcl9jbWRfY29tcGxldGVkKHZvbGF0aWxlIHU4ICpvZmZzZXQsCisJCQkJICAgICBpbnQgdGltZW91dF9tc2VjLAorCQkJCSAgICAgdTMyIHNpZ24pCit7CisJaW50IGk7CisJdTMyIHN0YXR1czsKKworCWZvciAoaSA9IDA7ICgoc3RhdHVzID0gcmVhZGwob2Zmc2V0KSkgJiBzaWduKSAmJiBpIDwgdGltZW91dF9tc2VjOyBpKyspCisJCW1zbGVlcCgxKTsKKworCXJldHVybiAoaSA8IHRpbWVvdXRfbXNlYykgPyAwIDogLTE7Cit9CisKKworc3RhdGljIGludCBhaGNpX2hvc3RfaW5pdChzdHJ1Y3QgYWhjaV9wcm9iZV9lbnQgKnByb2JlX2VudCkKK3sKKwlwY2lfZGV2X3QgcGRldiA9IHByb2JlX2VudC0+ZGV2OworCXZvbGF0aWxlIHU4ICptbWlvID0gKHZvbGF0aWxlIHU4ICopcHJvYmVfZW50LT5tbWlvX2Jhc2U7CisJdTMyIHRtcCwgY2FwX3NhdmU7CisJdTE2IHRtcDE2OworCWludCBpLCBqOworCXZvbGF0aWxlIHU4ICpwb3J0X21taW87CisJdW5zaWduZWQgc2hvcnQgdmVuZG9yOworCisJY2FwX3NhdmUgPSByZWFkbChtbWlvICsgSE9TVF9DQVApOworCWNhcF9zYXZlICY9ICgoMSA8PCAyOCkgfCAoMSA8PCAxNykpOworCWNhcF9zYXZlIHw9ICgxIDw8IDI3KTsKKworCS8qIGdsb2JhbCBjb250cm9sbGVyIHJlc2V0ICovCisJdG1wID0gcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsKKwlpZiAoKHRtcCAmIEhPU1RfUkVTRVQpID09IDApCisJCXdyaXRlbF93aXRoX2ZsdXNoKHRtcCB8IEhPU1RfUkVTRVQsIG1taW8gKyBIT1NUX0NUTCk7CisKKwkvKiByZXNldCBtdXN0IGNvbXBsZXRlIHdpdGhpbiAxIHNlY29uZCwgb3IKKwkgKiB0aGUgaGFyZHdhcmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZnJpZWQuCisJICovCisJc3NsZWVwKDEpOworCisJdG1wID0gcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsKKwlpZiAodG1wICYgSE9TVF9SRVNFVCkgeworCQlkZWJ1ZygiY29udHJvbGxlciByZXNldCBmYWlsZWQgKDB4JXgpXG4iLCB0bXApOworCQlyZXR1cm4gLTE7CisJfQorCisJd3JpdGVsX3dpdGhfZmx1c2goSE9TVF9BSENJX0VOLCBtbWlvICsgSE9TVF9DVEwpOworCXdyaXRlbChjYXBfc2F2ZSwgbW1pbyArIEhPU1RfQ0FQKTsKKwl3cml0ZWxfd2l0aF9mbHVzaCgweGYsIG1taW8gKyBIT1NUX1BPUlRTX0lNUEwpOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1ZFTkRPUl9JRCwgJnZlbmRvcik7CisKKwlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwpIHsKKwkJdTE2IHRtcDE2OworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCAweDkyLCAmdG1wMTYpOworCQl0bXAxNiB8PSAweGY7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCAweDkyLCB0bXAxNik7CisJfQorCisJcHJvYmVfZW50LT5jYXAgPSByZWFkbChtbWlvICsgSE9TVF9DQVApOworCXByb2JlX2VudC0+cG9ydF9tYXAgPSByZWFkbChtbWlvICsgSE9TVF9QT1JUU19JTVBMKTsKKwlwcm9iZV9lbnQtPm5fcG9ydHMgPSAocHJvYmVfZW50LT5jYXAgJiAweDFmKSArIDE7CisKKwlkZWJ1ZygiY2FwIDB4JXggIHBvcnRfbWFwIDB4JXggIG5fcG9ydHMgJWRcbiIsCisJICAgICAgcHJvYmVfZW50LT5jYXAsIHByb2JlX2VudC0+cG9ydF9tYXAsIHByb2JlX2VudC0+bl9wb3J0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJvYmVfZW50LT5uX3BvcnRzOyBpKyspIHsKKwkJcHJvYmVfZW50LT5wb3J0W2ldLnBvcnRfbW1pbyA9IGFoY2lfcG9ydF9iYXNlKCh1MzIpIG1taW8sIGkpOworCQlwb3J0X21taW8gPSAodTggKikgcHJvYmVfZW50LT5wb3J0W2ldLnBvcnRfbW1pbzsKKwkJYWhjaV9zZXR1cF9wb3J0KCZwcm9iZV9lbnQtPnBvcnRbaV0sICh1bnNpZ25lZCBsb25nKW1taW8sIGkpOworCisJCS8qIG1ha2Ugc3VyZSBwb3J0IGlzIG5vdCBhY3RpdmUgKi8KKwkJdG1wID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTUQpOworCQlpZiAodG1wICYgKFBPUlRfQ01EX0xJU1RfT04gfCBQT1JUX0NNRF9GSVNfT04gfAorCQkJICAgUE9SVF9DTURfRklTX1JYIHwgUE9SVF9DTURfU1RBUlQpKSB7CisJCQl0bXAgJj0gfihQT1JUX0NNRF9MSVNUX09OIHwgUE9SVF9DTURfRklTX09OIHwKKwkJCQkgUE9SVF9DTURfRklTX1JYIHwgUE9SVF9DTURfU1RBUlQpOworCQkJd3JpdGVsX3dpdGhfZmx1c2godG1wLCBwb3J0X21taW8gKyBQT1JUX0NNRCk7CisKKwkJCS8qIHNwZWMgc2F5cyA1MDAgbXNlY3MgZm9yIGVhY2ggYml0LCBzbworCQkJICogdGhpcyBpcyBzbGlnaHRseSBpbmNvcnJlY3QuCisJCQkgKi8KKwkJCW1zbGVlcCg1MDApOworCQl9CisKKwkJd3JpdGVsKFBPUlRfQ01EX1NQSU5fVVAsIHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKKworCQlqID0gMDsKKwkJd2hpbGUgKGogPCAxMDApIHsKKwkJCW1zbGVlcCgxMCk7CisJCQl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX1NDUl9TVEFUKTsKKwkJCWlmICgodG1wICYgMHhmKSA9PSAweDMpCisJCQkJYnJlYWs7CisJCQlqKys7CisJCX0KKworCQl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX1NDUl9FUlIpOworCQlkZWJ1ZygiUE9SVF9TQ1JfRVJSIDB4JXhcbiIsIHRtcCk7CisJCXdyaXRlbCh0bXAsIHBvcnRfbW1pbyArIFBPUlRfU0NSX0VSUik7CisKKwkJLyogYWNrIGFueSBwZW5kaW5nIGlycSBldmVudHMgZm9yIHRoaXMgcG9ydCAqLworCQl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0lSUV9TVEFUKTsKKwkJZGVidWcoIlBPUlRfSVJRX1NUQVQgMHgleFxuIiwgdG1wKTsKKwkJaWYgKHRtcCkKKwkJCXdyaXRlbCh0bXAsIHBvcnRfbW1pbyArIFBPUlRfSVJRX1NUQVQpOworCisJCXdyaXRlbCgxIDw8IGksIG1taW8gKyBIT1NUX0lSUV9TVEFUKTsKKworCQkvKiBzZXQgaXJxIG1hc2sgKGVuYWJsZXMgaW50ZXJydXB0cykgKi8KKwkJd3JpdGVsKERFRl9QT1JUX0lSUSwgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CisKKwkJLypyZWdpc3RlciBsaW5rdXAgcG9ydHMgKi8KKwkJdG1wID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9TQ1JfU1RBVCk7CisJCWRlYnVnKCJQb3J0ICVkIHN0YXR1czogMHgleFxuIiwgaSwgdG1wKTsKKwkJaWYgKCh0bXAgJiAweGYpID09IDB4MDMpCisJCQlwcm9iZV9lbnQtPmxpbmtfcG9ydF9tYXAgfD0gKDB4MDEgPDwgaSk7CisJfQorCisJdG1wID0gcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsKKwlkZWJ1ZygiSE9TVF9DVEwgMHgleFxuIiwgdG1wKTsKKwl3cml0ZWwodG1wIHwgSE9TVF9JUlFfRU4sIG1taW8gKyBIT1NUX0NUTCk7CisJdG1wID0gcmVhZGwobW1pbyArIEhPU1RfQ1RMKTsKKwlkZWJ1ZygiSE9TVF9DVEwgMHgleFxuIiwgdG1wKTsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmdG1wMTYpOworCXRtcCB8PSBQQ0lfQ09NTUFORF9NQVNURVI7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCB0bXAxNik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBhaGNpX3ByaW50X2luZm8oc3RydWN0IGFoY2lfcHJvYmVfZW50ICpwcm9iZV9lbnQpCit7CisJcGNpX2Rldl90IHBkZXYgPSBwcm9iZV9lbnQtPmRldjsKKwl2b2xhdGlsZSB1OCAqbW1pbyA9ICh2b2xhdGlsZSB1OCAqKXByb2JlX2VudC0+bW1pb19iYXNlOworCXUzMiB2ZXJzLCBjYXAsIGltcGwsIHNwZWVkOworCWNvbnN0IGNoYXIgKnNwZWVkX3M7CisJdTE2IGNjOworCWNvbnN0IGNoYXIgKnNjY19zOworCisJdmVycyA9IHJlYWRsKG1taW8gKyBIT1NUX1ZFUlNJT04pOworCWNhcCA9IHByb2JlX2VudC0+Y2FwOworCWltcGwgPSBwcm9iZV9lbnQtPnBvcnRfbWFwOworCisJc3BlZWQgPSAoY2FwID4+IDIwKSAmIDB4ZjsKKwlpZiAoc3BlZWQgPT0gMSkKKwkJc3BlZWRfcyA9ICIxLjUiOworCWVsc2UgaWYgKHNwZWVkID09IDIpCisJCXNwZWVkX3MgPSAiMyI7CisJZWxzZQorCQlzcGVlZF9zID0gIj8iOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHgwYSwgJmNjKTsKKwlpZiAoY2MgPT0gMHgwMTAxKQorCQlzY2NfcyA9ICJJREUiOworCWVsc2UgaWYgKGNjID09IDB4MDEwNikKKwkJc2NjX3MgPSAiU0FUQSI7CisJZWxzZSBpZiAoY2MgPT0gMHgwMTA0KQorCQlzY2NfcyA9ICJSQUlEIjsKKwllbHNlCisJCXNjY19zID0gInVua25vd24iOworCisJcHJpbnRmKCJBSENJICUwMnglMDJ4LiUwMnglMDJ4ICIKKwkgICAgICAgIiV1IHNsb3RzICV1IHBvcnRzICVzIEdicHMgMHgleCBpbXBsICVzIG1vZGVcbiIsCisJICAgICAgICh2ZXJzID4+IDI0KSAmIDB4ZmYsCisJICAgICAgICh2ZXJzID4+IDE2KSAmIDB4ZmYsCisJICAgICAgICh2ZXJzID4+IDgpICYgMHhmZiwKKwkgICAgICAgdmVycyAmIDB4ZmYsCisJICAgICAgICgoY2FwID4+IDgpICYgMHgxZikgKyAxLCAoY2FwICYgMHgxZikgKyAxLCBzcGVlZF9zLCBpbXBsLCBzY2Nfcyk7CisKKwlwcmludGYoImZsYWdzOiAiCisJICAgICAgICIlcyVzJXMlcyVzJXMiCisJICAgICAgICIlcyVzJXMlcyVzJXMlc1xuIiwKKwkgICAgICAgY2FwICYgKDEgPDwgMzEpID8gIjY0Yml0ICIgOiAiIiwKKwkgICAgICAgY2FwICYgKDEgPDwgMzApID8gIm5jcSAiIDogIiIsCisJICAgICAgIGNhcCAmICgxIDw8IDI4KSA/ICJpbGNrICIgOiAiIiwKKwkgICAgICAgY2FwICYgKDEgPDwgMjcpID8gInN0YWcgIiA6ICIiLAorCSAgICAgICBjYXAgJiAoMSA8PCAyNikgPyAicG0gIiA6ICIiLAorCSAgICAgICBjYXAgJiAoMSA8PCAyNSkgPyAibGVkICIgOiAiIiwKKwkgICAgICAgY2FwICYgKDEgPDwgMjQpID8gImNsbyAiIDogIiIsCisJICAgICAgIGNhcCAmICgxIDw8IDE5KSA/ICJueiAiIDogIiIsCisJICAgICAgIGNhcCAmICgxIDw8IDE4KSA/ICJvbmx5ICIgOiAiIiwKKwkgICAgICAgY2FwICYgKDEgPDwgMTcpID8gInBtcCAiIDogIiIsCisJICAgICAgIGNhcCAmICgxIDw8IDE1KSA/ICJwaW8gIiA6ICIiLAorCSAgICAgICBjYXAgJiAoMSA8PCAxNCkgPyAic2x1bSAiIDogIiIsCisJICAgICAgIGNhcCAmICgxIDw8IDEzKSA/ICJwYXJ0ICIgOiAiIik7Cit9CisKK3N0YXRpYyBpbnQgYWhjaV9pbml0X29uZShwY2lfZGV2X3QgcGRldikKK3sKKwl1MzIgaW9iYXNlLCB2ZW5kb3I7CisJaW50IHJjOworCisJbWVtc2V0KCh2b2lkICopYXRhaWQsIDAsIHNpemVvZihoZF9kcml2ZWlkX3QgKikgKiBBSENJX01BWF9QT1JUUyk7CisKKwlwcm9iZV9lbnQgPSBtYWxsb2Moc2l6ZW9mKHByb2JlX2VudCkpOworCW1lbXNldChwcm9iZV9lbnQsIDAsIHNpemVvZihwcm9iZV9lbnQpKTsKKwlwcm9iZV9lbnQtPmRldiA9IHBkZXY7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgQUhDSV9QQ0lfQkFSLCAmaW9iYXNlKTsKKwlpb2Jhc2UgJj0gfjB4ZjsKKworCXByb2JlX2VudC0+aG9zdF9mbGFncyA9IEFUQV9GTEFHX1NBVEEKKwkJCQl8IEFUQV9GTEFHX05PX0xFR0FDWQorCQkJCXwgQVRBX0ZMQUdfTU1JTworCQkJCXwgQVRBX0ZMQUdfUElPX0RNQQorCQkJCXwgQVRBX0ZMQUdfTk9fQVRBUEk7CisJcHJvYmVfZW50LT5waW9fbWFzayA9IDB4MWY7CisJcHJvYmVfZW50LT51ZG1hX21hc2sgPSAweDdmOwkvKkZpeG1lLGFzc3VtZSB0byBzdXBwb3J0IFVETUE2ICovCisKKwlwcm9iZV9lbnQtPm1taW9fYmFzZSA9IGlvYmFzZTsKKworCS8qIFRha2UgZnJvbSBrZXJuZWw6CisJICogSk1pY3Jvbi1zcGVjaWZpYyBmaXh1cDoKKwkgKiBtYWtlIHN1cmUgd2UncmUgaW4gQUhDSSBtb2RlCisJICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1ZFTkRPUl9JRCwgJnZlbmRvcik7CisJaWYgKHZlbmRvciA9PSAweDE5N2IpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQxLCAweGExKTsKKworCS8qIGluaXRpYWxpemUgYWRhcHRlciAqLworCXJjID0gYWhjaV9ob3N0X2luaXQocHJvYmVfZW50KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX291dDsKKworCWFoY2lfcHJpbnRfaW5mbyhwcm9iZV9lbnQpOworCisJcmV0dXJuIDA7CisKKyAgICAgIGVycl9vdXQ6CisJcmV0dXJuIHJjOworfQorCisKKyNkZWZpbmUgTUFYX0RBVEFfQllURV9DT1VOVCAgKDQqMTAyNCoxMDI0KQorCitzdGF0aWMgaW50IGFoY2lfZmlsbF9zZyh1OCBwb3J0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBidWZfbGVuKQoreworCXN0cnVjdCBhaGNpX2lvcG9ydHMgKnBwID0gJihwcm9iZV9lbnQtPnBvcnRbcG9ydF0pOworCXN0cnVjdCBhaGNpX3NnICphaGNpX3NnID0gcHAtPmNtZF90Ymxfc2c7CisJdTMyIHNnX2NvdW50OworCWludCBpOworCisJc2dfY291bnQgPSAoKGJ1Zl9sZW4gLSAxKSAvIE1BWF9EQVRBX0JZVEVfQ09VTlQpICsgMTsKKwlpZiAoc2dfY291bnQgPiBBSENJX01BWF9TRykgeworCQlwcmludGYoIkVycm9yOlRvbyBtdWNoIHNnIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfY291bnQ7IGkrKykgeworCQlhaGNpX3NnLT5hZGRyID0KKwkJICAgIGNwdV90b19sZTMyKCh1MzIpIGJ1ZiArIGkgKiBNQVhfREFUQV9CWVRFX0NPVU5UKTsKKwkJYWhjaV9zZy0+YWRkcl9oaSA9IDA7CisJCWFoY2lfc2ctPmZsYWdzX3NpemUgPSBjcHVfdG9fbGUzMigweDNmZmZmZiAmCisJCQkJCSAgKGJ1Zl9sZW4gPCBNQVhfREFUQV9CWVRFX0NPVU5UCisJCQkJCSAgID8gKGJ1Zl9sZW4gLSAxKQorCQkJCQkgICA6IChNQVhfREFUQV9CWVRFX0NPVU5UIC0gMSkpKTsKKwkJYWhjaV9zZysrOworCQlidWZfbGVuIC09IE1BWF9EQVRBX0JZVEVfQ09VTlQ7CisJfQorCisJcmV0dXJuIHNnX2NvdW50OworfQorCisKK3N0YXRpYyB2b2lkIGFoY2lfZmlsbF9jbWRfc2xvdChzdHJ1Y3QgYWhjaV9pb3BvcnRzICpwcCwgdTMyIG9wdHMpCit7CisJcHAtPmNtZF9zbG90LT5vcHRzID0gY3B1X3RvX2xlMzIob3B0cyk7CisJcHAtPmNtZF9zbG90LT5zdGF0dXMgPSAwOworCXBwLT5jbWRfc2xvdC0+dGJsX2FkZHIgPSBjcHVfdG9fbGUzMihwcC0+Y21kX3RibCAmIDB4ZmZmZmZmZmYpOworCXBwLT5jbWRfc2xvdC0+dGJsX2FkZHJfaGkgPSAwOworfQorCisKK3N0YXRpYyB2b2lkIGFoY2lfc2V0X2ZlYXR1cmUodTggcG9ydCkKK3sKKwlzdHJ1Y3QgYWhjaV9pb3BvcnRzICpwcCA9ICYocHJvYmVfZW50LT5wb3J0W3BvcnRdKTsKKwl2b2xhdGlsZSB1OCAqcG9ydF9tbWlvID0gKHZvbGF0aWxlIHU4ICopcHAtPnBvcnRfbW1pbzsKKwl1MzIgY21kX2Zpc19sZW4gPSA1OwkvKiBmaXZlIGR3b3JkcyAqLworCXU4IGZpc1syMF07CisKKwkvKnNldCBmZWF0dXJlICovCisJbWVtc2V0KGZpcywgMCwgMjApOworCWZpc1swXSA9IDB4Mjc7CisJZmlzWzFdID0gMSA8PCA3OworCWZpc1syXSA9IEFUQV9DTURfU0VURjsKKwlmaXNbM10gPSBTRVRGRUFUVVJFU19YRkVSOworCWZpc1sxMl0gPSBfX2lsb2cyKHByb2JlX2VudC0+dWRtYV9tYXNrICsgMSkgKyAweDQwIC0gMHgwMTsKKworCW1lbWNweSgodW5zaWduZWQgY2hhciAqKXBwLT5jbWRfdGJsLCBmaXMsIDIwKTsKKwlhaGNpX2ZpbGxfY21kX3Nsb3QocHAsIGNtZF9maXNfbGVuKTsKKwl3cml0ZWwoMSwgcG9ydF9tbWlvICsgUE9SVF9DTURfSVNTVUUpOworCXJlYWRsKHBvcnRfbW1pbyArIFBPUlRfQ01EX0lTU1VFKTsKKworCWlmICh3YWl0aW5nX2Zvcl9jbWRfY29tcGxldGVkKHBvcnRfbW1pbyArIFBPUlRfQ01EX0lTU1VFLCAxNTAsIDB4MSkpIHsKKwkJcHJpbnRmKCJzZXQgZmVhdHVyZSBlcnJvciFcbiIpOworCX0KK30KKworCitzdGF0aWMgaW50IGFoY2lfcG9ydF9zdGFydCh1OCBwb3J0KQoreworCXN0cnVjdCBhaGNpX2lvcG9ydHMgKnBwID0gJihwcm9iZV9lbnQtPnBvcnRbcG9ydF0pOworCXZvbGF0aWxlIHU4ICpwb3J0X21taW8gPSAodm9sYXRpbGUgdTggKilwcC0+cG9ydF9tbWlvOworCXUzMiBwb3J0X3N0YXR1czsKKwl1MzIgbWVtOworCisJZGVidWcoIkVudGVyIHN0YXJ0IHBvcnQ6ICVkXG4iLCBwb3J0KTsKKwlwb3J0X3N0YXR1cyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfU0NSX1NUQVQpOworCWRlYnVnKCJQb3J0ICVkIHN0YXR1czogJXhcbiIsIHBvcnQsIHBvcnRfc3RhdHVzKTsKKwlpZiAoKHBvcnRfc3RhdHVzICYgMHhmKSAhPSAweDAzKSB7CisJCXByaW50ZigiTm8gTGluayBvbiB0aGlzIHBvcnQhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbSA9ICh1MzIpIG1hbGxvYyhBSENJX1BPUlRfUFJJVl9ETUFfU1ogKyAyMDQ4KTsKKwlpZiAoIW1lbSkgeworCQlmcmVlKHBwKTsKKwkJcHJpbnRmKCJObyBtZW0gZm9yIHRhYmxlIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbSA9IChtZW0gKyAweDgwMCkgJiAofjB4N2ZmKTsJLyogQWxpZ25lZCB0byAyMDQ4LWJ5dGVzICovCisJbWVtc2V0KCh1OCAqKSBtZW0sIDAsIEFIQ0lfUE9SVF9QUklWX0RNQV9TWik7CisKKwkvKgorCSAqIEZpcnN0IGl0ZW0gaW4gY2h1bmsgb2YgRE1BIG1lbW9yeTogMzItc2xvdCBjb21tYW5kIHRhYmxlLAorCSAqIDMyIGJ5dGVzIGVhY2ggaW4gc2l6ZQorCSAqLworCXBwLT5jbWRfc2xvdCA9IChzdHJ1Y3QgYWhjaV9jbWRfaGRyICopbWVtOworCWRlYnVnKCJjbWRfc2xvdCA9IDB4JXhcbiIsIHBwLT5jbWRfc2xvdCk7CisJbWVtICs9IChBSENJX0NNRF9TTE9UX1NaICsgMjI0KTsKKworCS8qCisJICogU2Vjb25kIGl0ZW06IFJlY2VpdmVkLUZJUyBhcmVhCisJICovCisJcHAtPnJ4X2ZpcyA9IG1lbTsKKwltZW0gKz0gQUhDSV9SWF9GSVNfU1o7CisKKwkvKgorCSAqIFRoaXJkIGl0ZW06IGRhdGEgYXJlYSBmb3Igc3RvcmluZyBhIHNpbmdsZSBjb21tYW5kCisJICogYW5kIGl0cyBzY2F0dGVyLWdhdGhlciB0YWJsZQorCSAqLworCXBwLT5jbWRfdGJsID0gbWVtOworCWRlYnVnKCJjbWRfdGJsX2RtYSA9IDB4JXhcbiIsIHBwLT5jbWRfdGJsKTsKKworCW1lbSArPSBBSENJX0NNRF9UQkxfSERSOworCXBwLT5jbWRfdGJsX3NnID0gKHN0cnVjdCBhaGNpX3NnICopbWVtOworCisJd3JpdGVsX3dpdGhfZmx1c2goKHUzMikgcHAtPmNtZF9zbG90LCBwb3J0X21taW8gKyBQT1JUX0xTVF9BRERSKTsKKworCXdyaXRlbF93aXRoX2ZsdXNoKHBwLT5yeF9maXMsIHBvcnRfbW1pbyArIFBPUlRfRklTX0FERFIpOworCisJd3JpdGVsX3dpdGhfZmx1c2goUE9SVF9DTURfSUNDX0FDVElWRSB8IFBPUlRfQ01EX0ZJU19SWCB8CisJCQkgIFBPUlRfQ01EX1BPV0VSX09OIHwgUE9SVF9DTURfU1BJTl9VUCB8CisJCQkgIFBPUlRfQ01EX1NUQVJULCBwb3J0X21taW8gKyBQT1JUX0NNRCk7CisKKwlkZWJ1ZygiRXhpdCBzdGFydCBwb3J0ICVkXG4iLCBwb3J0KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X2FoY2lfZGV2aWNlX2RhdGEodTggcG9ydCwgdTggKmZpcywgaW50IGZpc19sZW4sIHU4ICpidWYsCisJCQkJaW50IGJ1Zl9sZW4pCit7CisKKwlzdHJ1Y3QgYWhjaV9pb3BvcnRzICpwcCA9ICYocHJvYmVfZW50LT5wb3J0W3BvcnRdKTsKKwl2b2xhdGlsZSB1OCAqcG9ydF9tbWlvID0gKHZvbGF0aWxlIHU4ICopcHAtPnBvcnRfbW1pbzsKKwl1MzIgb3B0czsKKwl1MzIgcG9ydF9zdGF0dXM7CisJaW50IHNnX2NvdW50OworCisJZGVidWcoIkVudGVyIGdldF9haGNpX2RldmljZV9kYXRhOiBmb3IgcG9ydCAlZFxuIiwgcG9ydCk7CisKKwlpZiAocG9ydCA+IHByb2JlX2VudC0+bl9wb3J0cykgeworCQlwcmludGYoIkludmFpbGQgcG9ydCBudW1iZXIgJWRcbiIsIHBvcnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJcG9ydF9zdGF0dXMgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX1NDUl9TVEFUKTsKKwlpZiAoKHBvcnRfc3RhdHVzICYgMHhmKSAhPSAweDAzKSB7CisJCWRlYnVnKCJObyBMaW5rIG9uIHBvcnQgJWQhXG4iLCBwb3J0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbWNweSgodW5zaWduZWQgY2hhciAqKXBwLT5jbWRfdGJsLCBmaXMsIGZpc19sZW4pOworCisJc2dfY291bnQgPSBhaGNpX2ZpbGxfc2cocG9ydCwgYnVmLCBidWZfbGVuKTsKKwlvcHRzID0gKGZpc19sZW4gPj4gMikgfCAoc2dfY291bnQgPDwgMTYpOworCWFoY2lfZmlsbF9jbWRfc2xvdChwcCwgb3B0cyk7CisKKwl3cml0ZWxfd2l0aF9mbHVzaCgxLCBwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSk7CisKKwlpZiAod2FpdGluZ19mb3JfY21kX2NvbXBsZXRlZChwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSwgMTUwLCAweDEpKSB7CisJCXByaW50ZigidGltZW91dCBleGl0IVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJZGVidWcoImdldF9haGNpX2RldmljZV9kYXRhOiAlZCBieXRlIHRyYW5zZmVycmVkLlxuIiwKKwkgICAgICBwcC0+Y21kX3Nsb3QtPnN0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY2hhciAqYXRhX2lkX3N0cmNweSh1MTYgKnRhcmdldCwgdTE2ICpzcmMsIGludCBsZW4pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGxlbiAvIDI7IGkrKykKKwkJdGFyZ2V0W2ldID0gbGUxNl90b19jcHUoc3JjW2ldKTsKKwlyZXR1cm4gKGNoYXIgKil0YXJnZXQ7Cit9CisKKworc3RhdGljIHZvaWQgZHVtcF9hdGFpZChoZF9kcml2ZWlkX3QgKmF0YWlkKQoreworCWRlYnVnKCIoNDkpYXRhaWQtPmNhcGFiaWxpdHkgPSAweCV4XG4iLCBhdGFpZC0+Y2FwYWJpbGl0eSk7CisJZGVidWcoIig1MylhdGFpZC0+ZmllbGRfdmFsaWQgPTB4JXhcbiIsIGF0YWlkLT5maWVsZF92YWxpZCk7CisJZGVidWcoIig2MylhdGFpZC0+ZG1hX213b3JkID0gMHgleFxuIiwgYXRhaWQtPmRtYV9td29yZCk7CisJZGVidWcoIig2NClhdGFpZC0+ZWlkZV9waW9fbW9kZXMgPSAweCV4XG4iLCBhdGFpZC0+ZWlkZV9waW9fbW9kZXMpOworCWRlYnVnKCIoNzUpYXRhaWQtPnF1ZXVlX2RlcHRoID0gMHgleFxuIiwgYXRhaWQtPnF1ZXVlX2RlcHRoKTsKKwlkZWJ1ZygiKDgwKWF0YWlkLT5tYWpvcl9yZXZfbnVtID0gMHgleFxuIiwgYXRhaWQtPm1ham9yX3Jldl9udW0pOworCWRlYnVnKCIoODEpYXRhaWQtPm1pbm9yX3Jldl9udW0gPSAweCV4XG4iLCBhdGFpZC0+bWlub3JfcmV2X251bSk7CisJZGVidWcoIig4MilhdGFpZC0+Y29tbWFuZF9zZXRfMSA9IDB4JXhcbiIsIGF0YWlkLT5jb21tYW5kX3NldF8xKTsKKwlkZWJ1ZygiKDgzKWF0YWlkLT5jb21tYW5kX3NldF8yID0gMHgleFxuIiwgYXRhaWQtPmNvbW1hbmRfc2V0XzIpOworCWRlYnVnKCIoODQpYXRhaWQtPmNmc3NlID0gMHgleFxuIiwgYXRhaWQtPmNmc3NlKTsKKwlkZWJ1ZygiKDg1KWF0YWlkLT5jZnNfZW5hYmxlXzEgPSAweCV4XG4iLCBhdGFpZC0+Y2ZzX2VuYWJsZV8xKTsKKwlkZWJ1ZygiKDg2KWF0YWlkLT5jZnNfZW5hYmxlXzIgPSAweCV4XG4iLCBhdGFpZC0+Y2ZzX2VuYWJsZV8yKTsKKwlkZWJ1ZygiKDg3KWF0YWlkLT5jc2ZfZGVmYXVsdCA9IDB4JXhcbiIsIGF0YWlkLT5jc2ZfZGVmYXVsdCk7CisJZGVidWcoIig4OClhdGFpZC0+ZG1hX3VsdHJhID0gMHgleFxuIiwgYXRhaWQtPmRtYV91bHRyYSk7CisJZGVidWcoIig5MylhdGFpZC0+aHdfY29uZmlnID0gMHgleFxuIiwgYXRhaWQtPmh3X2NvbmZpZyk7Cit9CisKKworLyoKKyAqIFNDU0kgSU5RVUlSWSBjb21tYW5kIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGludCBhdGFfc2NzaW9wX2lucXVpcnkoY2NiICpwY2NiKQoreworCXU4IGhkcltdID0geworCQkwLAorCQkwLAorCQkweDUsCQkvKiBjbGFpbSBTUEMtMyB2ZXJzaW9uIGNvbXBhdGliaWxpdHkgKi8KKwkJMiwKKwkJOTUgLSA0LAorCX07CisJdTggZmlzWzIwXTsKKwl1OCAqdG1waWQ7CisJdTggcG9ydDsKKworCS8qIENsZWFuIGNjYiBkYXRhIGJ1ZmZlciAqLworCW1lbXNldChwY2NiLT5wZGF0YSwgMCwgcGNjYi0+ZGF0YWxlbik7CisKKwltZW1jcHkocGNjYi0+cGRhdGEsIGhkciwgc2l6ZW9mKGhkcikpOworCisJaWYgKHBjY2ItPmRhdGFsZW4gPD0gMzUpCisJCXJldHVybiAwOworCisJbWVtc2V0KGZpcywgMCwgMjApOworCS8qIENvbnN0cnVjdCB0aGUgRklTICovCisJZmlzWzBdID0gMHgyNzsJCS8qIEhvc3QgdG8gZGV2aWNlIEZJUy4gKi8KKwlmaXNbMV0gPSAxIDw8IDc7CS8qIENvbW1hbmQgRklTLiAqLworCWZpc1syXSA9IEFUQV9DTURfSURFTlQ7CS8qIENvbW1hbmQgYnl0ZS4gKi8KKworCS8qIFJlYWQgaWQgZnJvbSBzYXRhICovCisJcG9ydCA9IHBjY2ItPnRhcmdldDsKKwlpZiAoISh0bXBpZCA9IG1hbGxvYyhzaXplb2YoaGRfZHJpdmVpZF90KSkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChnZXRfYWhjaV9kZXZpY2VfZGF0YShwb3J0LCAodTggKikgJiBmaXMsIDIwLAorCQkJCSB0bXBpZCwgc2l6ZW9mKGhkX2RyaXZlaWRfdCkpKSB7CisJCWRlYnVnKCJzY3NpX2FoY2k6IFNDU0kgaW5xdWlyeSBjb21tYW5kIGZhaWx1cmUuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGF0YWlkW3BvcnRdKQorCQlmcmVlKGF0YWlkW3BvcnRdKTsKKwlhdGFpZFtwb3J0XSA9IChoZF9kcml2ZWlkX3QgKikgdG1waWQ7CisKKwltZW1jcHkoJnBjY2ItPnBkYXRhWzhdLCAiQVRBICAgICAiLCA4KTsKKwlhdGFfaWRfc3RyY3B5KCh1MTYgKikgJnBjY2ItPnBkYXRhWzE2XSwgKHUxNiAqKWF0YWlkW3BvcnRdLT5tb2RlbCwgMTYpOworCWF0YV9pZF9zdHJjcHkoKHUxNiAqKSAmcGNjYi0+cGRhdGFbMzJdLCAodTE2ICopYXRhaWRbcG9ydF0tPmZ3X3JldiwgNCk7CisKKwlkdW1wX2F0YWlkKGF0YWlkW3BvcnRdKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogU0NTSSBSRUFEMTAgY29tbWFuZCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgYXRhX3Njc2lvcF9yZWFkMTAoY2NiICogcGNjYikKK3sKKwl1NjQgbGJhID0gMDsKKwl1MzIgbGVuID0gMDsKKwl1OCBmaXNbMjBdOworCisJbGJhID0gKCgodTY0KSBwY2NiLT5jbWRbMl0pIDw8IDI0KSB8ICgoKHU2NCkgcGNjYi0+Y21kWzNdKSA8PCAxNikKKwkgICAgfCAoKCh1NjQpIHBjY2ItPmNtZFs0XSkgPDwgOCkgfCAoKHU2NCkgcGNjYi0+Y21kWzVdKTsKKwlsZW4gPSAoKCh1MzIpIHBjY2ItPmNtZFs3XSkgPDwgOCkgfCAoKHUzMikgcGNjYi0+Y21kWzhdKTsKKworCS8qIEZvciAxMC1ieXRlIGFuZCAxNi1ieXRlIFNDU0kgUi9XIGNvbW1hbmRzLCB0cmFuc2ZlcgorCSAqIGxlbmd0aCAwIG1lYW5zIHRyYW5zZmVyIDAgYmxvY2sgb2YgZGF0YS4KKwkgKiBIb3dldmVyLCBmb3IgQVRBIFIvVyBjb21tYW5kcywgc2VjdG9yIGNvdW50IDAgbWVhbnMKKwkgKiAyNTYgb3IgNjU1MzYgc2VjdG9ycywgbm90IDAgc2VjdG9ycyBhcyBpbiBTQ1NJLgorCSAqCisJICogV0FSTklORzogb25lIG9yIHR3byBvbGRlciBBVEEgZHJpdmVzIHRyZWF0IDAgYXMgMC4uLgorCSAqLworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKwltZW1zZXQoZmlzLCAwLCAyMCk7CisKKwkvKiBDb25zdHJ1Y3QgdGhlIEZJUyAqLworCWZpc1swXSA9IDB4Mjc7CQkvKiBIb3N0IHRvIGRldmljZSBGSVMuICovCisJZmlzWzFdID0gMSA8PCA3OwkvKiBDb21tYW5kIEZJUy4gKi8KKwlmaXNbMl0gPSBBVEFfQ01EX1JEX0RNQTsJLyogQ29tbWFuZCBieXRlLiAqLworCisJLyogTEJBIGFkZHJlc3MsIG9ubHkgc3VwcG9ydCBMQkEyOCBpbiB0aGlzIGRyaXZlciAqLworCWZpc1s0XSA9IHBjY2ItPmNtZFs1XTsKKwlmaXNbNV0gPSBwY2NiLT5jbWRbNF07CisJZmlzWzZdID0gcGNjYi0+Y21kWzNdOworCWZpc1s3XSA9IChwY2NiLT5jbWRbMl0gJiAweDBmKSB8IDB4ZTA7CisKKwkvKiBTZWN0b3IgQ291bnQgKi8KKwlmaXNbMTJdID0gcGNjYi0+Y21kWzhdOworCWZpc1sxM10gPSBwY2NiLT5jbWRbN107CisKKwkvKiBSZWFkIGZyb20gYWhjaSAqLworCWlmIChnZXRfYWhjaV9kZXZpY2VfZGF0YShwY2NiLT50YXJnZXQsICh1OCAqKSAmIGZpcywgMjAsCisJCQkJIHBjY2ItPnBkYXRhLCBwY2NiLT5kYXRhbGVuKSkgeworCQlkZWJ1Zygic2NzaV9haGNpOiBTQ1NJIFJFQUQxMCBjb21tYW5kIGZhaWx1cmUuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFNDU0kgUkVBRCBDQVBBQ0lUWTEwIGNvbW1hbmQgb3BlcmF0aW9uLgorICovCitzdGF0aWMgaW50IGF0YV9zY3Npb3BfcmVhZF9jYXBhY2l0eTEwKGNjYiAqcGNjYikKK3sKKwl1OCBidWZbOF07CisKKwlpZiAoIWF0YWlkW3BjY2ItPnRhcmdldF0pIHsKKwkJcHJpbnRmKCJzY3NpX2FoY2k6IFNDU0kgUkVBRCBDQVBBQ0lUWTEwIGNvbW1hbmQgZmFpbHVyZS4gIgorCQkgICAgICAgIlx0Tm8gQVRBIGluZm8hXG4iCisJCSAgICAgICAiXHRQbGVhc2UgcnVuIFNDU0kgY29tbW1hbmQgSU5RVUlSWSBmaXJzdGx5IVxuIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJbWVtc2V0KGJ1ZiwgMCwgOCk7CisKKwkqKHUzMiAqKSBidWYgPSBsZTMyX3RvX2NwdShhdGFpZFtwY2NiLT50YXJnZXRdLT5sYmFfY2FwYWNpdHkpOworCisJYnVmWzZdID0gNTEyID4+IDg7CisJYnVmWzddID0gNTEyICYgMHhmZjsKKworCW1lbWNweShwY2NiLT5wZGF0YSwgYnVmLCA4KTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBTQ1NJIFRFU1QgVU5JVCBSRUFEWSBjb21tYW5kIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGludCBhdGFfc2NzaW9wX3Rlc3RfdW5pdF9yZWFkeShjY2IgKnBjY2IpCit7CisJcmV0dXJuIChhdGFpZFtwY2NiLT50YXJnZXRdKSA/IDAgOiAtRVBFUk07Cit9CisKKworaW50IHNjc2lfZXhlYyhjY2IgKnBjY2IpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAocGNjYi0+Y21kWzBdKSB7CisJY2FzZSBTQ1NJX1JFQUQxMDoKKwkJcmV0ID0gYXRhX3Njc2lvcF9yZWFkMTAocGNjYik7CisJCWJyZWFrOworCWNhc2UgU0NTSV9SRF9DQVBBQzoKKwkJcmV0ID0gYXRhX3Njc2lvcF9yZWFkX2NhcGFjaXR5MTAocGNjYik7CisJCWJyZWFrOworCWNhc2UgU0NTSV9UU1RfVV9SRFk6CisJCXJldCA9IGF0YV9zY3Npb3BfdGVzdF91bml0X3JlYWR5KHBjY2IpOworCQlicmVhazsKKwljYXNlIFNDU0lfSU5RVUlSWToKKwkJcmV0ID0gYXRhX3Njc2lvcF9pbnF1aXJ5KHBjY2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVuc3VwcG9ydCBTQ1NJIGNvbW1hbmQgMHglMDJ4XG4iLCBwY2NiLT5jbWRbMF0pOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKHJldCkgeworCQlkZWJ1ZygiU0NTSSBjb21tYW5kIDB4JTAyeCByZXQgZXJybm8gJWRcbiIsIHBjY2ItPmNtZFswXSwgcmV0KTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlyZXR1cm4gVFJVRTsKKworfQorCisKK3ZvaWQgc2NzaV9sb3dfbGV2ZWxfaW5pdChpbnQgYnVzZGV2ZnVuYykKK3sKKwlpbnQgaTsKKwl1MzIgbGlua21hcDsKKworCWFoY2lfaW5pdF9vbmUoYnVzZGV2ZnVuYyk7CisKKwlsaW5rbWFwID0gcHJvYmVfZW50LT5saW5rX3BvcnRfbWFwOworCisJZm9yIChpID0gMDsgaSA8IENGR19TQ1NJX01BWF9TQ1NJX0lEOyBpKyspIHsKKwkJaWYgKCgobGlua21hcCA+PiBpKSAmIDB4MDEpKSB7CisJCQlpZiAoYWhjaV9wb3J0X3N0YXJ0KCh1OCkgaSkpIHsKKwkJCQlwcmludGYoIkNhbiBub3Qgc3RhcnQgcG9ydCAlZFxuIiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlhaGNpX3NldF9mZWF0dXJlKCh1OCkgaSk7CisJCX0KKwl9Cit9CisKKwordm9pZCBzY3NpX2J1c19yZXNldCh2b2lkKQoreworCS8qTm90IGltcGxlbWVudCovCit9CisKKwordm9pZCBzY3NpX3ByaW50X2Vycm9yKGNjYiAqIHBjY2IpCit7CisJLypUaGUgYWhjaSBlcnJvciBpbmZvIGNhbiBiZSByZWFkIGluIHRoZSBhaGNpIGRyaXZlciovCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG05MDAweC5jIGIvZHJpdmVycy9kbTkwMDB4LmMKaW5kZXggMGU0NzVkNC4uNjg3NzA3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbTkwMDB4LmMKKysrIGIvZHJpdmVycy9kbTkwMDB4LmMKQEAgLTQzNiw2ICs0MzYsOSBAQAogCXU4IHJ4Ynl0ZSwgKnJkcHRyID0gKHU4ICopIE5ldFJ4UGFja2V0c1swXTsKIAl1MTYgUnhTdGF0dXMsIFJ4TGVuID0gMDsKIAl1MzIgdG1wbGVuLCBpOworI2lmZGVmIENPTkZJR19ETTkwMDBfVVNFXzMyQklUCisJdTMyIHRtcGRhdGE7CisjZW5kaWYKIAogCS8qIENoZWNrIHBhY2tldCByZWFkeSBvciBub3QgKi8KIAlETTkwMDBfaW9yKERNOTAwMF9NUkNNRFgpOwkvKiBEdW1teSByZWFkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2tleWJvYXJkLmMgYi9kcml2ZXJzL2tleWJvYXJkLmMKaW5kZXggNDFlY2NmMi4uOTk3NTIwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9rZXlib2FyZC5jCisrKyBiL2RyaXZlcnMva2V5Ym9hcmQuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lCUtCRF9CVUZGRVJfTEVOCQkweDIwICAvKiBzaXplIG9mIHRoZSBrZXlib2FyZGJ1ZmZlciAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDNXh4eCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODV4eCkKKyNpZiBkZWZpbmVkKENPTkZJR19NUEM1eHh4KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQxKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTU1KQogaW50IHBzMnNlcl9jaGVjayh2b2lkKTsKICNlbmRpZgogCkBAIC03NSw3ICs3NSw3IEBACiAvKiB0ZXN0IGlmIGEgY2hhcmFjdGVyIGlzIGluIHRoZSBxdWV1ZSAqLwogc3RhdGljIGludCBrYmRfdGVzdGModm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19NUEM1eHh4KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NXh4KQorI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NDApIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NDEpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NTUpCiAJLyogbm8gSVNSIGlzIHVzZWQsIHNvIHJlY2VpdmVkIGNoYXJzIG11c3QgYmUgcG9sbGVkICovCiAJcHMyc2VyX2NoZWNrKCk7CiAjZW5kaWYKQEAgLTkwLDcgKzkwLDcgQEAKIHsKIAljaGFyIGM7CiAJd2hpbGUoaW5fcG9pbnRlcj09b3V0X3BvaW50ZXIpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19NUEM1eHh4KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NXh4KQorI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NDApIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NDEpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NTUpCiAJLyogbm8gSVNSIGlzIHVzZWQsIHNvIHJlY2VpdmVkIGNoYXJzIG11c3QgYmUgcG9sbGVkICovCiAJcHMyc2VyX2NoZWNrKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXBjOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9tcGM4eHhfcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5YTcxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXBjOHh4X3BjbWNpYS5jCkBAIC0wLDAgKzEsMzA0IEBACisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaWYgZGVmaW5lZChDT05GSUdfOHh4KQorI2luY2x1ZGUgPG1wYzh4eC5oPgorI2VuZGlmCisjaW5jbHVkZSA8cGNtY2lhLmg+CisKKyN1bmRlZglDT05GSUdfUENNQ0lBCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCisjZGVmaW5lCUNPTkZJR19QQ01DSUEKKyNlbmRpZgorCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSURFKSAmJiBkZWZpbmVkKENPTkZJR19JREVfOHh4X1BDQ0FSRCkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR184eHgpCSYmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkKKworI2lmCWRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKQorZXh0ZXJuIGludCBjaGVja19pZGVfZGV2aWNlIChpbnQgc2xvdCk7CisjZW5kaWYKKworZXh0ZXJuIGludCBwY21jaWFfaGFyZHdhcmVfZW5hYmxlIChpbnQgc2xvdCk7CitleHRlcm4gaW50IHBjbWNpYV92b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCk7CisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCitleHRlcm4gaW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KTsKKyNlbmRpZgorCitzdGF0aWMgdV9pbnQgbTh4eF9nZXRfZ3JheWNvZGUodV9pbnQgc2l6ZSk7CisjaWYgMCAvKiBEaXNhYmxlZCAqLworc3RhdGljIHVfaW50IG04eHhfZ2V0X3NwZWVkKHVfaW50IG5zLCB1X2ludCBpc19pbyk7CisjZW5kaWYKKworLyogbG9vayB1cCB0YWJsZSBmb3IgcGdjcnggcmVnaXN0ZXJzICovCit1X2ludCAqcGNtY2lhX3BnY3J4WzJdID0geworCSYoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYS5wY21jX3BnY3JhLAorCSYoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYS5wY21jX3BnY3JiLAorfTsKKworLyoKKyAqIFNlYXJjaCB0aGlzIHRhYmxlIHRvIHNlZSBpZiB0aGUgd2luZG93c2l6ZSBpcworICogc3VwcG9ydGVkLi4uCisgKi8KKworI2RlZmluZSBNOFhYX1NJWkVTX05PIDMyCisKK3N0YXRpYyBjb25zdCB1X2ludCBtOHh4X3NpemVfdG9fZ3JheVtNOFhYX1NJWkVTX05PXSA9Cit7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDQsCisgIDB4MDAwMDAwODAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMjAsCisgIDB4MDAwMDgwMDAsIDB4MDAwMDQwMDAsIDB4MDAwMDEwMDAsIDB4MDAwMDIwMDAsCisgIDB4MDAwMDAxMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA0MDAsCisKKyAgMHgwZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKyAgMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwNDAwMDAwMCwKKyAgMHgwMDAxMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDA4MDAwMCwgMHgwMDA0MDAwMCwKKyAgMHgwMDgwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDIwMDAwMCB9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZglDT05GSUdfSE1JMTAKKyNkZWZpbmUJSE1JMTBfRlJBTV9USU1JTkcJKAlQQ01DSUFfU0hUKDIpCVwKKyAJCQkJfAlQQ01DSUFfU1NUKDIpCVwKKyAJCQkJfAlQQ01DSUFfU0woNCkpCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX0xXTU9OKSB8fCBkZWZpbmVkKENPTkZJR19OU0NVKQorI2RlZmluZQlDRkdfUENNQ0lBX1RJTUlORwkoCVBDTUNJQV9TSFQoOSkJXAorIAkJCQl8CVBDTUNJQV9TU1QoMykJXAorIAkJCQl8CVBDTUNJQV9TTCgxMikpCisjZWxzZQorI2RlZmluZQlDRkdfUENNQ0lBX1RJTUlORwkoCVBDTUNJQV9TSFQoMikJXAorIAkJCQl8CVBDTUNJQV9TU1QoNCkJXAorIAkJCQl8CVBDTUNJQV9TTCg5KSkKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbnQgcGNtY2lhX29uICh2b2lkKQoreworCXVfbG9uZyByZWcsIGJhc2U7CisJcGNtY2lhX3dpbl90ICp3aW47CisJdV9pbnQgc2xvdGJpdDsKKwl1X2ludCByYywgc2xvdDsKKwlpbnQgaTsKKworCWRlYnVnICgiRW5hYmxlIFBDTUNJQSAiIFBDTUNJQV9TTE9UX01TRyAiXG4iKTsKKworCS8qIGludGlhbGl6ZSB0aGUgZml4ZWQgbWVtb3J5IHdpbmRvd3MgKi8KKwl3aW4gPSAocGNtY2lhX3dpbl90ICopKCYoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYS5wY21jX3BicjApOworCWJhc2UgPSBDRkdfUENNQ0lBX01FTV9BRERSOworCisJaWYoKHJlZyA9IG04eHhfZ2V0X2dyYXljb2RlKENGR19QQ01DSUFfTUVNX1NJWkUpKSA9PSAtMSkgeworCQlwcmludGYgKCJDYW5ub3Qgc2V0IHdpbmRvdyBzaXplIHRvIDB4JTA4eFxuIiwKKwkJCUNGR19QQ01DSUFfTUVNX1NJWkUpOworCQlyZXR1cm4gKDEpOworCX0KKworCXNsb3RiaXQgPSBQQ01DSUFfU0xPVF94OworCWZvciAoaT0wOyBpPFBDTUNJQV9NRU1fV0lOX05POyArK2kpIHsKKwkJd2luLT5iciA9IGJhc2U7CisKKyNpZgkoUENNQ0lBX1NPQ0tFVFNfTk8gPT0gMikKKwkJaWYgKGkgPT0gNCkgLyogQW5vdGhlciBzbG90IHN0YXJ0aW5nIGZyb20gd2luIDQgKi8KKwkJCXNsb3RiaXQgPSAoc2xvdGJpdCA/IFBDTUNJQV9QU0xPVF9BIDogUENNQ0lBX1BTTE9UX0IpOworI2VuZGlmCisJCXN3aXRjaCAoaSkgeworI2lmZGVmCUNPTkZJR19JREVfOHh4X1BDQ0FSRAorCQljYXNlIDQ6CisjaWZkZWYJQ09ORklHX0hNSTEwCisJCXsJLyogbWFwIEZSQU0gYXJlYSAqLworCQkJd2luLT5vciA9ICgJUENNQ0lBX0JTSVpFXzI1NksKKwkJCQl8CVBDTUNJQV9QUFNfOAorCQkJCXwJUENNQ0lBX1BSU19BVFRSCisJCQkJfAlzbG90Yml0CisJCQkJfAlQQ01DSUFfUFYKKwkJCQl8CUhNSTEwX0ZSQU1fVElNSU5HICk7CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisJCWNhc2UgMDoJewkvKiBtYXAgYXR0cmlidXRlIG1lbW9yeSAqLworCQkJd2luLT5vciA9ICgJUENNQ0lBX0JTSVpFXzY0TQorCQkJCXwJUENNQ0lBX1BQU184CisJCQkJfAlQQ01DSUFfUFJTX0FUVFIKKwkJCQl8CXNsb3RiaXQKKwkJCQl8CVBDTUNJQV9QVgorCQkJCXwJQ0ZHX1BDTUNJQV9USU1JTkcgKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgNToKKwkJY2FzZSAxOiB7CS8qIG1hcCBJL08gd2luZG93IGZvciBkYXRhIHJlZyAqLworCQkJd2luLT5vciA9ICgJUENNQ0lBX0JTSVpFXzFLCisJCQkJfAlQQ01DSUFfUFBTXzE2CisJCQkJfAlQQ01DSUFfUFJTX0lPCisJCQkJfAlzbG90Yml0CisJCQkJfAlQQ01DSUFfUFYKKwkJCQl8CUNGR19QQ01DSUFfVElNSU5HICk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIDY6CisJCWNhc2UgMjogewkvKiBtYXAgSS9PIHdpbmRvdyBmb3IgY21kL2N0cmwgcmVnIGJsb2NrICovCisJCQl3aW4tPm9yID0gKAlQQ01DSUFfQlNJWkVfMUsKKwkJCQl8CVBDTUNJQV9QUFNfOAorCQkJCXwJUENNQ0lBX1BSU19JTworCQkJCXwJc2xvdGJpdAorCQkJCXwJUENNQ0lBX1BWCisJCQkJfAlDRkdfUENNQ0lBX1RJTUlORyApOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgkvKiBDT05GSUdfSURFXzh4eF9QQ0NBUkQgKi8KKyNpZmRlZglDT05GSUdfSE1JMTAKKwkJY2FzZSAzOiB7CS8qIG1hcCBJL08gd2luZG93IGZvciA0eFVBUlQgZGF0YS9jdHJsICovCisJCQl3aW4tPmJyICs9IDB4NDAwMDA7CisJCQl3aW4tPm9yID0gKAlQQ01DSUFfQlNJWkVfMjU2SworCQkJCXwJUENNQ0lBX1BQU184CisJCQkJfAlQQ01DSUFfUFJTX0lPCisJCQkJfAlzbG90Yml0CisJCQkJfAlQQ01DSUFfUFYKKwkJCQl8CUNGR19QQ01DSUFfVElNSU5HICk7CisJCQlicmVhazsKKwkJfQorI2VuZGlmCS8qIENPTkZJR19ITUkxMCAqLworCQlkZWZhdWx0OgkvKiBzZXQgdG8gbm90IHZhbGlkICovCisJCQl3aW4tPm9yID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJZGVidWcgKCJNZW1XaW4gJWQ6IFBCUiAweCUwOGxYICBQT1IgJTA4bFhcbiIsCisJCSAgICAgICBpLCB3aW4tPmJyLCB3aW4tPm9yKTsKKwkJYmFzZSArPSBDRkdfUENNQ0lBX01FTV9TSVpFOworCQkrK3dpbjsKKwl9CisKKwlmb3IgKGk9MCwgcmM9MCwgc2xvdD1fc2xvdF87IGk8UENNQ0lBX1NPQ0tFVFNfTk87IGkrKywgc2xvdCA9ICFzbG90KSB7CisJCS8qIHR1cm4gb2ZmIHZvbHRhZ2UgKi8KKwkJaWYgKChyYyA9IHBjbWNpYV92b2x0YWdlX3NldChzbG90LCAwLCAwKSkpCisJCQljb250aW51ZTsKKworCQkvKiBFbmFibGUgZXh0ZXJuYWwgaGFyZHdhcmUgKi8KKwkJaWYgKChyYyA9IHBjbWNpYV9oYXJkd2FyZV9lbmFibGUoc2xvdCkpKQorCQkJY29udGludWU7CisKKyNpZmRlZglDT05GSUdfSURFXzh4eF9QQ0NBUkQKKwkJaWYgKChyYyA9IGNoZWNrX2lkZV9kZXZpY2UoaSkpKQorCQkJY29udGludWU7CisjZW5kaWYKKwl9CisJcmV0dXJuIHJjOworfQorCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9vZmYgKHZvaWQpCit7CisJaW50IGk7CisJcGNtY2lhX3dpbl90ICp3aW47CisKKwlwcmludGYgKCJEaXNhYmxlIFBDTUNJQSAiIFBDTUNJQV9TTE9UX01TRyAiXG4iKTsKKworCS8qIGNsZWFyIGludGVycnVwdCBzdGF0ZSwgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLworCSgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhLnBjbWNfcHNjciA9ICBQQ01DSUFfTUFTSyhfc2xvdF8pOworCSgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhLnBjbWNfcGVyICY9IH5QQ01DSUFfTUFTSyhfc2xvdF8pOworCisJLyogdHVybiBvZmYgaW50ZXJydXB0IGFuZCBkaXNhYmxlIEN4T0UgKi8KKwlQQ01DSUFfUEdDUlgoX3Nsb3RfKSA9IF9fTVlfUENNQ0lBX0dDUlhfQ1hPRTsKKworCS8qIHR1cm4gb2ZmIG1lbW9yeSB3aW5kb3dzICovCisJd2luID0gKHBjbWNpYV93aW5fdCAqKSgmKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEucGNtY19wYnIwKTsKKworCWZvciAoaT0wOyBpPFBDTUNJQV9NRU1fV0lOX05POyArK2kpIHsKKwkJLyogZGlzYWJsZSBtZW1vcnkgd2luZG93ICovCisJCXdpbi0+b3IgPSAwOworCQkrK3dpbjsKKwl9CisKKwkvKiB0dXJuIG9mZiB2b2x0YWdlICovCisJcGNtY2lhX3ZvbHRhZ2Vfc2V0KF9zbG90XywgMCwgMCk7CisKKwkvKiBkaXNhYmxlIGV4dGVybmFsIGhhcmR3YXJlICovCisJcHJpbnRmICgiU2h1dGRvd24gYW5kIFBvd2Vyb2ZmICIgUENNQ0lBX1NMT1RfTVNHICJcbiIpOworCXBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKF9zbG90Xyk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KKworCitzdGF0aWMgdV9pbnQgbTh4eF9nZXRfZ3JheWNvZGUodV9pbnQgc2l6ZSkKK3sKKwl1X2ludCBrOworCisJZm9yIChrID0gMDsgayA8IE04WFhfU0laRVNfTk87IGsrKykgeworCQlpZihtOHh4X3NpemVfdG9fZ3JheVtrXSA9PSBzaXplKQorCQkJYnJlYWs7CisJfQorCisJaWYoKGsgPT0gTThYWF9TSVpFU19OTykgfHwgKG04eHhfc2l6ZV90b19ncmF5W2tdID09IC0xKSkKKwkJayA9IC0xOworCisJcmV0dXJuIGs7Cit9CisKKyNpZgkwCisKKyNpZglkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKSB8fCBkZWZpbmVkKENPTkZJR19SUFhMSVRFKQorCisvKiBUaGUgUlBYIGJvYXJkcyBzZWVtcyB0byBoYXZlIGl0J3MgYnVzIG1vbml0b3IgdGltZW91dCBzZXQgdG8gNio4IGNsb2Nrcy4KKyAqIFNZUENSIGlzIHdyaXRlIG9uY2Ugb25seSwgdGhlcmVmb3JlIG11c3QgdGhlIHNsb3dlc3QgbWVtb3J5IGJlIGZhc3RlcgorICogdGhhbiB0aGUgYnVzIG1vbml0b3Igb3Igd2Ugd2lsbCBnZXQgYSBtYWNoaW5lIGNoZWNrIGR1ZSB0byB0aGUgYnVzIHRpbWVvdXQuCisgKi8KKyN1bmRlZglQQ01DSUFfQk1UX0xJTUlUCisjZGVmaW5lCVBDTUNJQV9CTVRfTElNSVQgKDYqOCkKKyNlbmRpZgorCitzdGF0aWMgdV9pbnQgbTh4eF9nZXRfc3BlZWQodV9pbnQgbnMsIHVfaW50IGlzX2lvKQoreworCXVfaW50IHJlZywgY2xvY2tzLCBwc3N0LCBwc2wsIHBzaHQ7CisKKwlpZighbnMpIHsKKworCQkvKgorCQkqIFdlIGdldCBjYWxsZWQgd2l0aCBJTyBtYXBzIHNldHVwIHRvIDBucworCQkqIGlmIG5vdCBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisJCSogVGhleSBzaG91bGQgYmUgMjU1bnMuCisJCSovCisKKwkJaWYoaXNfaW8pCisJCQlucyA9IDI1NTsKKwkJZWxzZQorCQkJbnMgPSAxMDA7ICAvKiBmYXN0IG1lbW9yeSBpZiAwICovCisJfQorCisJLyoKKwkqIEluIFBTU1QsIFBTTCwgUFNIVCBmaWVsZHMgd2UgdGVsbCB0aGUgY29udHJvbGxlcgorCSogdGltaW5nIHBhcmFtZXRlcnMgaW4gQ0xLT1VUIGNsb2NrIGN5Y2xlcy4KKwkqIENMS09VVCBpcyB0aGUgc2FtZSBhcyBHQ0xLMl81MC4KKwkqLworCisJLyogaG93IHdlIHdhbnQgdG8gYWRqdXN0IHRoZSB0aW1pbmcgLSBpbiBwZXJjZW50ICovCisKKyNkZWZpbmUgQURKIDE4MCAvKiA4MCAlIGxvbmdlciBhY2Nlc3N0aW1lIC0gdG8gYmUgc3VyZSAqLworCisJY2xvY2tzID0gKChNOFhYX0JVU0ZSRVEgLyAxMDAwKSAqIG5zKSAvIDEwMDA7CisJY2xvY2tzID0gKGNsb2NrcyAqIEFESikgLyAoMTAwKjEwMDApOworCisJaWYoY2xvY2tzID49IFBDTUNJQV9CTVRfTElNSVQpIHsKKwkJREVCVUcoMCwgIk1heCBhY2Nlc3MgdGltZSBsaW1pdCByZWFjaGVkXG4iKTsKKwkJY2xvY2tzID0gUENNQ0lBX0JNVF9MSU1JVC0xOworCX0KKworCXBzc3QgPSBjbG9ja3MgLyA3OyAgICAgICAgICAvKiBzZXR1cCB0aW1lICovCisJcHNodCA9IGNsb2NrcyAvIDc7ICAgICAgICAgIC8qIGhvbGQgdGltZSAqLworCXBzbCAgPSAoY2xvY2tzICogNSkgLyA3OyAgICAvKiBzdHJvYmUgbGVuZ3RoICovCisKKwlwc3N0ICs9IGNsb2NrcyAtIChwc3N0ICsgcHNodCArIHBzbCk7CisKKwlyZWcgPSAgcHNzdCA8PCAxMjsKKwlyZWcgfD0gcHNsICA8PCA3OworCXJlZyB8PSBwc2h0IDw8IDE2OworCisJcmV0dXJuIHJlZzsKK30KKyNlbmRpZgkvKiAwICovCisKKyNlbmRpZgkvKiBDT05GSUdfOHh4ICYmIENPTkZJR19QQ01DSUEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmFuZC9NYWtlZmlsZQppbmRleCA5NmY2N2RmLi5kNzA3NjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25hbmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uYW5kL01ha2VmaWxlCkBAIC0xLDE2ICsxLDQ1IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIgOj0gbGlibmFuZC5hCitMSUIgCTo9ICQob2JqKWxpYm5hbmQuYQogCi1PQkpTIDo9IG5hbmQubyBuYW5kX2Jhc2UubyBuYW5kX2lkcy5vIG5hbmRfZWNjLm8gbmFuZF9iYnQubworQ09CSlMgCTo9IG5hbmQubyBuYW5kX2Jhc2UubyBuYW5kX2lkcy5vIG5hbmRfZWNjLm8gbmFuZF9iYnQubworCitTUkNTIAk6PSAkKENPQkpTOi5vPS5jKQorT0JKUyAJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorCiBhbGw6CSQoTElCKQogCi0kKExJQik6CSQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uYW5kX2xlZ2FjeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmFuZF9sZWdhY3kvTWFrZWZpbGUKaW5kZXggN2UyY2Y2Ni4uMjNkZjViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uYW5kX2xlZ2FjeS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25hbmRfbGVnYWN5L01ha2VmaWxlCkBAIC0xLDE2ICsxLDQ1IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIgOj0gbGlibmFuZF9sZWdhY3kuYQorTElCIAk6PSAkKG9iailsaWJuYW5kX2xlZ2FjeS5hCiAKLU9CSlMgOj0gbmFuZF9sZWdhY3kubworQ09CSlMgCTo9IG5hbmRfbGVnYWN5Lm8KKworU1JDUyAJOj0gJChDT0JKUzoubz0uYykKK09CSlMgCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKKwogYWxsOgkkKExJQikKIAotJChMSUIpOgkkKE9CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnM5NzUwX3NlcmlhbC5jIGIvZHJpdmVycy9uczk3NTBfc2VyaWFsLmMKaW5kZXggOGRmZjM2Ny4uMDJjMGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uczk3NTBfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9uczk3NTBfc2VyaWFsLmMKQEAgLTM1LDYgKzM1LDEwIEBACiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCisjaWYgIWRlZmluZWQoQ09ORklHX0NPTlNfSU5ERVgpCisjZXJyb3IgIk5vIGNvbnNvbGUgaW5kZXggc3BlY2lmaWVkLiIKKyNlbmRpZgorCiAjZGVmaW5lIENPTlNPTEUgQ09ORklHX0NPTlNfSU5ERVgKIAogc3RhdGljIHVuc2lnbmVkIGludCBjYWxjQml0cmF0ZVJlZ2lzdGVyKCB2b2lkICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaV9hdXRvLmMgYi9kcml2ZXJzL3BjaV9hdXRvLmMKaW5kZXggOGZkZTMzMC4uOTY5MTY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2lfYXV0by5jCisrKyBiL2RyaXZlcnMvcGNpX2F1dG8uYwpAQCAtMTAyLDcgKzEwMiw4IEBACiAKIAkJLyogQ2hlY2sgdGhlIEJBUiB0eXBlIGFuZCBzZXQgb3VyIGFkZHJlc3MgbWFzayAqLwogCQlpZiAoYmFyX3Jlc3BvbnNlICYgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgewotCQkJYmFyX3NpemUgPSB+KGJhcl9yZXNwb25zZSAmIFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSykgKyAxOworCQkJYmFyX3NpemUgPSAoKH4oYmFyX3Jlc3BvbnNlICYgUENJX0JBU0VfQUREUkVTU19JT19NQVNLKSkKKwkJCQkgICAmIDB4ZmZmZikgKyAxOwogCQkJYmFyX3JlcyA9IGlvOwogCiAJCQlERUJVR0YoIlBDSSBBdXRvY29uZmlnOiBCQVIgJWQsIEkvTywgc2l6ZT0weCV4LCAiLCBiYXJfbnIsIGJhcl9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpX2luZGlyZWN0LmMgYi9kcml2ZXJzL3BjaV9pbmRpcmVjdC5jCmluZGV4IGYwYzRhMWMuLmQ3YmUwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpX2luZGlyZWN0LmMKKysrIGIvZHJpdmVycy9wY2lfaW5kaXJlY3QuYwpAQCAtNjAsNyArNjAsNyBAQAogCWNmZ18jI3J3KHZhbCwgaG9zZS0+Y2ZnX2RhdGEgKyAob2Zmc2V0ICYgbWFzayksIHR5cGUsIG9wKTsgICAgICAgXAogCXJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQotI2VsaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKICNkZWZpbmUgSU5ESVJFQ1RfUENJX09QKHJ3LCBzaXplLCB0eXBlLCBvcCwgbWFzaykJCQkgXAogc3RhdGljIGludAkJCQkJCQkJIFwKIGluZGlyZWN0XyMjcncjI19jb25maWdfIyNzaXplKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgCQkgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczJzZXIuYyBiL2RyaXZlcnMvcHMyc2VyLmMKaW5kZXggOGFlYThmZC4uNGUzMDRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczJzZXIuYworKysgYi9kcml2ZXJzL3BzMnNlci5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPHBzMm11bHQuaD4KLSNpZmRlZiBDRkdfTlMxNjU1MAorI2lmIGRlZmluZWQoQ0ZHX05TMTY1NTApIHx8IGRlZmluZWQoQ09ORklHX01QQzg1eHgpCiAjaW5jbHVkZSA8bnMxNjU1MC5oPgogI2VuZGlmCiAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNlcnJvciBDT05GSUdfUFMyU0VSSUFMIG11c3QgYmUgaW4gMSAuLi4gNgogI2VuZGlmCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1eHgpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NTQwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQxKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTU1KQogCiAjaWYgQ09ORklHX1BTMlNFUklBTCA9PSAxCiAjZGVmaW5lIENPTV9CQVNFIChDRkdfQ0NTUkJBUisweDQ1MDApCkBAIC01OSwxMyArNTksMTMgQEAKICNlcnJvciBDT05GSUdfUFMyU0VSSUFMIG11c3QgYmUgaW4gMSAuLi4gMgogI2VuZGlmCiAKLSNlbmRpZiAvKiBDT05GSUdfTVBDNXh4eCAvIENPTkZJR19NUEM4NXh4ICovCisjZW5kaWYgLyogQ09ORklHX01QQzV4eHggLyBDT05GSUdfTVBDODU0MCAvIG90aGVyICovCiAKIHN0YXRpYyBpbnQJcHMyc2VyX2dldGNfaHcodm9pZCk7CiBzdGF0aWMgdm9pZAlwczJzZXJfaW50ZXJydXB0KHZvaWQgKmRldl9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QJc2VyaWFsX3N0YXRlIHJzX3RhYmxlW107IC8qIGluIHNlcmlhbC5jICovCi0jaWYgIWRlZmluZWQoQ09ORklHX01QQzV4eHgpICYmICFkZWZpbmVkKENPTkZJR19NUEM4NXh4KQorI2lmICFkZWZpbmVkKENPTkZJR19NUEM1eHh4KSAmJiAhZGVmaW5lZChDT05GSUdfTVBDODU0MCkgJiYgIWRlZmluZWQoQ09ORklHX01QQzg1NDEpICYmICFkZWZpbmVkKENPTkZJR19NUEM4NTU1KQogc3RhdGljIHN0cnVjdAlzZXJpYWxfc3RhdGUgKnN0YXRlOwogI2VuZGlmCiAKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1eHgpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NTQwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQxKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTU1KQogaW50IHBzMnNlcl9pbml0KHZvaWQpCiB7CiAJTlMxNjU1MF90IGNvbV9wb3J0ID0gKE5TMTY1NTBfdClDT01fQkFTRTsKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKLSNlbHNlIC8qICFDT05GSUdfTVBDNXh4eCAmJiAhQ09ORklHX01QQzg1eHggKi8KKyNlbHNlIC8qICFDT05GSUdfTVBDNXh4eCAmJiAhQ09ORklHX01QQzg1NDAgLyBvdGhlciAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwczJzZXJfaW4oaW50IG9mZnNldCkKIHsKQEAgLTE4MCwxMyArMTgwLDEzIEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfTVBDNXh4eCAvIENPTkZJR19NUEM4NXh4IC8gb3RoZXIgKi8KKyNlbmRpZiAvKiBDT05GSUdfTVBDNXh4eCAvIENPTkZJR19NUEM4NTQwIC8gb3RoZXIgKi8KIAogdm9pZCBwczJzZXJfcHV0YyhpbnQgY2hyKQogewogI2lmZGVmIENPTkZJR19NUEM1eHh4CiAJdm9sYXRpbGUgc3RydWN0IG1wYzV4eHhfcHNjICpwc2MgPSAoc3RydWN0IG1wYzV4eHhfcHNjICopUFNDX0JBU0U7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NXh4KQorI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODU0MCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU0MSkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU1NSkKIAlOUzE2NTUwX3QgY29tX3BvcnQgPSAoTlMxNjU1MF90KUNPTV9CQVNFOwogI2VuZGlmCiAjaWZkZWYgREVCVUcKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXdoaWxlICghKHBzYy0+cHNjX3N0YXR1cyAmIFBTQ19TUl9UWFJEWSkpOwogCiAJcHNjLT5wc2NfYnVmZmVyXzggPSBjaHI7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NXh4KQorI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODU0MCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU0MSkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU1NSkKIAl3aGlsZSAoKGNvbV9wb3J0LT5sc3IgJiBMU1JfVEhSRSkgPT0gMCk7CiAJY29tX3BvcnQtPnRociA9IGNocjsKICNlbHNlCkBAIC0yMTEsNyArMjExLDcgQEAKIHsKICNpZmRlZiBDT05GSUdfTVBDNXh4eAogCXZvbGF0aWxlIHN0cnVjdCBtcGM1eHh4X3BzYyAqcHNjID0gKHN0cnVjdCBtcGM1eHh4X3BzYyAqKVBTQ19CQVNFOwotI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODV4eCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1NDApIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NDEpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NTUpCiAJTlMxNjU1MF90IGNvbV9wb3J0ID0gKE5TMTY1NTBfdClDT01fQkFTRTsKICNlbmRpZgogCWludCByZXMgPSAtMTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWlmIChwc2MtPnBzY19zdGF0dXMgJiBQU0NfU1JfUlhSRFkpIHsKIAkJcmVzID0gKHBzYy0+cHNjX2J1ZmZlcl84KTsKIAl9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NXh4KQorI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODU0MCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU0MSkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU1NSkKIAlpZiAoY29tX3BvcnQtPmxzciAmIExTUl9EUikgewogCQlyZXMgPSBjb21fcG9ydC0+cmJyOwogCX0KQEAgLTI3OSw3ICsyNzksNyBAQAogewogI2lmZGVmIENPTkZJR19NUEM1eHh4CiAJdm9sYXRpbGUgc3RydWN0IG1wYzV4eHhfcHNjICpwc2MgPSAoc3RydWN0IG1wYzV4eHhfcHNjICopUFNDX0JBU0U7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NXh4KQorI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODU0MCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU0MSkgfHwgZGVmaW5lZChDT05GSUdfTVBDODU1NSkKIAlOUzE2NTUwX3QgY29tX3BvcnQgPSAoTlMxNjU1MF90KUNPTV9CQVNFOwogI2VuZGlmCiAJaW50IGNocjsKQEAgLTI4OSw3ICsyODksNyBAQAogCQljaHIgPSBwczJzZXJfZ2V0Y19odygpOwogI2lmZGVmIENPTkZJR19NUEM1eHh4CiAJCXN0YXR1cyA9IHBzYy0+cHNjX3N0YXR1czsKLSNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1eHgpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NUEM4NTQwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTQxKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NTU1KQogCQlzdGF0dXMgPSBjb21fcG9ydC0+bHNyOwogI2Vsc2UKIAkJc3RhdHVzID0gcHMyc2VyX2luKFVBUlRfSUlSKTsKQEAgLTMwNSw3ICszMDUsNyBAQAogCQl9CiAjaWZkZWYgQ09ORklHX01QQzV4eHgKIAl9IHdoaWxlIChzdGF0dXMgJiBQU0NfU1JfUlhSRFkpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODV4eCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg1NDApIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NDEpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1NTUpCiAJfSB3aGlsZSAoc3RhdHVzICYgTFNSX0RSKTsKICNlbHNlCiAJfSB3aGlsZSAoc3RhdHVzICYgVUFSVF9JSVJfUkRJKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHhhX3BjbWNpYS5jIGIvZHJpdmVycy9weGFfcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkMzhiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcHhhX3BjbWNpYS5jCkBAIC0wLDAgKzEsOTUgQEAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmZGVmIENPTkZJR19QWEFfUENNQ0lBCisKKyNpbmNsdWRlIDxwY21jaWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgbXNXYWl0KHVuc2lnbmVkIG1zVmFsKQoreworCXVkZWxheShtc1ZhbCoxMDAwKTsKK30KKworaW50IHBjbWNpYV9vbiAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnX2FycltdID0geworCQkweDQ4MDAwMDI4LCBDRkdfTUNNRU0wX1ZBTCwKKwkJMHg0ODAwMDAyYywgQ0ZHX01DTUVNMV9WQUwsCisJCTB4NDgwMDAwMzAsIENGR19NQ0FUVDBfVkFMLAorCQkweDQ4MDAwMDM0LCBDRkdfTUNBVFQxX1ZBTCwKKwkJMHg0ODAwMDAzOCwgQ0ZHX01DSU8wX1ZBTCwKKwkJMHg0ODAwMDAzYywgQ0ZHX01DSU8xX1ZBTCwKKworCQkwLCAwCisJfTsKKwlpbnQgaSwgcmM7CisKKyNpZmRlZiBDT05GSUdfRVhBRFJPTjEKKwlpbnQgY2FyZERldGVjdDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnZfcEJDUlJlZyA9CisJCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIDB4MDgwMDAwMDA7CisjZW5kaWYKKworCWRlYnVnICgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpID0gMDsKKwl3aGlsZSAocmVnX2FycltpXSkKKwkJKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIHJlZ19hcnJbaSsrXSkgfD0gcmVnX2FycltpKytdOworCXVkZWxheSAoMTAwMCk7CisKKwlkZWJ1ZyAoIiVzOiBwcm9ncmFtbWVkIG1lbSBjb250cm9sbGVyIFxuIiwgX19GVU5DVElPTl9fKTsKKworI2lmZGVmIENPTkZJR19FWEFEUk9OMQorCisvKmRlZmluZSB1c2VmdWwgQkNSIG1hc2tzICovCisjZGVmaW5lIEJDUl9DRl9JTklUX1ZBTCAgCQkgICAgMHgwMDAwNzIzMAorI2RlZmluZSBCQ1JfQ0ZfUFdST05fQlVTT0ZGX1JFU0VUT0ZGX1ZBTCAgICAweDAwMDA3MjMxCisjZGVmaW5lIEJDUl9DRl9QV1JPTl9CVVNPRkZfUkVTRVRPTl9WQUwgICAgIDB4MDAwMDcyMzMKKyNkZWZpbmUgQkNSX0NGX1BXUk9OX0JVU09OX1JFU0VUT05fVkFMICAgICAgMHgwMDAwNzIxMworI2RlZmluZSBCQ1JfQ0ZfUFdST05fQlVTT05fUkVTRVRPRkZfVkFMICAgICAweDAwMDA3MjExCisKKwkvKiB3ZSBzZWUgZnJvbSB0aGUgR1BJTyBiaXQgaWYgdGhlIGNhcmQgaXMgcHJlc2VudCAqLworCWNhcmREZXRlY3QgPSAhKEdQTFIwICYgR1BJT19iaXQgKDE0KSk7CisKKwlpZiAoY2FyZERldGVjdCkgeworCQlwcmludGYgKCJObyBQQ01DSUEgY2FyZCBmb3VuZCFcbiIpOworCX0KKworCS8qIHJlc2V0IHRoZSBjYXJkIHZpYSB0aGUgQkNSIGxpbmUgKi8KKwkqdl9wQkNSUmVnID0gKHVuc2lnbmVkKSBCQ1JfQ0ZfSU5JVF9WQUw7CisJbXNXYWl0ICg1MDApOworCisJKnZfcEJDUlJlZyA9ICh1bnNpZ25lZCkgQkNSX0NGX1BXUk9OX0JVU09GRl9SRVNFVE9GRl9WQUw7CisJbXNXYWl0ICg1MDApOworCisJKnZfcEJDUlJlZyA9ICh1bnNpZ25lZCkgQkNSX0NGX1BXUk9OX0JVU09GRl9SRVNFVE9OX1ZBTDsKKwltc1dhaXQgKDUwMCk7CisKKwkqdl9wQkNSUmVnID0gKHVuc2lnbmVkKSBCQ1JfQ0ZfUFdST05fQlVTT05fUkVTRVRPTl9WQUw7CisJbXNXYWl0ICg1MDApOworCisJKnZfcEJDUlJlZyA9ICh1bnNpZ25lZCkgQkNSX0NGX1BXUk9OX0JVU09OX1JFU0VUT0ZGX1ZBTDsKKwltc1dhaXQgKDE1MDApOworCisJLyogZW5hYmxlIGFkZHJlc3MgYnVzICovCisJR1BDUjEgPSAweDAxOworCS8qIGFuZCB0aGUgZmlyc3QgQ0Ygc2xvdCAqLworCU1FQ1IgPSAweDAwMDAwMDAyOworCisjZW5kaWYgLyogRVhBRFJPTiAxICovCisKKwlyYyA9IGNoZWNrX2lkZV9kZXZpY2UgKDApOwkvKiB1c2UganVzdCBzbG90IDAgKi8KKworCXJldHVybiByYzsKK30KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKK2ludCBwY21jaWFfb2ZmICh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfUFhBX1BDTUNJQSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ycHhfcGNtY2lhLmMgYi9kcml2ZXJzL3JweF9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTBhOWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ycHhfcGNtY2lhLmMKQEAgLTAsMCArMSw3MyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFJQWCBCb2FyZHMgZnJvbSBFbWJlZGRlZCBQbGFuZXQJCQkJCSovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2lmZGVmIENPTkZJR184eHgKKyNpbmNsdWRlIDxtcGM4eHguaD4KKyNlbmRpZgorI2luY2x1ZGUgPHBjbWNpYS5oPgorCisjdW5kZWYJQ09ORklHX1BDTUNJQQorCisjaWYJQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1BDTUNJQSkJXAorCSYmIChkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKSB8fCBkZWZpbmVkKENPTkZJR19SUFhMSVRFKSkKKworI2RlZmluZQlQQ01DSUFfQk9BUkRfTVNHCSJSUFggQ0xBU1NJQyBvciBSUFggTElURSIKKworaW50IHBjbWNpYV92b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKK3sKKwl1X2xvbmcgcmVnID0gMDsKKworCXN3aXRjaCh2Y2MpIHsKKwkJY2FzZSAwOiBicmVhazsKKwkJY2FzZSAzMzogcmVnIHw9IEJDU1IxX1BDVkNUTDQ7IGJyZWFrOworCQljYXNlIDUwOiByZWcgfD0gQkNTUjFfUENWQ1RMNTsgYnJlYWs7CisJCWRlZmF1bHQ6IHJldHVybiAxOworCX0KKworCXN3aXRjaCh2cHApIHsKKwkJY2FzZSAwOiBicmVhazsKKwkJY2FzZSAzMzoKKwkJY2FzZSA1MDoKKwkJCWlmKHZjYyA9PSB2cHApCisJCQkJcmVnIHw9IEJDU1IxX1BDVkNUTDY7CisJCQllbHNlCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKKwkJY2FzZSAxMjA6CisJCQlyZWcgfD0gQkNTUjFfUENWQ1RMNzsKKwkJCWRlZmF1bHQ6IHJldHVybiAxOworCX0KKworCS8qIGZpcnN0LCB0dXJuIG9mZiBhbGwgcG93ZXIgKi8KKwkqKCh1aW50ICopUlBYX0NTUl9BRERSKSAmPSB+KEJDU1IxX1BDVkNUTDQgfCBCQ1NSMV9QQ1ZDVEw1CisJCQl8IEJDU1IxX1BDVkNUTDYgfCBCQ1NSMV9QQ1ZDVEw3KTsKKworCS8qIGVuYWJsZSBuZXcgcG93ZXJzZXR0aW5ncyAqLworCSooKHVpbnQgKilSUFhfQ1NSX0FERFIpIHw9IHJlZzsKKworCXJldHVybiAwOworfQorCitpbnQgcGNtY2lhX2hhcmR3YXJlX2VuYWJsZSAoaW50IHNsb3QpCit7CisJcmV0dXJuIDA7CS8qIE5vIGhhcmR3YXJlIHRvIGVuYWJsZSAqLworfQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQorc3RhdGljIGludCBwY21jaWFfaGFyZHdhcmVfZGlzYWJsZShpbnQgc2xvdCkKK3sKKwlyZXR1cm4gMDsJLyogTm8gaGFyZHdhcmUgdG8gZGlzYWJsZSAqLworfQorI2VuZGlmCS8qIENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBICovCisKKworI2VuZGlmCS8qIENPTkZJR19QQ01DSUEgJiYgKENPTkZJR19SUFhDTEFTU0lDIHx8IENPTkZJR19SUFhMSVRFKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGw4MTM5LmMgYi9kcml2ZXJzL3J0bDgxMzkuYwppbmRleCBhOTVmODRlLi5hZmUxYTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0bDgxMzkuYworKysgYi9kcml2ZXJzL3J0bDgxMzkuYwpAQCAtMTk2LDYgKzE5Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdXBwb3J0ZWRbXSA9IHsKICAgICAgICB7UENJX1ZFTkRPUl9JRF9SRUFMVEVLLCBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOX0sCisgICAgICAge1BDSV9WRU5ET1JfSURfRExJTkssIFBDSV9ERVZJQ0VfSURfRExJTktfODEzOX0sCiAgICAgICAge30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczNjNDUxMGJfZXRoLmMgYi9kcml2ZXJzL3MzYzQ1MTBiX2V0aC5jCmluZGV4IDAyNzRkZDIuLjQ4OTAxYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczNjNDUxMGJfZXRoLmMKKysrIGIvZHJpdmVycy9zM2M0NTEwYl9ldGguYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJfQogCiAJLyogY29weSB1c2VyIGRhdGEgaW50byBmcmFtZSBkYXRhIHBvaW50ZXIgKi8KLQltZW1jcHkoKHZvaWQgKilldGgtPm1fY3VyVFhfRkQtPm1fZnJhbWVEYXRhUHRyLmJmLmRhdGFQdHIsCisJbWVtY3B5KCh2b2lkICopKGV0aC0+bV9jdXJUWF9GRC0+bV9mcmFtZURhdGFQdHIuYmYuZGF0YVB0ciksCiAJICAgICAgICh2b2lkICopcGFja2V0LAogCSAgICAgICBsZW5ndGgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwuYwppbmRleCAyMjg3ODFiLi44ZDFhZTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLmMKQEAgLTMwLDEwICszMCwyMCBAQAogI2luY2x1ZGUgPG5zODczMDguaD4KICNlbmRpZgogCisjaWYgZGVmaW5lZCAoQ09ORklHX1NFUklBTF9NVUxUSSkKKyNpbmNsdWRlIDxzZXJpYWwuaD4KKyNlbmRpZgorCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAogI2lmICFkZWZpbmVkKENPTkZJR19DT05TX0lOREVYKQorI2lmIGRlZmluZWQgKENPTkZJR19TRVJJQUxfTVVMVEkpCisvKiAgIHdpdGggQ09ORklHX1NFUklBTF9NVUxUSSB3ZSBtaWdodCBoYXZlIG5vIGNvbnNvbGUKKyAqICBvbiB0aGVzZSBkZXZpY2VzIAorICovCisjZWxzZQogI2Vycm9yCSJObyBjb25zb2xlIGluZGV4IHNwZWNpZmllZC4iCisjZW5kaWYgLyogQ09ORklHX1NFUklBTF9NVUxUSSAqLwogI2VsaWYgKENPTkZJR19DT05TX0lOREVYIDwgMSkgfHwgKENPTkZJR19DT05TX0lOREVYID4gNCkKICNlcnJvcgkiSW52YWxpZCBjb25zb2xlIGluZGV4IHZhbHVlLiIKICNlbmRpZgpAQCAtNzUsNyArODUsNDIgQEAKIH07CiAKICNkZWZpbmUgUE9SVAlzZXJpYWxfcG9ydHNbcG9ydC0xXQorI2lmIGRlZmluZWQoQ09ORklHX0NPTlNfSU5ERVgpCiAjZGVmaW5lIENPTlNPTEUJKHNlcmlhbF9wb3J0c1tDT05GSUdfQ09OU19JTkRFWC0xXSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01VTFRJKQorCisvKiBNdWx0aSBzZXJpYWwgZGV2aWNlIGZ1bmN0aW9ucyAqLworI2RlZmluZSBERUNMQVJFX0VTRVJJQUxfRlVOQ1RJT05TKHBvcnQpIFwKKyAgICBpbnQgIGVzZXJpYWwjI3BvcnQjI19pbml0ICh2b2lkKSB7XAorCWludCBjbG9ja19kaXZpc29yOyBcCisJY2xvY2tfZGl2aXNvciA9IGNhbGNfZGl2aXNvcihzZXJpYWxfcG9ydHNbcG9ydC0xXSk7IFwKKwlOUzE2NTUwX2luaXQoc2VyaWFsX3BvcnRzW3BvcnQtMV0sIGNsb2NrX2Rpdmlzb3IpOyBcCisJcmV0dXJuKDApO31cCisgICAgdm9pZCBlc2VyaWFsIyNwb3J0IyNfc2V0YnJnICh2b2lkKSB7XAorCXNlcmlhbF9zZXRicmdfZGV2KHBvcnQpO31cCisgICAgaW50ICBlc2VyaWFsIyNwb3J0IyNfZ2V0YyAodm9pZCkge1wKKwlyZXR1cm4gc2VyaWFsX2dldGNfZGV2KHBvcnQpO31cCisgICAgaW50ICBlc2VyaWFsIyNwb3J0IyNfdHN0YyAodm9pZCkge1wKKwlyZXR1cm4gc2VyaWFsX3RzdGNfZGV2KHBvcnQpO31cCisgICAgdm9pZCBlc2VyaWFsIyNwb3J0IyNfcHV0YyAoY29uc3QgY2hhciBjKSB7XAorCXNlcmlhbF9wdXRjX2Rldihwb3J0LCBjKTt9XAorICAgIHZvaWQgZXNlcmlhbCMjcG9ydCMjX3B1dHMgKGNvbnN0IGNoYXIgKnMpIHtcCisJc2VyaWFsX3B1dHNfZGV2KHBvcnQsIHMpO30KKworLyogU2VyaWFsIGRldmljZSBkZXNjcmlwdG9yICovCisjZGVmaW5lIElOSVRfRVNFUklBTF9TVFJVQ1RVUkUocG9ydCxuYW1lLGJ1cykge1wKKwluYW1lLFwKKwlidXMsXAorCWVzZXJpYWwjI3BvcnQjI19pbml0LFwKKwllc2VyaWFsIyNwb3J0IyNfc2V0YnJnLFwKKwllc2VyaWFsIyNwb3J0IyNfZ2V0YyxcCisJZXNlcmlhbCMjcG9ydCMjX3RzdGMsXAorCWVzZXJpYWwjI3BvcnQjI19wdXRjLFwKKwllc2VyaWFsIyNwb3J0IyNfcHV0cywgfQorCisjZW5kaWYgLyogQ09ORklHX1NFUklBTF9NVUxUSSAqLwogCiBzdGF0aWMgaW50IGNhbGNfZGl2aXNvciAoTlMxNjU1MF90IHBvcnQpCiB7CkBAIC0xMDMsNiArMTQ4LDcgQEAKIAogfQogCisjaWYgIWRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKIGludCBzZXJpYWxfaW5pdCAodm9pZCkKIHsKIAlpbnQgY2xvY2tfZGl2aXNvcjsKQEAgLTEzMCw2ICsxNzYsNyBAQAogCiAJcmV0dXJuICgwKTsKIH0KKyNlbmRpZgogCiB2b2lkCiBfc2VyaWFsX3B1dGMoY29uc3QgY2hhciBjLGNvbnN0IGludCBwb3J0KQpAQCAtMTc2LDQwICsyMjMsMTA0IEBACiAJTlMxNjU1MF9yZWluaXQoUE9SVCwgY2xvY2tfZGl2aXNvcik7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCitzdGF0aWMgaW5saW5lIHZvaWQKK3NlcmlhbF9wdXRjX2Rldih1bnNpZ25lZCBpbnQgZGV2X2luZGV4LGNvbnN0IGNoYXIgYykKK3sKKwlfc2VyaWFsX3B1dGMoYyxkZXZfaW5kZXgpOworfQorI2Vsc2UKIHZvaWQKIHNlcmlhbF9wdXRjKGNvbnN0IGNoYXIgYykKIHsKIAlfc2VyaWFsX3B1dGMoYyxDT05GSUdfQ09OU19JTkRFWCk7CiB9CisjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKK3N0YXRpYyBpbmxpbmUgdm9pZCAKK3NlcmlhbF9wdXRjX3Jhd19kZXYodW5zaWduZWQgaW50IGRldl9pbmRleCxjb25zdCBjaGFyIGMpCit7CisJX3NlcmlhbF9wdXRjX3JhdyhjLGRldl9pbmRleCk7Cit9CisjZWxzZQogdm9pZAogc2VyaWFsX3B1dGNfcmF3KGNvbnN0IGNoYXIgYykKIHsKIAlfc2VyaWFsX3B1dGNfcmF3KGMsQ09ORklHX0NPTlNfSU5ERVgpOwogfQorI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCitzdGF0aWMgaW5saW5lIHZvaWQKK3NlcmlhbF9wdXRzX2Rldih1bnNpZ25lZCBpbnQgZGV2X2luZGV4LGNvbnN0IGNoYXIgKnMpCit7CisJX3NlcmlhbF9wdXRzKHMsZGV2X2luZGV4KTsKK30KKyNlbHNlCiB2b2lkCiBzZXJpYWxfcHV0cyhjb25zdCBjaGFyICpzKQogewogCV9zZXJpYWxfcHV0cyhzLENPTkZJR19DT05TX0lOREVYKTsKIH0KKyNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01VTFRJKQorc3RhdGljIGlubGluZSBpbnQKK3NlcmlhbF9nZXRjX2Rldih1bnNpZ25lZCBpbnQgZGV2X2luZGV4KQoreworCXJldHVybiBfc2VyaWFsX2dldGMoZGV2X2luZGV4KTsKK30KKyNlbHNlCiBpbnQKIHNlcmlhbF9nZXRjKHZvaWQpCiB7CiAJcmV0dXJuIF9zZXJpYWxfZ2V0YyhDT05GSUdfQ09OU19JTkRFWCk7CiB9CisjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKK3N0YXRpYyBpbmxpbmUgaW50CitzZXJpYWxfdHN0Y19kZXYodW5zaWduZWQgaW50IGRldl9pbmRleCkKK3sKKwlyZXR1cm4gX3NlcmlhbF90c3RjKGRldl9pbmRleCk7Cit9CisjZWxzZQogaW50CiBzZXJpYWxfdHN0Yyh2b2lkKQogewogCXJldHVybiBfc2VyaWFsX3RzdGMoQ09ORklHX0NPTlNfSU5ERVgpOwogfQorI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCitzdGF0aWMgaW5saW5lIHZvaWQKK3NlcmlhbF9zZXRicmdfZGV2KHVuc2lnbmVkIGludCBkZXZfaW5kZXgpCit7CisJX3NlcmlhbF9zZXRicmcoZGV2X2luZGV4KTsKK30KKyNlbHNlCiB2b2lkCiBzZXJpYWxfc2V0YnJnKHZvaWQpCiB7CiAJX3NlcmlhbF9zZXRicmcoQ09ORklHX0NPTlNfSU5ERVgpOwogfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfTVVMVEkpCisKK0RFQ0xBUkVfRVNFUklBTF9GVU5DVElPTlMoMSk7CitzdHJ1Y3Qgc2VyaWFsX2RldmljZSBlc2VyaWFsMV9kZXZpY2UgPSAKKwlJTklUX0VTRVJJQUxfU1RSVUNUVVJFKDEsImVzZXJpYWwwIiwiRVVBUlQxIik7CitERUNMQVJFX0VTRVJJQUxfRlVOQ1RJT05TKDIpOworc3RydWN0IHNlcmlhbF9kZXZpY2UgZXNlcmlhbDJfZGV2aWNlID0KKwlJTklUX0VTRVJJQUxfU1RSVUNUVVJFKDIsImVzZXJpYWwxIiwiRVVBUlQyIik7CitERUNMQVJFX0VTRVJJQUxfRlVOQ1RJT05TKDMpOworc3RydWN0IHNlcmlhbF9kZXZpY2UgZXNlcmlhbDNfZGV2aWNlID0KKwlJTklUX0VTRVJJQUxfU1RSVUNUVVJFKDMsImVzZXJpYWwyIiwiRVVBUlQzIik7CitERUNMQVJFX0VTRVJJQUxfRlVOQ1RJT05TKDQpOworc3RydWN0IHNlcmlhbF9kZXZpY2UgZXNlcmlhbDRfZGV2aWNlID0KKwlJTklUX0VTRVJJQUxfU1RSVUNUVVJFKDQsImVzZXJpYWwzIiwiRVVBUlQ0Iik7CisjZW5kaWYgLyogQ09ORklHX1NFUklBTF9NVUxUSSAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2s5OGxpbi9NYWtlZmlsZSBiL2RyaXZlcnMvc2s5OGxpbi9NYWtlZmlsZQppbmRleCA4ZWUwZTIxLi5hYzIxZTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NrOThsaW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zazk4bGluL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI0LDE1ICsyNCwxOSBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIFN5c0tvbm5lY3QgU0stOTh4eCBkZXZpY2UgZHJpdmVyLgogIworCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCIDo9IGxpYnNrOThsaW4uYQorTElCCTo9ICQob2JqKWxpYnNrOThsaW4uYQogCi1PQkpTIDo9ICAgICBza2dlLm8gc2thZGRyLm8gc2tnZWh3dC5vIHNrZ2Vpbml0Lm8gc2tnZXBubWkubyBza2dlc2lycS5vIFwKLQkgICAgIHNraTJjLm8gc2tsbTgwLm8gc2txdWV1ZS5vIHNrcmxtdC5vIHNrdGltZXIubyBza3ZwZC5vIFwKLQkgICAgIHNreG1hYzIubyBza2NzdW0ubyAjc2twcm9jLm8KK0NPQkpTCTo9IHNrZ2UubyBza2FkZHIubyBza2dlaHd0Lm8gc2tnZWluaXQubyBza2dlcG5taS5vIHNrZ2VzaXJxLm8gXAorCQlza2kyYy5vIHNrbG04MC5vIHNrcXVldWUubyBza3JsbXQubyBza3RpbWVyLm8gc2t2cGQubyBcCisJCXNreG1hYzIubyBza2NzdW0ubyAjc2twcm9jLm8KIAotT0JKUyArPSAgICAgdWJvb3Rfc2tiLm8gdWJvb3RfZHJ2Lm8KK0NPQkpTCSs9IHVib290X3NrYi5vIHVib290X2Rydi5vCisKK1NSQ1MJOj0gJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQogCiAjIERCR0RFRiA9ICBcCiAjIC1EREVCVUcKQEAgLTg0LDE4ICs4OCwyMCBAQAogRVhUUkFfQ0ZMQUdTICs9IC1JLiAtRFNLX1VTRV9DU1VNICQoREJHREVGKQogCiBDRkxBR1MgKz0gJChFWFRSQV9DRkxBR1MpCitIT1NUX0NGTEFHUyArPSAkKEVYVFJBX0NGTEFHUykKIAogCiBhbGw6CSQoTElCKQogCi0kKExJQik6CSQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RxbTh4eF9wY21jaWEuYyBiL2RyaXZlcnMvdHFtOHh4X3BjbWNpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZjUzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RxbTh4eF9wY21jaWEuYwpAQCAtMCwwICsxLDMzMCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRRTTh4eEwgQm9hcmRzIGJ5IFRRIENvbXBvbmVudHMJCQkJCSovCisvKiBTQzh4eCAgIEJvYXJkcyBieSBTaW5vVmVlIE1pY3Jvc3lzdGVtcwkJCQkqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpZmRlZiBDT05GSUdfOHh4CisjaW5jbHVkZSA8bXBjOHh4Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxwY21jaWEuaD4KKworI3VuZGVmCUNPTkZJR19QQ01DSUEKKworI2lmCShDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDTUNJQSkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQQorI2VuZGlmCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1BDTUNJQSkJXAorCSYmIChkZWZpbmVkKENPTkZJR19UUU04eHhMKSB8fCBkZWZpbmVkKENPTkZJR19TVk1fU0M4eHgpKQorCisjaWYJZGVmaW5lZChDT05GSUdfVklSVExBQjIpCisjZGVmaW5lCVBDTUNJQV9CT0FSRF9NU0cJIlZpcnRsYWIyIgorI2VsaWYJZGVmaW5lZChDT05GSUdfVFFNOHh4TCkKKyNkZWZpbmUJUENNQ0lBX0JPQVJEX01TRwkiVFFNOHh4TCIKKyNlbGlmCWRlZmluZWQoQ09ORklHX1NWTV9TQzh4eCkKKyNkZWZpbmUJUENNQ0lBX0JPQVJEX01TRwkiU0M4eHgiCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX05TQ1UpCisKKyNkZWZpbmUJcG93ZXJfY29uZmlnKHNsb3QpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZQlwb3dlcl9vZmYoc2xvdCkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZQlwb3dlcl9vbl81XzAoc2xvdCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lCXBvd2VyX29uXzNfMyhzbG90KQlkbyB7fSB3aGlsZSAoMCkKKworI2VsaWYJZGVmaW5lZChDT05GSUdfSE1JMTApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3dlcl9jb25maWcoaW50IHNsb3QpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCS8qCisJICogQ29uZmlndXJlIFBvcnQgQiAgcGlucyBmb3IKKwkgKiA1IFZvbHRzIEVuYWJsZSBhbmQgMyBWb2x0cyBlbmFibGUKKwkqLworCWltbWFwLT5pbV9jcG0uY3BfcGJwYXIgJj0gfigweDAwMDAwMzAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvd2VyX29mZihpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJLyogcmVtb3ZlIGFsbCBwb3dlciAqLworCWltbWFwLT5pbV9jcG0uY3BfcGJkYXQgfD0gMHgwMDAwMDMwMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvd2VyX29uXzVfMChpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJaW1tYXAtPmltX2NwbS5jcF9wYmRhdCAmPSB+KDB4MDAwMDEwMCk7CisJaW1tYXAtPmltX2NwbS5jcF9wYmRpciB8PSAweDAwMDAwMzAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG93ZXJfb25fM18zKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlpbW1hcC0+aW1fY3BtLmNwX3BiZGF0ICY9IH4oMHgwMDAwMjAwKTsKKwlpbW1hcC0+aW1fY3BtLmNwX3BiZGlyIHw9IDB4MDAwMDAzMDA7Cit9CisKKyNlbGlmCWRlZmluZWQoQ09ORklHX1ZJUlRMQUIyKQorCisjZGVmaW5lCXBvd2VyX2NvbmZpZyhzbG90KQlkbyB7fSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3dlcl9vZmYoaW50IHNsb3QpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqcG93ZXJjdGwgPQorCQkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ01DSUFfQ1RSTDsKKwkqcG93ZXJjdGwgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG93ZXJfb25fNV8wKGludCBzbG90KQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKnBvd2VyY3RsID0KKwkJCSh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUENNQ0lBX0NUUkw7CisJCQkqcG93ZXJjdGwgPSAyOwkvKiBFbmFibGUgNVYgVmNjb3V0ICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3dlcl9vbl8zXzMoaW50IHNsb3QpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqcG93ZXJjdGwgPQorCQkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ01DSUFfQ1RSTDsKKwkJCSpwb3dlcmN0bCA9IDE7CS8qIEVuYWJsZSAzLjNWIFZjY291dCAqLworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG93ZXJfY29uZmlnKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwkvKgorCSogQ29uZmlndXJlIFBvcnQgQyBwaW5zIGZvcgorCSogNSBWb2x0cyBFbmFibGUgYW5kIDMgVm9sdHMgZW5hYmxlCisJKi8KKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3BhciAmPSB+KDB4MDAwMiB8IDB4MDAwNCk7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNzbyAgJj0gfigweDAwMDIgfCAweDAwMDQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG93ZXJfb2ZmKGludCBzbG90KQoreworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RhdCAmPSB+KDB4MDAwMiB8IDB4MDAwNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3dlcl9vbl81XzAoaW50IHNsb3QpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGF0IHw9IDB4MDAwNDsKKwlpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RpciB8PSAoMHgwMDAyIHwgMHgwMDA0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvd2VyX29uXzNfMyhpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkYXQgfD0gMHgwMDAyOworCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGlyIHw9ICgweDAwMDIgfCAweDAwMDQpOworfQorCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19ITUkxMAorc3RhdGljIGlubGluZSBpbnQgY2hlY2tfY2FyZF9pc19hYnNlbnQoaW50IHNsb3QpCit7CisJdm9sYXRpbGUgcGNtY29uZjh4eF90ICpwY21wID0KKwkJKHBjbWNvbmY4eHhfdCAqKSgmKCgoaW1tYXBfdCAqKUNGR19JTU1SKS0+aW1fcGNtY2lhKSk7CisJcmV0dXJuIHBjbXAtPnBjbWNfcGlwciAmICgweDEwMDAwMDAwID4+IChzbG90IDw8IDQpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBjaGVja19jYXJkX2lzX2Fic2VudChpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QgKnBjbXAgPQorCQkocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKKwlyZXR1cm4gcGNtcC0+cGNtY19waXByICYgKDB4MTgwMDAwMDAgPj4gKHNsb3QgPDwgNCkpOworfQorI2VuZGlmCisKKyNpZmRlZglOU0NVX09FX0lOVgorI2RlZmluZQlOU0NVX0dDUlhfQ1hPRQkwCisjZWxzZQorI2RlZmluZQlOU0NVX0dDUlhfQ1hPRQlfX01ZX1BDTUNJQV9HQ1JYX0NYT0UKKyNlbmRpZgorCitpbnQgcGNtY2lhX2hhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKK3sKKwl2b2xhdGlsZSBwY21jb25mOHh4X3QgKnBjbXAgPQorCQkocGNtY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9wY21jaWEpKTsKKwl2b2xhdGlsZSBzeXNjb25mOHh4X3QgKnN5c3AgPQorCQkoc3lzY29uZjh4eF90ICopKCYoKChpbW1hcF90ICopQ0ZHX0lNTVIpLT5pbV9zaXVfY29uZikpOworCXVpbnQgcmVnLCBtYXNrOworCisJZGVidWcgKCJoYXJkd2FyZV9lbmFibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKKworCXVkZWxheSgxMDAwMCk7CisKKwkvKgorCSogQ29uZmlndXJlIFNJVU1DUiB0byBlbmFibGUgUENNQ0lBIHBvcnQgQgorCSogKFZGTFNbMDoxXSBhcmUgbm90IHVzZWQgZm9yIGRlYnVnZ2luZywgd2UgY29ubmVjdCBGUlojIGluc3RlYWQpCisJKi8KKwlzeXNwLT5zY19zaXVtY3IgJj0gflNJVU1DUl9EQkdDMTE7CS8qIHNldCBEQkdDIHRvIDAwICovCisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdGUsIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlwY21wLT5wY21jX3BzY3IgPSAgUENNQ0lBX01BU0soc2xvdCk7CisJcGNtcC0+cGNtY19wZXIgJj0gflBDTUNJQV9NQVNLKHNsb3QpOworCisJLyoKKwkqIERpc2FibGUgaW50ZXJydXB0cywgRE1BLCBhbmQgUENNQ0lBIGJ1ZmZlcnMKKwkqIChpc29sYXRlIHRoZSBpbnRlcmZhY2UpIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCisJKi8KKwlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7CisJcmVnICA9IDA7CisJcmVnIHw9IF9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgfD0gTlNDVV9HQ1JYX0NYT0U7CisKKwlQQ01DSUFfUEdDUlgoc2xvdCkgPSByZWc7CisJdWRlbGF5KDUwMCk7CisKKwlwb3dlcl9jb25maWcoc2xvdCk7CisJcG93ZXJfb2ZmKHNsb3QpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgYSBjYXJkIGluIHRoZSBzbG90LCB0aGVuIGNvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlLgorCSovCisJdWRlbGF5KDEwMDAwKTsKKwlkZWJ1ZyAoIlslZF0gJXM6IFBJUFIoJXApPTB4JXhcbiIsIF9fTElORV9fLF9fRlVOQ1RJT05fXywKKwkgICAgICAgJihwY21wLT5wY21jX3BpcHIpLHBjbXAtPnBjbWNfcGlwcik7CisKKwlpZiAoY2hlY2tfY2FyZF9pc19hYnNlbnQoc2xvdCkpIHsKKwkJcHJpbnRmICgiICAgTm8gQ2FyZCBmb3VuZFxuIik7CisJCXJldHVybiAoMSk7CisJfQorCisJLyoKKwkqIFBvd2VyIE9uLgorCSovCisJbWFzayA9IFBDTUNJQV9WUzEoc2xvdCkgfCBQQ01DSUFfVlMyKHNsb3QpOworCXJlZyAgPSBwY21wLT5wY21jX3BpcHI7CisJZGVidWcgKCJQSVBSOiAweCV4ID09PiBWUzE9byVzLCBWUzI9byVzXG4iLAorCSAgICAgICByZWcsCisJICAgICAgIChyZWcmUENNQ0lBX1ZTMShzbG90KSk/Im4iOiJmZiIsCisJICAgICAgIChyZWcmUENNQ0lBX1ZTMihzbG90KSk/Im4iOiJmZiIpOworCisJaWYgKChyZWcgJiBtYXNrKSA9PSBtYXNrKSB7CisJCXBvd2VyX29uXzVfMChzbG90KTsKKwkJcHV0cyAoIiA1LjBWIGNhcmQgZm91bmQ6ICIpOworCX0gZWxzZSB7CisJCXBvd2VyX29uXzNfMyhzbG90KTsKKwkJcHV0cyAoIiAzLjNWIGNhcmQgZm91bmQ6ICIpOworCX0KKworI2lmIDAKKwkvKiAgVkNDIHN3aXRjaCBlcnJvciBmbGFnLCBQQ01DSUEgc2xvdCBJTlBBQ0tfIHBpbiAqLworCWNwLT5jcF9wYmRpciAmPSB+KDB4MDAyMCB8IDB4MDAxMCk7CisJY3AtPmNwX3BicGFyICY9IH4oMHgwMDIwIHwgMHgwMDEwKTsKKwl1ZGVsYXkoNTAwMDAwKTsKKyNlbmRpZgorCisJdWRlbGF5KDEwMDApOworCWRlYnVnICgiRW5hYmxlIFBDTUNJQSBidWZmZXJzIGFuZCBzdG9wIFJFU0VUXG4iKTsKKwlyZWcgID0gIFBDTUNJQV9QR0NSWChzbG90KTsKKwlyZWcgJj0gfl9fTVlfUENNQ0lBX0dDUlhfQ1hSRVNFVDsJLyogYWN0aXZlIGhpZ2ggKi8KKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlyZWcgJj0gfk5TQ1VfR0NSWF9DWE9FOworCisJUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOworCisJdWRlbGF5KDI1MDAwMCk7CS8qIHNvbWUgY2FyZHMgbmVlZCA+MTUwIG1zIHRvIGNvbWUgdXAgOi0oICovCisKKwlkZWJ1ZyAoIiMgaGFyZHdhcmVfZW5hYmxlIGRvbmVcbiIpOworCisJcmV0dXJuICgwKTsKK30KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQoraW50IHBjbWNpYV9oYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQoreworCXVfbG9uZyByZWc7CisKKwlkZWJ1ZyAoImhhcmR3YXJlX2Rpc2FibGU6ICIgUENNQ0lBX0JPQVJEX01TRyAiIFNsb3QgJWNcbiIsICdBJytzbG90KTsKKworCisJLyogcmVtb3ZlIGFsbCBwb3dlciAqLworCXBvd2VyX29mZihzbG90KTsKKworCWRlYnVnICgiRGlzYWJsZSBQQ01DSUEgYnVmZmVycyBhbmQgYXNzZXJ0IFJFU0VUXG4iKTsKKwlyZWcgID0gMDsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyB8PSBOU0NVX0dDUlhfQ1hPRTsJCQkvKiBhY3RpdmUgbG93ICAqLworCisJUENNQ0lBX1BHQ1JYKHNsb3QpID0gcmVnOworCisJdWRlbGF5KDEwMDAwKTsKKworCXJldHVybiAoMCk7Cit9CisjZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KKworaW50IHBjbWNpYV92b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKK3sKKyNpZm5kZWYgQ09ORklHX05TQ1UKKwl1X2xvbmcgcmVnOworIyBpZmRlZiBERUJVRworCXZvbGF0aWxlIHBjbWNvbmY4eHhfdCAqcGNtcCA9CisJCShwY21jb25mOHh4X3QgKikoJigoKGltbWFwX3QgKilDRkdfSU1NUiktPmltX3BjbWNpYSkpOworIyBlbmRpZgorCisJZGVidWcgKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHCisJCSIgU2xvdCAlYywgVmNjPSVkLiVkLCBWcHA9JWQuJWRcbiIsCisJCSdBJytzbG90LCB2Y2MvMTAsIHZjYyUxMCwgdnBwLzEwLCB2Y2MlMTApOworCisJLyoKKwkqIERpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgKGlzb2xhdGUgdGhlIGludGVyZmFjZSkKKwkqIGFuZCBhc3NlcnQgUkVTRVQgc2lnbmFsCisJKi8KKwlkZWJ1ZyAoIkRpc2FibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIGFzc2VydCBSRVNFVFxuIik7CisJcmVnICA9IFBDTUNJQV9QR0NSWChzbG90KTsKKwlyZWcgfD0gX19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWE9FOwkJLyogYWN0aXZlIGxvdyAgKi8KKwlyZWcgfD0gTlNDVV9HQ1JYX0NYT0U7CQkJLyogYWN0aXZlIGxvdyAgKi8KKworCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKKwl1ZGVsYXkoNTAwKTsKKworCWRlYnVnICgiUENNQ0lBIHBvd2VyIE9GRlxuIik7CisJcG93ZXJfY29uZmlnKHNsb3QpOworCXBvd2VyX29mZihzbG90KTsKKworCXN3aXRjaCh2Y2MpIHsKKwkJY2FzZSAgMDogCQkJYnJlYWs7CisJCWNhc2UgMzM6IHBvd2VyX29uXzNfMyhzbG90KTsJYnJlYWs7CisJCWNhc2UgNTA6IHBvd2VyX29uXzVfMChzbG90KTsJYnJlYWs7CisJCWRlZmF1bHQ6IAkJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBDaGVja2luZyBzdXBwb3J0ZWQgdm9sdGFnZXMgKi8KKworCWRlYnVnKCJQSVBSOiAweCV4IC0tPiAlc1xuIiwgcGNtcC0+cGNtY19waXByLAorCSAgICAgICAocGNtcC0+cGNtY19waXByICYgMHgwMDAwODAwMCkgPyAib25seSA1IFYiIDogImNhbiBkbyAzLjNWIik7CisKKwlpZiAodmNjKQorCQlkZWJ1ZygiUENNQ0lBIHBvd2VyZWQgYXQgJXNWXG4iLCAodmNjID09IDUwKSA/ICI1LjAiIDogIjMuMyIpOworCWVsc2UKKwkJZGVidWcoIlBDTUNJQSBwb3dlcmVkIGRvd25cbiIpOworCitkb25lOgorCWRlYnVnKCJFbmFibGUgUENNQ0lBIGJ1ZmZlcnMgYW5kIHN0b3AgUkVTRVRcbiIpOworCXJlZyAgPSAgUENNQ0lBX1BHQ1JYKHNsb3QpOworCXJlZyAmPSB+X19NWV9QQ01DSUFfR0NSWF9DWFJFU0VUOwkvKiBhY3RpdmUgaGlnaCAqLworCXJlZyB8PSBfX01ZX1BDTUNJQV9HQ1JYX0NYT0U7CQkvKiBhY3RpdmUgbG93ICAqLworCXJlZyAmPSB+TlNDVV9HQ1JYX0NYT0U7CQkJLyogYWN0aXZlIGxvdyAgKi8KKworCVBDTUNJQV9QR0NSWChzbG90KSA9IHJlZzsKKwl1ZGVsYXkoNTAwKTsKKworCWRlYnVnKCJ2b2x0YWdlX3NldDogIiBQQ01DSUFfQk9BUkRfTVNHICIgU2xvdCAlYywgRE9ORVxuIiwgc2xvdCsnQScpOworI2VuZGlmCS8qIENPTkZJR19OU0NVICovCisJcmV0dXJuICgwKTsKK30KKworI2VuZGlmCS8qIENPTkZJR19QQ01DSUEgJiYgKENPTkZJR19UUU04eHhMIHx8IENPTkZJR19TVk1fU0M4eHgpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RzZWMuYyBiL2RyaXZlcnMvdHNlYy5jCmluZGV4IGJmYzQ5YzQuLjBmYjNjYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHNlYy5jCisrKyBiL2RyaXZlcnMvdHNlYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDxtcGM4NXh4Lmg+CisjaW5jbHVkZSA8bXBjODZ4eC5oPgogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPG5ldC5oPgpAQCAtNzAsMjcgKzcxLDMxIEBACiBzdGF0aWMgc3RydWN0IHRzZWNfaW5mb19zdHJ1Y3QgdHNlY19pbmZvW10gPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODVYWF9UU0VDMSkgfHwgZGVmaW5lZChDT05GSUdfTVBDODNYWF9UU0VDMSkKIAl7VFNFQzFfUEhZX0FERFIsIFRTRUNfR0lHQUJJVCwgVFNFQzFfUEhZSURYfSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg2WFhfVFNFQzEpCisJe1RTRUMxX1BIWV9BRERSLCBUU0VDX0dJR0FCSVQgfCBUU0VDX1JFRFVDRUQsIFRTRUMxX1BIWUlEWH0sCiAjZWxzZQogCXsgMCwgMCwgMH0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4NVhYX1RTRUMyKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4M1hYX1RTRUMyKQogCXtUU0VDMl9QSFlfQUREUiwgVFNFQ19HSUdBQklULCBUU0VDMl9QSFlJRFh9LAorI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDMikKKyAgICAgICAge1RTRUMyX1BIWV9BRERSLCBUU0VDX0dJR0FCSVQgfCBUU0VDX1JFRFVDRUQsIFRTRUMyX1BIWUlEWH0sCiAjZWxzZQogCXsgMCwgMCwgMH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTVBDODVYWF9GRUMKIAl7RkVDX1BIWV9BRERSLCAwLCBGRUNfUEhZSURYfSwKICNlbHNlCi0jICAgIGlmIGRlZmluZWQoQ09ORklHX01QQzg1WFhfVFNFQzMpIHx8IGRlZmluZWQoQ09ORklHX01QQzgzWFhfVFNFQzMpCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODVYWF9UU0VDMykgfHwgZGVmaW5lZChDT05GSUdfTVBDODNYWF9UU0VDMykgfHwgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDMykKIAl7VFNFQzNfUEhZX0FERFIsIFRTRUNfR0lHQUJJVCB8IFRTRUNfUkVEVUNFRCwgVFNFQzNfUEhZSURYfSwKLSMgICAgZWxzZQorI2Vsc2UKIAl7IDAsIDAsIDB9LAotIyAgICBlbmRpZgotIyAgICBpZiBkZWZpbmVkKENPTkZJR19NUEM4NVhYX1RTRUM0KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4M1hYX1RTRUM0KQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODVYWF9UU0VDNCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODNYWF9UU0VDNCkgfHwgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDNCkKIAl7VFNFQzRfUEhZX0FERFIsIFRTRUNfR0lHQUJJVCB8IFRTRUNfUkVEVUNFRCwgVFNFQzRfUEhZSURYfSwKLSMgICAgZWxzZQorI2Vsc2UKIAl7IDAsIDAsIDB9LAotIyAgICBlbmRpZgorI2VuZGlmCiAjZW5kaWYKIH07CiAKQEAgLTM2MSw3ICszNjYsNyBAQAogCQkJaWYgKGkgPiBQSFlfQVVUT05FR09USUFURV9USU1FT1VUKSB7CiAJCQkJcHV0cyAoIiBUSU1FT1VUICFcbiIpOwogCQkJCXByaXYtPmxpbmsgPSAwOwotCQkJCWJyZWFrOworCQkJCXJldHVybiAwOwogCQkJfQogCiAJCQlpZiAoKGkrKyAlIDEwMDApID09IDApIHsKQEAgLTQ2Myw2ICs0NjgsMzIgQEAKIAogCXJldHVybiAwOwogfQorLyogUGFyc2UgdGhlIHZzYzgyNDQncyBzdGF0dXMgcmVnaXN0ZXIgZm9yIHNwZWVkIGFuZCBkdXBsZXgKKyAqIGluZm9ybWF0aW9uICovCit1aW50IG1paV9wYXJzZV92c2M4MjQ0KHVpbnQgbWlpX3JlZywgc3RydWN0IHRzZWNfcHJpdmF0ZSAqcHJpdikKK3sKKyAgICAgICAgdWludCBzcGVlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGlmKG1paV9yZWcgJiBNSUlNX1ZTQzgyNDRfQVVYQ09OU1RBVF9EVVBMRVgpCisgICAgICAgICAgICAgICAgcHJpdi0+ZHVwbGV4aXR5ID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaXYtPmR1cGxleGl0eSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBzcGVlZCA9IG1paV9yZWcgJiBNSUlNX1ZTQzgyNDRfQVVYQ09OU1RBVF9TUEVFRDsKKyAgICAgICAgc3dpdGNoKHNwZWVkKSB7CisgICAgICAgICAgICAgICAgY2FzZSBNSUlNX1ZTQzgyNDRfQVVYQ09OU1RBVF9HQklUOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+c3BlZWQgPSAxMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNSUlNX1ZTQzgyNDRfQVVYQ09OU1RBVF8xMDA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5zcGVlZCA9IDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5zcGVlZCA9IDEwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHJldHVybiAwOworfQogCiAKIC8qIFBhcnNlIHRoZSBETTkxNjEncyBzdGF0dXMgcmVnaXN0ZXIgZm9yIHNwZWVkIGFuZCBkdXBsZXgKQEAgLTkwNyw2ICs5MzgsMjkgQEAKIAkJe21paW1fZW5kLH0KIAl9LAogfTsKK3N0cnVjdCBwaHlfaW5mbyBwaHlfaW5mb19WU0M4MjQ0ID0geworICAgICAgICAweDNmMWIsCisgICAgICAgICJWaXRlc3NlIFZTQzgyNDQiLAorICAgICAgICA2LAorICAgICAgICAoc3RydWN0IHBoeV9jbWRbXSkgeyAvKiBjb25maWcgKi8KKyAgICAgICAgLyogT3ZlcnJpZGUgUEhZIGNvbmZpZyBzZXR0aW5ncyAqLworICAgICAgICAgICAgICAgIC8qIENvbmZpZ3VyZSBzb21lIGJhc2ljIHN0dWZmICovCisgICAgICAgIAl7TUlJTV9DT05UUk9MLCBNSUlNX0NPTlRST0xfSU5JVCwgJm1paV9jcl9pbml0fSwKKyAgICAgICAgICAgICAgICB7bWlpbV9lbmQsfQorICAgICAgICB9LAorICAgICAgICAoc3RydWN0IHBoeV9jbWRbXSkgeyAvKiBzdGFydHVwICovCisgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgU3RhdHVzICgyeCB0byBtYWtlIHN1cmUgbGluayBpcyByaWdodCkgKi8KKyAgICAgICAgICAgICAgICB7TUlJTV9TVEFUVVMsIG1paW1fcmVhZCwgTlVMTH0sCisgICAgICAgICAgICAgICAgLyogQXV0by1uZWdvdGlhdGUgKi8KKyAgICAgICAgICAgICAgICB7TUlJTV9TVEFUVVMsIG1paW1fcmVhZCwgJm1paV9wYXJzZV9zcn0sCisgICAgICAgICAgICAgICAgLyogUmVhZCB0aGUgc3RhdHVzICovCisgICAgICAgICAgICAgICAge01JSU1fVlNDODI0NF9BVVhfQ09OU1RBVCwgbWlpbV9yZWFkLCAmbWlpX3BhcnNlX3ZzYzgyNDR9LAorICAgICAgICAgICAgICAgIHttaWltX2VuZCx9CisgICAgICAgIH0sCisgICAgICAgIChzdHJ1Y3QgcGh5X2NtZFtdKSB7IC8qIHNodXRkb3duICovCisgICAgICAgICAgICAgICAge21paW1fZW5kLH0KKyAgICAgICAgfSwKK307CiAKIAogc3RydWN0IHBoeV9pbmZvIHBoeV9pbmZvX2RtOTE2MSA9IHsKQEAgLTEwNTAsNiArMTEwNCw3IEBACiAJJnBoeV9pbmZvX004OEUxMTQ1LAogCSZwaHlfaW5mb19kbTkxNjEsCiAJJnBoeV9pbmZvX2x4dDk3MSwKKwkmcGh5X2luZm9fVlNDODI0NCwKIAkmcGh5X2luZm9fZHA4Mzg2NSwKIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90c2VjLmggYi9kcml2ZXJzL3RzZWMuaAppbmRleCAwYmZjYTNhLi40YWEzMzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RzZWMuaAorKysgYi9kcml2ZXJzL3RzZWMuaApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBUU0VDX1NJWkUJMHgwMTAwMAogCiAvKiBGSVhNRTogIFNob3VsZCB0aGVzZSBiZSBwdXNoZWQgYmFjayB0byA4M3h4IGFuZCA4NXh4IGNvbmZpZyBmaWxlcz8gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19NUEM4NXh4KQorI2lmIGRlZmluZWQoQ09ORklHX01QQzg1eHgpIHx8IGRlZmluZWQoQ09ORklHX01QQzg2eHgpCiAgICAgI2RlZmluZSBUU0VDX0JBU0VfQUREUgkoQ0ZHX0lNTVIgKyBDRkdfVFNFQzFfT0ZGU0VUKQogI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDODNYWCkKICAgICAjZGVmaW5lIFRTRUNfQkFTRV9BRERSCShDRkdfSU1NUkJBUiArIENGR19UU0VDMV9PRkZTRVQpCkBAIC0xMzMsNiArMTMzLDI0IEBACiAjZGVmaW5lIE1JSU1fR0JJVF9DT04JCTB4MDkKICNkZWZpbmUgTUlJTV9HQklUX0NPTl9BRFZFUlQJMHgwZTAwCiAKKy8qIEVudHJ5IGZvciBWaXRlc3NlIFZTQzgyNDQgcmVncyBzdGFydHMgaGVyZSAqLworLyogVml0ZXNzZSBWU0M4MjQ0IEF1eGlsaWFyeSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSUlNX1ZTQzgyNDRfQVVYX0NPTlNUQVQgICAgICAgIDB4MWMKKyNkZWZpbmUgTUlJTV9WU0M4MjQ0X0FVWENPTlNUQVRfSU5JVCAgICAweDAwMDAKKyNkZWZpbmUgTUlJTV9WU0M4MjQ0X0FVWENPTlNUQVRfRFVQTEVYICAweDAwMjAKKyNkZWZpbmUgTUlJTV9WU0M4MjQ0X0FVWENPTlNUQVRfU1BFRUQgICAweDAwMTgKKyNkZWZpbmUgTUlJTV9WU0M4MjQ0X0FVWENPTlNUQVRfR0JJVCAgICAweDAwMTAKKyNkZWZpbmUgTUlJTV9WU0M4MjQ0X0FVWENPTlNUQVRfMTAwICAgICAweDAwMDgKKyNkZWZpbmUgTUlJTV9DT05UUk9MX0lOSVRfTE9PUEJBQ0sgICAgICAweDQwMDAKKworLyogVml0ZXNzZSBWU0M4MjQ0IEV4dGVuZGVkIFBIWSBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTUlJTV9WU0M4MjQ0X0VQSFlfQ09OICAgICAgICAgICAweDE3CisjZGVmaW5lIE1JSU1fVlNDODI0NF9FUEhZQ09OX0lOSVQgICAgICAgMHgwMDA2CisKKy8qIFZpdGVzc2UgVlNDODI0NCBTZXJpYWwgTEVEIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJTV9WU0M4MjQ0X0xFRF9DT04gICAgICAgICAgICAweDFiCisjZGVmaW5lIE1JSU1fVlNDODI0NF9MRURDT05fSU5JVCAgICAgICAgMHhGMDExCisKIC8qIDg4RTEwMTEgUEhZIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBNSUlNXzg4RTEwMTFfUEhZX1NUQVRVUyAgICAgICAgIDB4MTEKICNkZWZpbmUgTUlJTV84OEUxMDExX1BIWVNUQVRfU1BFRUQgICAgICAweGMwMDAKZGlmZiAtLWdpdCBhL2R0dC9NYWtlZmlsZSBiL2R0dC9NYWtlZmlsZQppbmRleCAwYTMzNDc4Li40ODYwMDhhIDEwMDY0NAotLS0gYS9kdHQvTWFrZWZpbGUKKysrIGIvZHR0L01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKEMpIENvcHlyaWdodCAyMDAxCiAjIEVyaWsgVGhlaXNlbiwgV2F2ZSA3IE9wdGljcywgZXRoZWlzZW5AbWluZHNwcmluZy5jb20uCiAjCkBAIC0yNSwyMCArMjgsMjMgQEAKIAogI0NGTEFHUyArPSAtRERFQlVHCiAKLUxJQgk9IGxpYmR0dC5hCitMSUIJPSAkKG9iailsaWJkdHQuYQogCi1PQkpTCT0gbG03NS5vIGRzMTYyMS5vIGFkbTEwMjEubworQ09CSlMJPSBsbTc1Lm8gZHMxNjIxLm8gYWRtMTAyMS5vCisKK1NSQ1MJOj0gJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQogCiBhbGw6CSQoTElCKQogCi0kKExJQik6CSQoU1RBUlQpICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZHR0L2xtNzUuYyBiL2R0dC9sbTc1LmMKaW5kZXggNTlkYWE0NS4uNjNmM2I3NSAxMDA2NDQKLS0tIGEvZHR0L2xtNzUuYworKysgYi9kdHQvbG03NS5jCkBAIC0xNDYsOCArMTQ2LDEzIEBACiAgICAgLyoKICAgICAgKiBTZXR1cCBjb25maWd1cmF0b24gcmVnaXN0ZXIKICAgICAgKi8KKyNpZmRlZiBDT05GSUdfRFRUX0FENzQxNAorICAgIC8qIGNvbmZpZyA9IGFsZXJ0IGFjdGl2ZSBsb3cgYW5kIGRpc2FibGVkICovCisgICAgdmFsID0gMHg2MDsKKyNlbHNlCiAgICAgLyogY29uZmlnID0gNiBzYW1wbGUgaW50ZWdyYXRpb24sIGludCBtb2RlLCBhY3RpdmUgbG93LCBhbmQgZW5hYmxlICovCiAgICAgdmFsID0gMHgxODsKKyNlbmRpZgogICAgIGlmIChkdHRfd3JpdGUoc2Vuc29yLCBEVFRfQ09ORklHLCB2YWwpICE9IDApCiAJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlIGIvZXhhbXBsZXMvTWFrZWZpbGUKaW5kZXggYTM0MmQ3NS4uZDdjZDg0MyAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvTWFrZWZpbGUKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0CisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC05NCw2ICs5NCwxMiBAQAogQklOICAgICs9IG1lbV90b19tZW1faWRtYTJpbnRyLmJpbiBtZW1fdG9fbWVtX2lkbWEyaW50cgogZW5kaWYKIAorIyBEZW1vIGZvciA1Mnh4IElSUXMKK2lmZXEgKCQoQ1BVKSxtcGM1eHh4KQorU1JFQyAgICs9IGludGVycnVwdC5zcmVjCitCSU4gICAgKz0gaW50ZXJydXB0LmJpbiBpbnRlcnJ1cHQKK2VuZGlmCisKICMgVXRpbGl0eSBmb3IgcmVzZXR0aW5nIGk4MjU1OSBFRVBST00KIGlmZXEgKCQoQk9BUkQpLG94YykKIFNSRUMgICArPSBlZXBybzEwMF9lZXByb20uc3JlYwpAQCAtMTA0LDkgKzExMCw5IEBACiBFWF9MREZMQUdTICs9IC1FQgogZW5kaWYKIAotT0JKUwk9ICQoU1JFQzouc3JlYz0ubykKK0NPQkpTCTo9ICQoU1JFQzouc3JlYz0ubykKIAotTElCCT0gbGlic3R1YnMuYQorTElCCT0gJChvYmopbGlic3R1YnMuYQogTElCQU9CSlM9CiBpZmVxICgkKEFSQ0gpLHBwYykKIExJQkFPQkpTKz0gJChBUkNIKV9sb25nam1wLm8gJChBUkNIKV9zZXRqbXAubwpAQCAtMTE1LDM0ICsxMjEsNDAgQEAKIExJQkFPQkpTKz0gdGVzdF9idXJzdF9saWIubwogZW5kaWYKIExJQkNPQkpTPSBzdHVicy5vCi1MSUJPQkpTCT0gJChMSUJBT0JKUykgJChMSUJDT0JKUykKKworTElCT0JKUwk9ICQoYWRkcHJlZml4ICQob2JqKSwkKExJQkFPQkpTKSAkKExJQkNPQkpTKSkKKworU1JDUwk6PSAkKENPQkpTOi5vPS5jKSAkKExJQkNPQkpTOi5vPS5jKSAkKGlmICQoTElCQU9CSlMpLCQoTElCQU9CSlM6Lm89LlMpKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitCSU4JOj0gJChhZGRwcmVmaXggJChvYmopLCQoQklOKSkKK1NSRUMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU1JFQykpCiAKIGdjY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKIGNsaWJkaXIgOj0gJChzaGVsbCBkaXJuYW1lIGAkKENDKSAkKENGTEFHUykgLXByaW50LWZpbGUtbmFtZT1saWJjLmFgKQogCiBDUFBGTEFHUyArPSAtSS4uCiAKLWFsbDoJLmRlcGVuZCAkKE9CSlMpICQoTElCKSAkKFNSRUMpICQoQklOKQorYWxsOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChMSUIpICQoU1JFQykgJChCSU4pCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSQoTElCKTogLmRlcGVuZCAkKExJQk9CSlMpCi0JJChBUikgY3J2ICRAICQoTElCT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKExJQk9CSlMpCisJCSQoQVIpIGNydiAkQCAkKExJQk9CSlMpCiAKLSU6CSUubyAkKExJQikKLQkkKExEKSAtZyAkKEVYX0xERkxBR1MpIC1UdGV4dCAkKExPQURfQUREUikgXAotCQktbyAkQCAtZSAkKDw6Lm89KSAkPCAkKExJQikgXAotCQktTCQoZ2NjbGliZGlyKSAtbGdjYwotJS5zcmVjOgklCi0JJChPQkpDT1BZKSAtTyBzcmVjICQ8ICRAIDI+L2Rldi9udWxsCiskKG9iaiklOgkkKG9iaiklLm8gJChMSUIpCisJCSQoTEQpIC1nICQoRVhfTERGTEFHUykgLVR0ZXh0ICQoTE9BRF9BRERSKSBcCisJCQktbyAkQCAtZSAkKG5vdGRpciAkKDw6Lm89KSkgJDwgJChMSUIpIFwKKwkJCS1MJChnY2NsaWJkaXIpIC1sZ2NjCiskKG9iaiklLnNyZWM6CSQob2JqKSUKKwkJJChPQkpDT1BZKSAtTyBzcmVjICQ8ICRAIDI+L2Rldi9udWxsCiAKLSUuYmluOgklCi0JJChPQkpDT1BZKSAtTyBiaW5hcnkgJDwgJEAgMj4vZGV2L251bGwKKyQob2JqKSUuYmluOgkkKG9iaiklCisJCSQoT0JKQ09QWSkgLU8gYmluYXJ5ICQ8ICRAIDI+L2Rldi9udWxsCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChPQkpTOi5vPS5jKSAkKExJQkNPQkpTOi5vPS5jKSAkKExJQkFPQkpTOi5vPS5TKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChPQkpTOi5vPS5jKSAkKExJQkNPQkpTOi5vPS5jKSAkKExJQkFPQkpTOi5vPS5TKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2ludGVycnVwdC5jIGIvZXhhbXBsZXMvaW50ZXJydXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMwNjFkMQotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2ludGVycnVwdC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIERldGxldiBadW5kZWwsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIGR6dUBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIGRlbW9uc3RyYXRpbmcKKyAqIGNhdGNoaW5nIElSUXMgb24gdGhlIE1QQzUyeHggYXJjaGl0ZWN0dXJlLgorICoKKyAqIFRoZSBpbnRlcnJ1cHQgdG8gYmUgaW50ZXJjZXB0ZWQgY2FuIGJlIHNwZWNpZmllZCBhcyBhbiBhcmd1bWVudAorICogdG8gdGhlIGFwcGxpY2F0aW9uLiAgU3BlY2lmeWluZyBub3RoaW5nIHdpbGwgaW50ZXJjZXB0IElSUTEgb24gdGhlCisgKiBNUEM1MjAwIHBsYXRmb3JtLiAgT24gdGhlIENSODI1IGNhcnJpZXIgYm9hcmQgZnJvbSBNaWNyb1N5cyB0aGlzCisgKiBtYXBzIHRvIHRoZSBBQk9SVCBzd2l0Y2ggOikKKyAqCisgKiBOb3RlIHRoYXQgdGhlIHNwZWNpZmllZCB2ZWN0b3IgaXMgb25seSBhIGxvZ2ljYWwgbnVtYmVyIHNwZWNpZmllZAorICogYnkgdGhlIHJlc3BlY3RpdmUgaGVhZGVyIGZpbGUuCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGV4cG9ydHMuaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpCisjZGVmaW5lIERGTF9JUlEgTVBDNVhYWF9JUlExCisjZWxzZQorI2RlZmluZSBERkxfSVJRIDAKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBpcnFfaGFuZGxlciAodm9pZCAqYXJnKTsKKworaW50IGludGVycnVwdCAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgYywgaXJxID0gLTE7CisKKwlhcHBfc3RhcnR1cCAoYXJndik7CisKKwlpZiAoYXJnYyA+IDEpCisJCWlycSA9IHNpbXBsZV9zdHJ0b3VsIChhcmd2WzFdLCBOVUxMLCAwKTsKKwlpZiAoKGlycSA8IDApIHx8IChpcnEgPiBOUl9JUlFTKSkKKwkJaXJxID0gREZMX0lSUTsKKworCXByaW50ZiAoIkluc3RhbGxpbmcgaGFuZGxlciBmb3IgaXJxIHZlY3RvciAlZCBhbmQgZG9pbmcgYnVzeSB3YWl0XG4iLAorCQlpcnEpOworCXByaW50ZiAoIlByZXNzICdxJyB0byBxdWl0XG4iKTsKKworCS8qIEluc3RhbGwgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlpbnN0YWxsX2hkbHIgKGlycSwgaXJxX2hhbmRsZXIsIE5VTEwpOworCXdoaWxlICgoYyA9IGdldGMgKCkpICE9ICdxJykgeworCQlwcmludGYgKCJPaywgb2ssIEkgYW0gc3RpbGwgYWxpdmUhXG4iKTsKKwl9CisKKwlmcmVlX2hkbHIgKGlycSk7CisJcHJpbnRmICgiXG5JbnRlcnJ1cHQgaGFuZGxlciBoYXMgYmVlbiB1bmluc3RhbGxlZFxuIik7CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogSGFuZGxlciBmb3IgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGlycV9oYW5kbGVyICh2b2lkICphcmcpCit7CisJLyoganVzdCBmb3IgZGVtb25zdHJhdGlvbiAqLworCXByaW50ZiAoIisiKTsKK30KZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggNzljYmRlYS4uMjczZDkwZSAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjQsNiArMjQsNiBAQAogCiBTVUJESVJTCTo9IGpmZnMyIGNyYW1mcyBmZG9zIGZhdCByZWlzZXJmcyBleHQyCiAKLS5kZXBlbmQgYWxsOgorJChvYmopLmRlcGVuZCBhbGw6CiAJQGZvciBkaXIgaW4gJChTVUJESVJTKSA7IGRvIFwKIAkJJChNQUtFKSAtQyAkJGRpciAkQCA7IGRvbmUKZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy9NYWtlZmlsZSBiL2ZzL2NyYW1mcy9NYWtlZmlsZQppbmRleCA1NGE0NzVlLi4xYTZmNGI3IDEwMDY0NAotLS0gYS9mcy9jcmFtZnMvTWFrZWZpbGUKKysrIGIvZnMvY3JhbWZzL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDI1ICsyMywyNyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliY3JhbWZzLmEKK0xJQgk9ICQob2JqKWxpYmNyYW1mcy5hCiAKIEFPQkpTCT0KIENPQkpTCT0gY3JhbWZzLm8gdW5jb21wcmVzcy5vCi1PQkpTCT0gJChBT0JKUykgJChDT0JKUykKKworU1JDUwk6PSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChBT0JKUykgJChDT0JKUykpCiAKICNDUFBGTEFHUyArPQogCiBhbGw6CSQoTElCKSAkKEFPQkpTKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9NYWtlZmlsZSBiL2ZzL2V4dDIvTWFrZWZpbGUKaW5kZXggM2IxOTM2OC4uMmU0MjBkNSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9NYWtlZmlsZQorKysgYi9mcy9leHQyL01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKEMpIENvcHlyaWdodCAyMDAzCiAjIFBhdmVsIEJhcnR1c2VrLCBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zIEFHLCBwYmFAc3lzZ28uZGUKICMKQEAgLTI0LDI1ICsyNywyNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliZXh0MmZzLmEKK0xJQgk9ICQob2JqKWxpYmV4dDJmcy5hCiAKIEFPQkpTCT0KIENPQkpTCT0gZXh0MmZzLm8gZGV2Lm8KLU9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQorCitTUkNTCTo9ICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKEFPQkpTKSAkKENPQkpTKSkKIAogI0NQUEZMQUdTICs9CiAKIGFsbDoJJChMSUIpICQoQU9CSlMpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKLQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mcy9mYXQvTWFrZWZpbGUgYi9mcy9mYXQvTWFrZWZpbGUKaW5kZXggZTQ2Mjc1Ny4uMmZhNDI4YyAxMDA2NDQKLS0tIGEvZnMvZmF0L01ha2VmaWxlCisrKyBiL2ZzL2ZhdC9NYWtlZmlsZQpAQCAtMTksMjggKzE5LDI3IEBACiAjIE1BIDAyMTExLTEzMDcgVVNBCiAjCiAKLVRPUERJUj0uLi8uLi8KLQogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYmZhdC5hCitMSUIJPSAkKG9iailsaWJmYXQuYQogCiBBT0JKUwk9CiBDT0JKUwk9IGZhdC5vIGZpbGUubwogCi1PQkpTCT0gJChBT0JKUykgJChDT0JKUykKK1NSQ1MJOj0gJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQU9CSlMpICQoQ09CSlMpKQogCiBhbGw6CSQoTElCKSAkKEFPQkpTKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZnMvZmRvcy9NYWtlZmlsZSBiL2ZzL2Zkb3MvTWFrZWZpbGUKaW5kZXggYzI1ZTc0NC4uZTU1YWM4YSAxMDA2NDQKLS0tIGEvZnMvZmRvcy9NYWtlZmlsZQorKysgYi9mcy9mZG9zL01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKEMpIENvcHlyaWdodCAyMDAyCiAjIFN05HVibGkgRmF2ZXJnZXMgLSA8d3d3LnN0YXVibGkuY29tPgogIyBQaWVycmUgQVVCRVJUICBwLmF1YmVydEBzdGF1YmxpLmNvbQpAQCAtMjUsMjUgKzI4LDI3IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWJmZG9zLmEKK0xJQgk9ICQob2JqKWxpYmZkb3MuYQogCiBBT0JKUwk9CiBDT0JKUwk9IGZhdC5vIHZmYXQubyBkZXYubyBmZG9zLm8gZnMubyBzdWJkaXIubwotT0JKUwk9ICQoQU9CSlMpICQoQ09CSlMpCisKK1NSQ1MJOj0gJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQU9CSlMpICQoQ09CSlMpKQogCiAjQ1BQRkxBR1MgKz0KIAogYWxsOgkkKExJQikgJChBT0JKUykKIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL01ha2VmaWxlIGIvZnMvamZmczIvTWFrZWZpbGUKaW5kZXggZjI4YjE3YS4uODI0MzZiYiAxMDA2NDQKLS0tIGEvZnMvamZmczIvTWFrZWZpbGUKKysrIGIvZnMvamZmczIvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMCwgMjAwMQorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjYgKzIzLDI4IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWJqZmZzMi5hCitMSUIJPSAkKG9iailsaWJqZmZzMi5hCiAKIEFPQkpTCT0KIENPQkpTCT0gamZmczJfMXBhc3MubyBjb21wcl9ydGltZS5vIGNvbXByX3J1YmluLm8gY29tcHJfemxpYi5vIG1pbmlfaW5mbGF0ZS5vCiBDT0JKUwkrPSBjb21wcl9sem8ubyBjb21wcl9semFyaS5vCi1PQkpTCT0gJChBT0JKUykgJChDT0JKUykKKworU1JDUwk6PSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChBT0JKUykgJChDT0JKUykpCiAKICNDUFBGTEFHUyArPQogCiBhbGw6CSQoTElCKSAkKEFPQkpTKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvTWFrZWZpbGUgYi9mcy9yZWlzZXJmcy9NYWtlZmlsZQppbmRleCA5OGE5YThkLi40NTAyOGNiIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9NYWtlZmlsZQorKysgYi9mcy9yZWlzZXJmcy9NYWtlZmlsZQpAQCAtMSw0ICsxLDcgQEAKICMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCiAjIChDKSBDb3B5cmlnaHQgMjAwMwogIyBQYXZlbCBCYXJ0dXNlaywgU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucyBBRywgcGJhQHN5c2dvLmRlCiAjCkBAIC0yNCwyNSArMjcsMjYgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYnJlaXNlcmZzLmEKK0xJQgk9ICQob2JqKWxpYnJlaXNlcmZzLmEKIAogQU9CSlMJPQogQ09CSlMJPSByZWlzZXJmcy5vIGRldi5vIG1vZGVfc3RyaW5nLm8KLU9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQorCitTUkNTCTo9ICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKEFPQkpTKSAkKENPQkpTKSkKIAogI0NQUEZMQUdTICs9CiAKIGFsbDoJJChMSUIpICQoQU9CSlMpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKLQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9pbmNsdWRlLzQwNV9tYWwuaCBiL2luY2x1ZGUvNDA1X21hbC5oCmluZGV4IDY5ZDIwYzkuLjJhNDIxODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvNDA1X21hbC5oCisrKyBiL2luY2x1ZGUvNDA1X21hbC5oCkBAIC05MiwxMSArOTIsMjEgQEAKICNkZWZpbmUgTUFMX0VTUl9QQkVJCSAgMHgwMDAwMDAwMQogICAgICAgLyogXl4JCQkgXl4gICAqLwogICAgICAgLyogTWFsIElFUgkJICAgICAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUEUpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorI2RlZmluZSBNQUxfSUVSX1BUCSAgMHgwMDAwMDA4MAorI2RlZmluZSBNQUxfSUVSX1BSRQkgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTUFMX0lFUl9QV0UJICAweDAwMDAwMDIwCisjZGVmaW5lIE1BTF9JRVJfREUJICAweDAwMDAwMDEwCisjZGVmaW5lIE1BTF9JRVJfT1RFCSAgMHgwMDAwMDAwNAorI2RlZmluZSBNQUxfSUVSX09FCSAgMHgwMDAwMDAwMgorI2RlZmluZSBNQUxfSUVSX1BFCSAgMHgwMDAwMDAwMQorI2Vsc2UKICNkZWZpbmUgTUFMX0lFUl9ERQkgIDB4MDAwMDAwMTAKICNkZWZpbmUgTUFMX0lFUl9ORQkgIDB4MDAwMDAwMDgKICNkZWZpbmUgTUFMX0lFUl9URQkgIDB4MDAwMDAwMDQKICNkZWZpbmUgTUFMX0lFUl9PUEJFCSAgMHgwMDAwMDAwMgogI2RlZmluZSBNQUxfSUVSX1BMQkUJICAweDAwMDAwMDAxCisjZW5kaWYKIAogLyogTUFMIENoYW5uZWwgQWN0aXZlIFNldCBhbmQgUmVzZXQgUmVnaXN0ZXJzICovCiAjZGVmaW5lIE1BTF9UWFJYX0NBU1IJKDB4ODAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlLzQ0MF9pMmMuaCBiL2luY2x1ZGUvNDQwX2kyYy5oCmluZGV4IDljOTBhOWUuLjBjMmJmMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvNDQwX2kyYy5oCisrKyBiL2luY2x1ZGUvNDQwX2kyYy5oCkBAIC0xLDcgKzEsOCBAQAogI2lmbmRlZiBfNDQwX2kyY19oXwogI2RlZmluZSBfNDQwX2kyY19oXwogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQogI2RlZmluZSAgICBJMkNfQkFTRV9BRERSIChDRkdfUEVSSVBIRVJBTF9CQVNFICsgMHgwMDAwMDcwMCkKICNlbHNlCiAjZGVmaW5lICAgIEkyQ19CQVNFX0FERFIgKENGR19QRVJJUEhFUkFMX0JBU0UgKyAweDAwMDAwNDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9fZXhwb3J0cy5oIGIvaW5jbHVkZS9fZXhwb3J0cy5oCmluZGV4IDYxZGNhYWYuLjJiOGVjM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvX2V4cG9ydHMuaAorKysgYi9pbmNsdWRlL19leHBvcnRzLmgKQEAgLTEyLDYgKzEyLDkgQEAKIEVYUE9SVF9GVU5DKGdldF90aW1lcikKIEVYUE9SVF9GVU5DKHZwcmludGYpCiBFWFBPUlRfRlVOQyhkb19yZXNldCkKK0VYUE9SVF9GVU5DKGdldGVudikKK0VYUE9SVF9GVU5DKHNldGVudikKK0VYUE9SVF9GVU5DKHNpbXBsZV9zdHJ0b3VsKQogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0kyQykKIEVYUE9SVF9GVU5DKGkyY193cml0ZSkKIEVYUE9SVF9GVU5DKGkyY19yZWFkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9haGNpLmggYi9pbmNsdWRlL2FoY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDcwMWUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9haGNpLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIDIwMDYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IEphc29uIEppbjxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KKyAqICAgICAgICAgWmhhbmcgV2VpPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworI2lmbmRlZiBfQUhDSV9IXworI2RlZmluZSBfQUhDSV9IXworCisjZGVmaW5lIEFIQ0lfUENJX0JBUgkJMHgyNAorI2RlZmluZSBBSENJX01BWF9TRwkJNTYgLyogaGFyZHdhcmUgbWF4IGlzIDY0SyAqLworI2RlZmluZSBBSENJX0NNRF9TTE9UX1NaCTMyCisjZGVmaW5lIEFIQ0lfUlhfRklTX1NaCQkyNTYKKyNkZWZpbmUgQUhDSV9DTURfVEJMX0hEUgkweDgwCisjZGVmaW5lIEFIQ0lfQ01EX1RCTF9DREIJMHg0MAorI2RlZmluZSBBSENJX0NNRF9UQkxfU1oJCUFIQ0lfQ01EX1RCTF9IRFIgKyAoQUhDSV9NQVhfU0cgKiAxNikKKyNkZWZpbmUgQUhDSV9QT1JUX1BSSVZfRE1BX1NaCUFIQ0lfQ01EX1NMT1RfU1ogKyBBSENJX0NNRF9UQkxfU1oJXAorCQkJCSsgQUhDSV9SWF9GSVNfU1oKKyNkZWZpbmUgQUhDSV9DTURfQVRBUEkJCSgxIDw8IDUpCisjZGVmaW5lIEFIQ0lfQ01EX1dSSVRFCQkoMSA8PCA2KQorI2RlZmluZSBBSENJX0NNRF9QUkVGRVRDSAkoMSA8PCA3KQorI2RlZmluZSBBSENJX0NNRF9SRVNFVAkJKDEgPDwgOCkKKyNkZWZpbmUgQUhDSV9DTURfQ0xSX0JVU1kJKDEgPDwgMTApCisKKyNkZWZpbmUgUlhfRklTX0QySF9SRUcJCTB4NDAJLyogb2Zmc2V0IG9mIEQySCBSZWdpc3RlciBGSVMgZGF0YSAqLworCisvKiBHbG9iYWwgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSE9TVF9DQVAJCTB4MDAgLyogaG9zdCBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgSE9TVF9DVEwJCTB4MDQgLyogZ2xvYmFsIGhvc3QgY29udHJvbCAqLworI2RlZmluZSBIT1NUX0lSUV9TVEFUCQkweDA4IC8qIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgSE9TVF9QT1JUU19JTVBMCQkweDBjIC8qIGJpdG1hcCBvZiBpbXBsZW1lbnRlZCBwb3J0cyAqLworI2RlZmluZSBIT1NUX1ZFUlNJT04JCTB4MTAgLyogQUhDSSBzcGVjLiB2ZXJzaW9uIGNvbXBsaWFuY3kgKi8KKworLyogSE9TVF9DVEwgYml0cyAqLworI2RlZmluZSBIT1NUX1JFU0VUCQkoMSA8PCAwKSAgLyogcmVzZXQgY29udHJvbGxlcjsgc2VsZi1jbGVhciAqLworI2RlZmluZSBIT1NUX0lSUV9FTgkJKDEgPDwgMSkgIC8qIGdsb2JhbCBJUlEgZW5hYmxlICovCisjZGVmaW5lIEhPU1RfQUhDSV9FTgkJKDEgPDwgMzEpIC8qIEFIQ0kgZW5hYmxlZCAqLworCisvKiBSZWdpc3RlcnMgZm9yIGVhY2ggU0FUQSBwb3J0ICovCisjZGVmaW5lIFBPUlRfTFNUX0FERFIJCTB4MDAgLyogY29tbWFuZCBsaXN0IERNQSBhZGRyICovCisjZGVmaW5lIFBPUlRfTFNUX0FERFJfSEkJMHgwNCAvKiBjb21tYW5kIGxpc3QgRE1BIGFkZHIgaGkgKi8KKyNkZWZpbmUgUE9SVF9GSVNfQUREUgkJMHgwOCAvKiBGSVMgcnggYnVmIGFkZHIgKi8KKyNkZWZpbmUgUE9SVF9GSVNfQUREUl9ISQkweDBjIC8qIEZJUyByeCBidWYgYWRkciBoaSAqLworI2RlZmluZSBQT1JUX0lSUV9TVEFUCQkweDEwIC8qIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgUE9SVF9JUlFfTUFTSwkJMHgxNCAvKiBpbnRlcnJ1cHQgZW5hYmxlL2Rpc2FibGUgbWFzayAqLworI2RlZmluZSBQT1JUX0NNRAkJMHgxOCAvKiBwb3J0IGNvbW1hbmQgKi8KKyNkZWZpbmUgUE9SVF9URkRBVEEJCTB4MjAgLyogdGFza2ZpbGUgZGF0YSAqLworI2RlZmluZSBQT1JUX1NJRwkJMHgyNCAvKiBkZXZpY2UgVEYgc2lnbmF0dXJlICovCisjZGVmaW5lIFBPUlRfQ01EX0lTU1VFCQkweDM4IC8qIGNvbW1hbmQgaXNzdWUgKi8KKyNkZWZpbmUgUE9SVF9TQ1IJCTB4MjggLyogU0FUQSBwaHkgcmVnaXN0ZXIgYmxvY2sgKi8KKyNkZWZpbmUgUE9SVF9TQ1JfU1RBVAkJMHgyOCAvKiBTQVRBIHBoeSByZWdpc3RlcjogU1N0YXR1cyAqLworI2RlZmluZSBQT1JUX1NDUl9DVEwJCTB4MmMgLyogU0FUQSBwaHkgcmVnaXN0ZXI6IFNDb250cm9sICovCisjZGVmaW5lIFBPUlRfU0NSX0VSUgkJMHgzMCAvKiBTQVRBIHBoeSByZWdpc3RlcjogU0Vycm9yICovCisjZGVmaW5lIFBPUlRfU0NSX0FDVAkJMHgzNCAvKiBTQVRBIHBoeSByZWdpc3RlcjogU0FjdGl2ZSAqLworCisvKiBQT1JUX0lSUV97U1RBVCxNQVNLfSBiaXRzICovCisjZGVmaW5lIFBPUlRfSVJRX0NPTERfUFJFUwkoMSA8PCAzMSkgLyogY29sZCBwcmVzZW5jZSBkZXRlY3QgKi8KKyNkZWZpbmUgUE9SVF9JUlFfVEZfRVJSCQkoMSA8PCAzMCkgLyogdGFzayBmaWxlIGVycm9yICovCisjZGVmaW5lIFBPUlRfSVJRX0hCVVNfRVJSCSgxIDw8IDI5KSAvKiBob3N0IGJ1cyBmYXRhbCBlcnJvciAqLworI2RlZmluZSBQT1JUX0lSUV9IQlVTX0RBVEFfRVJSCSgxIDw8IDI4KSAvKiBob3N0IGJ1cyBkYXRhIGVycm9yICovCisjZGVmaW5lIFBPUlRfSVJRX0lGX0VSUgkJKDEgPDwgMjcpIC8qIGludGVyZmFjZSBmYXRhbCBlcnJvciAqLworI2RlZmluZSBQT1JUX0lSUV9JRl9OT05GQVRBTAkoMSA8PCAyNikgLyogaW50ZXJmYWNlIG5vbi1mYXRhbCBlcnJvciAqLworI2RlZmluZSBQT1JUX0lSUV9PVkVSRkxPVwkoMSA8PCAyNCkgLyogeGZlciBleGhhdXN0ZWQgYXZhaWxhYmxlIFMvRyAqLworI2RlZmluZSBQT1JUX0lSUV9CQURfUE1QCSgxIDw8IDIzKSAvKiBpbmNvcnJlY3QgcG9ydCBtdWx0aXBsaWVyICovCisKKyNkZWZpbmUgUE9SVF9JUlFfUEhZUkRZCQkoMSA8PCAyMikgLyogUGh5UmR5IGNoYW5nZWQgKi8KKyNkZWZpbmUgUE9SVF9JUlFfREVWX0lMQ0sJKDEgPDwgNykgLyogZGV2aWNlIGludGVybG9jayAqLworI2RlZmluZSBQT1JUX0lSUV9DT05ORUNUCSgxIDw8IDYpIC8qIHBvcnQgY29ubmVjdCBjaGFuZ2Ugc3RhdHVzICovCisjZGVmaW5lIFBPUlRfSVJRX1NHX0RPTkUJKDEgPDwgNSkgLyogZGVzY3JpcHRvciBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgUE9SVF9JUlFfVU5LX0ZJUwkoMSA8PCA0KSAvKiB1bmtub3duIEZJUyByeCdkICovCisjZGVmaW5lIFBPUlRfSVJRX1NEQl9GSVMJKDEgPDwgMykgLyogU2V0IERldmljZSBCaXRzIEZJUyByeCdkICovCisjZGVmaW5lIFBPUlRfSVJRX0RNQVNfRklTCSgxIDw8IDIpIC8qIERNQSBTZXR1cCBGSVMgcngnZCAqLworI2RlZmluZSBQT1JUX0lSUV9QSU9TX0ZJUwkoMSA8PCAxKSAvKiBQSU8gU2V0dXAgRklTIHJ4J2QgKi8KKyNkZWZpbmUgUE9SVF9JUlFfRDJIX1JFR19GSVMJKDEgPDwgMCkgLyogRDJIIFJlZ2lzdGVyIEZJUyByeCdkICovCisKKyNkZWZpbmUgUE9SVF9JUlFfRkFUQUwJCVBPUlRfSVJRX1RGX0VSUiB8IFBPUlRfSVJRX0hCVVNfRVJSIAlcCisJCQkJfCBQT1JUX0lSUV9IQlVTX0RBVEFfRVJSIHwgUE9SVF9JUlFfSUZfRVJSCisKKyNkZWZpbmUgREVGX1BPUlRfSVJRCQlQT1JUX0lSUV9GQVRBTCB8IFBPUlRfSVJRX1BIWVJEWSAJXAorCQkJCXwgUE9SVF9JUlFfQ09OTkVDVCB8IFBPUlRfSVJRX1NHX0RPTkUgCVwKKwkJCQl8IFBPUlRfSVJRX1VOS19GSVMgfCBQT1JUX0lSUV9TREJfRklTIAlcCisJCQkJfCBQT1JUX0lSUV9ETUFTX0ZJUyB8IFBPUlRfSVJRX1BJT1NfRklTCVwKKwkJCQl8IFBPUlRfSVJRX0QySF9SRUdfRklTCisKKy8qIFBPUlRfQ01EIGJpdHMgKi8KKyNkZWZpbmUgUE9SVF9DTURfQVRBUEkJCSgxIDw8IDI0KSAvKiBEZXZpY2UgaXMgQVRBUEkgKi8KKyNkZWZpbmUgUE9SVF9DTURfTElTVF9PTgkoMSA8PCAxNSkgLyogY21kIGxpc3QgRE1BIGVuZ2luZSBydW5uaW5nICovCisjZGVmaW5lIFBPUlRfQ01EX0ZJU19PTgkJKDEgPDwgMTQpIC8qIEZJUyBETUEgZW5naW5lIHJ1bm5pbmcgKi8KKyNkZWZpbmUgUE9SVF9DTURfRklTX1JYCQkoMSA8PCA0KSAvKiBFbmFibGUgRklTIHJlY2VpdmUgRE1BIGVuZ2luZSAqLworI2RlZmluZSBQT1JUX0NNRF9DTE8JCSgxIDw8IDMpIC8qIENvbW1hbmQgbGlzdCBvdmVycmlkZSAqLworI2RlZmluZSBQT1JUX0NNRF9QT1dFUl9PTgkoMSA8PCAyKSAvKiBQb3dlciB1cCBkZXZpY2UgKi8KKyNkZWZpbmUgUE9SVF9DTURfU1BJTl9VUAkoMSA8PCAxKSAvKiBTcGluIHVwIGRldmljZSAqLworI2RlZmluZSBQT1JUX0NNRF9TVEFSVAkJKDEgPDwgMCkgLyogRW5hYmxlIHBvcnQgRE1BIGVuZ2luZSAqLworCisjZGVmaW5lIFBPUlRfQ01EX0lDQ19BQ1RJVkUJKDB4MSA8PCAyOCkgLyogUHV0IGkvZiBpbiBhY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgUE9SVF9DTURfSUNDX1BBUlRJQUwJKDB4MiA8PCAyOCkgLyogUHV0IGkvZiBpbiBwYXJ0aWFsIHN0YXRlICovCisjZGVmaW5lIFBPUlRfQ01EX0lDQ19TTFVNQkVSCSgweDYgPDwgMjgpIC8qIFB1dCBpL2YgaW4gc2x1bWJlciBzdGF0ZSAqLworCisjZGVmaW5lIEFIQ0lfTUFYX1BPUlRTCQkzMgorCisvKiBTRVRGRUFUVVJFUyBzdHVmZiAqLworI2RlZmluZSBTRVRGRUFUVVJFU19YRkVSCTB4MDMKKyNkZWZpbmUgWEZFUl9VRE1BXzcJCTB4NDcKKyNkZWZpbmUgWEZFUl9VRE1BXzYJCTB4NDYKKyNkZWZpbmUgWEZFUl9VRE1BXzUJCTB4NDUKKyNkZWZpbmUgWEZFUl9VRE1BXzQJCTB4NDQKKyNkZWZpbmUgWEZFUl9VRE1BXzMJCTB4NDMKKyNkZWZpbmUgWEZFUl9VRE1BXzIJCTB4NDIKKyNkZWZpbmUgWEZFUl9VRE1BXzEJCTB4NDEKKyNkZWZpbmUgWEZFUl9VRE1BXzAJCTB4NDAKKyNkZWZpbmUgWEZFUl9NV19ETUFfMgkJMHgyMgorI2RlZmluZSBYRkVSX01XX0RNQV8xCQkweDIxCisjZGVmaW5lIFhGRVJfTVdfRE1BXzAJCTB4MjAKKyNkZWZpbmUgWEZFUl9TV19ETUFfMgkJMHgxMgorI2RlZmluZSBYRkVSX1NXX0RNQV8xCQkweDExCisjZGVmaW5lIFhGRVJfU1dfRE1BXzAJCTB4MTAKKyNkZWZpbmUgWEZFUl9QSU9fNAkJMHgwQworI2RlZmluZSBYRkVSX1BJT18zCQkweDBCCisjZGVmaW5lIFhGRVJfUElPXzIJCTB4MEEKKyNkZWZpbmUgWEZFUl9QSU9fMQkJMHgwOQorI2RlZmluZSBYRkVSX1BJT18wCQkweDA4CisjZGVmaW5lIFhGRVJfUElPX1NMT1cJCTB4MDAKKworI2RlZmluZSBBVEFfRkxBR19TQVRBCQkoMSA8PCAzKQorI2RlZmluZSBBVEFfRkxBR19OT19MRUdBQ1kJKDEgPDwgNCkgLyogbm8gbGVnYWN5IG1vZGUgY2hlY2sgKi8KKyNkZWZpbmUgQVRBX0ZMQUdfTU1JTwkJKDEgPDwgNikgLyogdXNlIE1NSU8sIG5vdCBQSU8gKi8KKyNkZWZpbmUgQVRBX0ZMQUdfU0FUQV9SRVNFVAkoMSA8PCA3KSAvKiAob2Jzb2xldGUpIHVzZSBDT01SRVNFVCAqLworI2RlZmluZSBBVEFfRkxBR19QSU9fRE1BCSgxIDw8IDgpIC8qIFBJTyBjbWRzIHZpYSBETUEgKi8KKyNkZWZpbmUgQVRBX0ZMQUdfTk9fQVRBUEkJKDEgPDwgMTEpIC8qIE5vIEFUQVBJIHN1cHBvcnQgKi8KKworc3RydWN0IGFoY2lfY21kX2hkciB7CisJdTMyCW9wdHM7CisJdTMyCXN0YXR1czsKKwl1MzIJdGJsX2FkZHI7CisJdTMyCXRibF9hZGRyX2hpOworCXUzMglyZXNlcnZlZFs0XTsKK307CisKK3N0cnVjdCBhaGNpX3NnIHsKKwl1MzIJYWRkcjsKKwl1MzIJYWRkcl9oaTsKKwl1MzIJcmVzZXJ2ZWQ7CisJdTMyCWZsYWdzX3NpemU7Cit9OworCitzdHJ1Y3QgYWhjaV9pb3BvcnRzIHsKKwl1MzIJY21kX2FkZHI7CisJdTMyCXNjcl9hZGRyOworCXUzMglwb3J0X21taW87CisJc3RydWN0IGFoY2lfY21kX2hkcgkqY21kX3Nsb3Q7CisJc3RydWN0IGFoY2lfc2cJCSpjbWRfdGJsX3NnOworCXUzMgljbWRfdGJsOworCXUzMglyeF9maXM7Cit9OworCitzdHJ1Y3QgYWhjaV9wcm9iZV9lbnQgeworCXBjaV9kZXZfdCAJZGV2OworCXN0cnVjdCBhaGNpX2lvcG9ydHMJcG9ydFtBSENJX01BWF9QT1JUU107CisJdTMyCW5fcG9ydHM7CisJdTMyCWhhcmRfcG9ydF9ubzsKKwl1MzIJaG9zdF9mbGFnczsKKwl1MzIJaG9zdF9zZXRfZmxhZ3M7CisJdTMyCW1taW9fYmFzZTsKKwl1MzIgICAgIHBpb19tYXNrOworCXUzMgl1ZG1hX21hc2s7CisJdTMyCWZsYWdzOworCXUzMgljYXA7CS8qIGNhY2hlIG9mIEhPU1RfQ0FQIHJlZ2lzdGVyICovCisJdTMyCXBvcnRfbWFwOyAvKiBjYWNoZSBvZiBIT1NUX1BPUlRTX0lNUEwgcmVnICovCisJdTMyCWxpbmtfcG9ydF9tYXA7IC8qbGlua3VwIHBvcnQgbWFwKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2ltbWFwXzg2eHguaCBiL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84Nnh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxZjBmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84Nnh4LmgKQEAgLTAsMCArMSwxMzY0IEBACisvKgorICogTVBDODZ4eCBJbnRlcm5hbCBNZW1vcnkgTWFwCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKKyAqIEplZmYgQnJvd24gKEplZmZyZXlAZnJlZXNjYWxlLmNvbSkKKyAqIFNyaWthbnRoIFNyaW5pdmFzYW4gKHNyaWthbnRoLnNyaW5pdmFzYW5AZnJlZXNjYWxlLmNvbSkKKyAqCisgKi8KKworI2lmbmRlZiBfX0lNTUFQXzg2eHhfXworI2RlZmluZSBfX0lNTUFQXzg2eHhfXworCisKKy8qIExvY2FsLUFjY2VzcyBSZWdpc3RlcnMgYW5kIE1DTSBSZWdpc3RlcnMoMHgwMDAwLTB4MjAwMCkgKi8KK3R5cGVkZWYgc3RydWN0IGNjc3JfbG9jYWxfbWNtIHsKKwl1aW50CWNjc3JiYXI7CS8qIDB4MCAtIENvbnRyb2wgQ29uZmlndXJhdGlvbiBTdGF0dXMgUmVnaXN0ZXJzIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworCWNoYXIJcmVzMVs0XTsKKwl1aW50CWFsdGNiYXI7CS8qIDB4OCAtIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworCWNoYXIJcmVzMls0XTsKKwl1aW50CWFsdGNhcjsJCS8qIDB4MTAgLSBBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiBBdHRyaWJ1dGUgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczNbMTJdOworCXVpbnQJYnB0cjsJCS8qIDB4MjAgLSBCb290IFBhZ2UgVHJhbnNsYXRpb24gUmVnaXN0ZXIgKi8KKwljaGFyCXJlczRbMzA0NF07CisJdWludAlsYXdiYXIwOwkvKiAweGMwOCAtIExvY2FsIEFjY2VzcyBXaW5kb3cgMCBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczVbNF07CisJdWludAlsYXdhcjA7CQkvKiAweGMxMCAtIExvY2FsIEFjY2VzcyBXaW5kb3cgMCBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCisJY2hhcglyZXM2WzIwXTsKKwl1aW50CWxhd2JhcjE7CS8qIDB4YzI4IC0gTG9jYWwgQWNjZXNzIFdpbmRvdyAxIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworCWNoYXIJcmVzN1s0XTsKKwl1aW50CWxhd2FyMTsJCS8qIDB4YzMwIC0gTG9jYWwgQWNjZXNzIFdpbmRvdyAxIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczhbMjBdOworCXVpbnQJbGF3YmFyMjsJLyogMHhjNDggLSBMb2NhbCBBY2Nlc3MgV2luZG93IDIgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXM5WzRdOworCXVpbnQJbGF3YXIyOwkJLyogMHhjNTAgLSBMb2NhbCBBY2Nlc3MgV2luZG93IDIgQXR0cmlidXRlcyBSZWdpc3RlciAqLworCWNoYXIJcmVzMTBbMjBdOworCXVpbnQJbGF3YmFyMzsJLyogMHhjNjggLSBMb2NhbCBBY2Nlc3MgV2luZG93IDMgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxMVs0XTsKKwl1aW50CWxhd2FyMzsJCS8qIDB4YzcwIC0gTG9jYWwgQWNjZXNzIFdpbmRvdyAzIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczEyWzIwXTsKKwl1aW50CWxhd2JhcjQ7CS8qIDB4Yzg4IC0gTG9jYWwgQWNjZXNzIFdpbmRvdyA0IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworCWNoYXIJcmVzMTNbNF07CisJdWludAlsYXdhcjQ7CQkvKiAweGM5MCAtIExvY2FsIEFjY2VzcyBXaW5kb3cgNCBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxNFsyMF07CisJdWludAlsYXdiYXI1OwkvKiAweGNhOCAtIExvY2FsIEFjY2VzcyBXaW5kb3cgNSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczE1WzRdOworCXVpbnQJbGF3YXI1OwkJLyogMHhjYjAgLSBMb2NhbCBBY2Nlc3MgV2luZG93IDUgQXR0cmlidXRlcyBSZWdpc3RlciAqLworCWNoYXIJcmVzMTZbMjBdOworCXVpbnQJbGF3YmFyNjsJLyogMHhjYzggLSBMb2NhbCBBY2Nlc3MgV2luZG93IDYgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxN1s0XTsKKwl1aW50CWxhd2FyNjsJCS8qIDB4Y2QwIC0gTG9jYWwgQWNjZXNzIFdpbmRvdyA2IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczE4WzIwXTsKKwl1aW50CWxhd2Jhcjc7CS8qIDB4Y2U4IC0gTG9jYWwgQWNjZXNzIFdpbmRvdyA3IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworCWNoYXIJcmVzMTlbNF07CisJdWludAlsYXdhcjc7CQkvKiAweGNmMCAtIExvY2FsIEFjY2VzcyBXaW5kb3cgNyBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCisJY2hhcglyZXMyMFsyMF07CisJdWludAlsYXdiYXI4OwkvKiAweGQwOCAtIExvY2FsIEFjY2VzcyBXaW5kb3cgOCBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczIxWzRdOworCXVpbnQJbGF3YXI4OwkJLyogMHhkMTAgLSBMb2NhbCBBY2Nlc3MgV2luZG93IDggQXR0cmlidXRlcyBSZWdpc3RlciAqLworCWNoYXIJcmVzMjJbMjBdOworCXVpbnQJbGF3YmFyOTsJLyogMHhkMjggLSBMb2NhbCBBY2Nlc3MgV2luZG93IDkgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXMyM1s0XTsKKwl1aW50CWxhd2FyOTsJCS8qIDB4ZDMwIC0gTG9jYWwgQWNjZXNzIFdpbmRvdyA5IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8gIAorCWNoYXIJcmVzMjRbNzE2XTsKKwl1aW50CWFiY3I7CQkvKiAweDEwMDAgLSBNQ00gQ0NCIEFkZHJlc3MgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCWNoYXIJcmVzMjVbNF07CisgICAgICAgIHVpbnQgICAgZGJjcjsgICAgICAgICAgIC8qIDB4MTAwOCAtIE1DTSBNUFggZGF0YSBidXMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLyAgIAorCWNoYXIJcmVzMjZbNF07ICAKKyAgICAgICAgdWludAlwY3I7CQkvKiAweDEwMTAgLSBNQ00gQ0NCIFBvcnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCWNoYXIJcmVzMjdbNDRdOyAgCQorICAgICAgICB1aW50CWhwbXIwOwkJLyogMHgxMDQwIC0gTUNNIEhQTSBUaHJlc2hvbGQgQ291bnQgUmVnaXN0ZXIgMCAqLworICAgICAgICB1aW50CWhwbXIxOwkJLyogMHgxMDQ0IC0gTUNNIEhQTSBUaHJlc2hvbGQgQ291bnQgUmVnaXN0ZXIgMSAqLworICAgICAgICB1aW50CWhwbXIyOwkJLyogMHgxMDQ4IC0gTUNNIEhQTSBUaHJlc2hvbGQgQ291bnQgUmVnaXN0ZXIgMiAqLyAJCisgICAgICAgIHVpbnQJaHBtcjM7CQkvKiAweDEwNGMgLSBNQ00gSFBNIFRocmVzaG9sZCBDb3VudCBSZWdpc3RlciAzICovCisJY2hhcglyZXMyOFsxNl07ICAJCisgICAgICAgIHVpbnQJaHBtcjQ7CQkvKiAweDEwNjAgLSBNQ00gSFBNIFRocmVzaG9sZCBDb3VudCBSZWdpc3RlciA0ICovCisgICAgICAgIHVpbnQJaHBtcjU7CQkvKiAweDEwNjQgLSBNQ00gSFBNIFRocmVzaG9sZCBDb3VudCBSZWdpc3RlciA1ICovCisgICAgICAgIHVpbnQJaHBtY2NyOwkJLyogMHgxMDY4IC0gTUNNIEhQTSBDeWNsZSBDb3VudCBSZWdpc3RlciAqLworICAgICAgICBjaGFyCXJlczI5WzM0NzZdOworCXVpbnQJZWRyOwkJLyogMHgxZTAwIC0gTUNNIEVycm9yIERldGVjdCBSZWdpc3RlciAqLworCWNoYXIJcmVzMzBbNF07CisJdWludAllZXI7CQkvKiAweDFlMDggLSBNQ00gRXJyb3IgRW5hYmxlIFJlZ2lzdGVyICovCisJdWludAllYXRyOwkJLyogMHgxZTBjIC0gTUNNIEVycm9yIEF0dHJpYnV0ZXMgQ2FwdHVyZSBSZWdpc3RlciAqLworCXVpbnQJZWxhZHI7CQkvKiAweDFlMTAgLSBNQ00gRXJyb3IgTG93IEFkZHJlc3MgQ2FwdHVyZSBSZWdpc3RlciAqLworICAgICAgICB1aW50CWVoYWRyOwkJLyogMHgxZTE0IC0gTUNNIEVycm9yIEhpZ2ggQWRkcmVzcyBDYXB0dXJlIFJlZ2lzdGVyICovCisJY2hhcglyZXMzMVs0ODhdOworfSBjY3NyX2xvY2FsX21jbV90OworCisvKiBERFIgbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzKDB4MjAwMC0weDMwMDApIGFuZCAoMHg2MDAwLTB4NzAwMCkgKi8KKwordHlwZWRlZiBzdHJ1Y3QgY2Nzcl9kZHIgeworCXVpbnQJY3MwX2JuZHM7CQkvKiAweDIwMDAgLSBERFIgQ2hpcCBTZWxlY3QgMCBNZW1vcnkgQm91bmRzICovCisJY2hhcglyZXMxWzRdOworCXVpbnQJY3MxX2JuZHM7CQkvKiAweDIwMDggLSBERFIgQ2hpcCBTZWxlY3QgMSBNZW1vcnkgQm91bmRzICovCisJY2hhcglyZXMyWzRdOworCXVpbnQJY3MyX2JuZHM7CQkvKiAweDIwMTAgLSBERFIgQ2hpcCBTZWxlY3QgMiBNZW1vcnkgQm91bmRzICovCisJY2hhcglyZXMzWzRdOworCXVpbnQJY3MzX2JuZHM7CQkvKiAweDIwMTggLSBERFIgQ2hpcCBTZWxlY3QgMyBNZW1vcnkgQm91bmRzICovCisJY2hhcglyZXM0WzRdOworCXVpbnQJY3M0X2JuZHM7CQkvKiAweDIwMjAgLSBERFIgQ2hpcCBTZWxlY3QgNCBNZW1vcnkgQm91bmRzICovCisJY2hhcglyZXM1WzRdOworCXVpbnQJY3M1X2JuZHM7CQkvKiAweDIwMjggLSBERFIgQ2hpcCBTZWxlY3QgNSBNZW1vcnkgQm91bmRzICovCisJY2hhcglyZXM2Wzg0XTsKKwl1aW50CWNzMF9jb25maWc7CQkvKiAweDIwODAgLSBERFIgQ2hpcCBTZWxlY3QgQ29uZmlndXJhdGlvbiAqLworCXVpbnQJY3MxX2NvbmZpZzsJCS8qIDB4MjA4NCAtIEREUiBDaGlwIFNlbGVjdCBDb25maWd1cmF0aW9uICovCisJdWludAljczJfY29uZmlnOwkJLyogMHgyMDg4IC0gRERSIENoaXAgU2VsZWN0IENvbmZpZ3VyYXRpb24gKi8KKwl1aW50CWNzM19jb25maWc7CQkvKiAweDIwOGMgLSBERFIgQ2hpcCBTZWxlY3QgQ29uZmlndXJhdGlvbiAqLworCXVpbnQJY3M0X2NvbmZpZzsJCS8qIDB4MjA5MCAtIEREUiBDaGlwIFNlbGVjdCBDb25maWd1cmF0aW9uICovCisJdWludAljczVfY29uZmlnOwkJLyogMHgyMDk0IC0gRERSIENoaXAgU2VsZWN0IENvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgY2hhcglyZXM3WzEwNF07CisgICAgICAgIHVpbnQgICAgZXh0X3JlZnJlYzsgICAgICAgICAgICAgLyogMHgyMTAwIC0gRERSIFNEUkFNIGV4dGVuZGVkIHJlZnJlc2ggcmVjb3ZlcnkgKi8KKwl1aW50CXRpbWluZ19jZmdfMDsJCS8qIDB4MjEwNCAtIEREUiBTRFJBTSBUaW1pbmcgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisJdWludAl0aW1pbmdfY2ZnXzE7CQkvKiAweDIxMDggLSBERFIgU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworCXVpbnQJdGltaW5nX2NmZ18yOwkJLyogMHgyMTBjIC0gRERSIFNEUkFNIFRpbWluZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKwl1aW50CXNkcmFtX2NmZ18xOwkJLyogMHgyMTEwIC0gRERSIFNEUkFNIENvbnRyb2wgQ29uZmlndXJhdGlvbiAxICovCisgICAgICAgIHVpbnQgICAgc2RyYW1fY2ZnXzI7ICAgICAgICAgICAgLyogMHgyMTE0IC0gRERSIFNEUkFNIENvbnRyb2wgQ29uZmlndXJhdGlvbiAyICovCisJdWludAlzZHJhbV9tb2RlXzE7CQkvKiAweDIxMTggLSBERFIgU0RSQU0gTW9kZSBDb25maWd1cmF0aW9uIDEgKi8KKyAgICAgICAgdWludCAgICBzZHJhbV9tb2RlXzI7CQkvKiAweDIxMWMgLSBERFIgU0RSQU0gTW9kZSBDb25maWd1cmF0aW9uIDIgKi8KKyAgICAgICAgdWludCAgICBzZHJhbV9tb2RlX2NudGw7ICAgICAgICAvKiAweDIxMjAgLSBERFIgU0RSQU0gTW9kZSBDb250cm9sICovCisJdWludAlzZHJhbV9pbnRlcnZhbDsJCS8qIDB4MjEyNCAtIEREUiBTRFJBTSBJbnRlcnZhbCBDb25maWd1cmF0aW9uICovCisgICAgICAgIHVpbnQgICAgc2RyYW1fZGF0YV9pbml0OyAJLyogMHgyMTI4IC0gRERSIFNEUkFNIERhdGEgSW5pdGlhbGl6YXRpb24gKi8KKwljaGFyCXJlczhbNF07CisJdWludAlzZHJhbV9jbGtfY250bDsJCS8qIDB4MjEzMCAtIEREUiBTRFJBTSBDbG9jayBDb250cm9sICovCisgICAgICAgIGNoYXIgICAgcmVzOVsxMl07CisgICAgICAgIHVpbnQgICAgc2RyYW1fb2NkX2NudGw7CQkvKiAweDIxNDAgLSBERFIgU0RSQU0gT0NEIENvbnRyb2wgKi8KKyAgICAgICAgdWludCAgICBzZHJhbV9vY2Rfc3RhdHVzOwkvKiAweDIxNDQgLSBERFIgU0RSQU0gT0NEIFN0YXR1cyAqLworICAgICAgICB1aW50ICAgIGluaXRfYWRkcjsJCS8qIDB4MjE0OCAtIEREUiB0cmFpbmluZyBpbml0aWFsemF0aW9uIGFkZHJlc3MgKi8KKyAgICAgICAgdWludCAgICBpbml0X2FkZHJfZXh0OwkJLyogMHgyMTRDIC0gRERSIHRyYWluaW5nIGluaXRpYWx6YXRpb24gZXh0ZW5kZWQgYWRkcmVzcyAqLworICAgICAgICBjaGFyICAgIHJlczEwWzI3MjhdOworICAgICAgICB1aW50ICAgIGlwX3JldjE7CQkvKiAweDJCRjggLSBERFIgSVAgQmxvY2sgUmV2aXNpb24gMSAqLworICAgICAgICB1aW50ICAgIGlwX3JldjI7CQkvKiAweDJCRkMgLSBERFIgSVAgQmxvY2sgUmV2aXNpb24gMiAqLworCWNoYXIJcmVzMTFbNTEyXTsKKwl1aW50CWRhdGFfZXJyX2luamVjdF9oaTsJLyogMHgyZTAwIC0gRERSIE1lbW9yeSBEYXRhIFBhdGggRXJyb3IgSW5qZWN0aW9uIE1hc2sgSGlnaCAqLworCXVpbnQJZGF0YV9lcnJfaW5qZWN0X2xvOwkvKiAweDJlMDQgLSBERFIgTWVtb3J5IERhdGEgUGF0aCBFcnJvciBJbmplY3Rpb24gTWFzayBMb3cgKi8KKwl1aW50CWVjY19lcnJfaW5qZWN0OwkJLyogMHgyZTA4IC0gRERSIE1lbW9yeSBEYXRhIFBhdGggRXJyb3IgSW5qZWN0aW9uIE1hc2sgRUNDICovCisJY2hhcglyZXMxMlsyMF07CisJdWludAljYXB0dXJlX2RhdGFfaGk7CS8qIDB4MmUyMCAtIEREUiBNZW1vcnkgRGF0YSBQYXRoIFJlYWQgQ2FwdHVyZSBIaWdoICovCisJdWludAljYXB0dXJlX2RhdGFfbG87CS8qIDB4MmUyNCAtIEREUiBNZW1vcnkgRGF0YSBQYXRoIFJlYWQgQ2FwdHVyZSBMb3cgKi8KKwl1aW50CWNhcHR1cmVfZWNjOwkJLyogMHgyZTI4IC0gRERSIE1lbW9yeSBEYXRhIFBhdGggUmVhZCBDYXB0dXJlIEVDQyAqLworCWNoYXIJcmVzMTNbMjBdOworCXVpbnQJZXJyX2RldGVjdDsJCS8qIDB4MmU0MCAtIEREUiBNZW1vcnkgRXJyb3IgRGV0ZWN0ICovCisJdWludAllcnJfZGlzYWJsZTsJCS8qIDB4MmU0NCAtIEREUiBNZW1vcnkgRXJyb3IgRGlzYWJsZSAqLworCXVpbnQJZXJyX2ludF9lbjsJCS8qIDB4MmU0OCAtIEREUiBNZW1vcnkgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworCXVpbnQJY2FwdHVyZV9hdHRyaWJ1dGVzOwkvKiAweDJlNGMgLSBERFIgTWVtb3J5IEVycm9yIEF0dHJpYnV0ZXMgQ2FwdHVyZSAqLworCXVpbnQJY2FwdHVyZV9hZGRyZXNzOwkvKiAweDJlNTAgLSBERFIgTWVtb3J5IEVycm9yIEFkZHJlc3MgQ2FwdHVyZSAqLworICAgICAgICB1aW50CWNhcHR1cmVfZXh0X2FkZHJlc3M7CS8qIDB4MmU1NCAtIEREUiBNZW1vcnkgRXJyb3IgRXh0ZW5kZWQgQWRkcmVzcyBDYXB0dXJlICovCisJdWludAllcnJfc2JlOwkJLyogMHgyZTU4IC0gRERSIE1lbW9yeSBTaW5nbGUtQml0IEVDQyBFcnJvciBNYW5hZ2VtZW50ICovCisJY2hhcglyZXMxNFsxNjRdOworCXVpbnQJZGVidWdfMTsJCS8qIDB4MmYwMCAqLworCXVpbnQJZGVidWdfMjsKKwl1aW50CWRlYnVnXzM7CisJdWludAlkZWJ1Z180OworCXVpbnQJZGVidWdfNTsKKwljaGFyCXJlczE1WzIzNl07Cit9IGNjc3JfZGRyX3Q7CisKKworLyogRGF1bCBJMkMgUmVnaXN0ZXJzKDB4MzAwMC0weDQwMDApICovCisKK3R5cGVkZWYgc3RydWN0IGNjc3JfaTJjIHsKKwl1X2NoYXIJaTJjYWRyMTsJLyogMHgzMDAwIC0gSTJDIDEgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBNUEM4Nnh4X0kyQ0FEUl9NQVNLCTB4RkUKKwljaGFyCXJlczFbM107CisJdV9jaGFyCWkyY2ZkcjE7CS8qIDB4MzAwNCAtIEkyQyAxIEZyZXF1ZW5jeSBEaXZpZGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1QQzg2eHhfSTJDRkRSX01BU0sJMHgzRgorCWNoYXIJcmVzMlszXTsKKwl1X2NoYXIJaTJjY3IxOwkJLyogMHgzMDA4IC0gSTJDIDEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNUEM4Nnh4X0kyQ0NSX01FTgkweDgwCisjZGVmaW5lIE1QQzg2eHhfSTJDQ1JfTUlFTgkweDQwCisjZGVmaW5lIE1QQzg2eHhfSTJDQ1JfTVNUQSAgICAgIDB4MjAKKyNkZWZpbmUgTVBDODZ4eF9JMkNDUl9NVFggICAgICAgMHgxMAorI2RlZmluZSBNUEM4Nnh4X0kyQ0NSX1RYQUsgICAgICAweDA4CisjZGVmaW5lIE1QQzg2eHhfSTJDQ1JfUlNUQSAgICAgIDB4MDQKKyNkZWZpbmUgTVBDODZ4eF9JMkNDUl9CQ1NUICAgICAgMHgwMQorCWNoYXIJcmVzM1szXTsKKwl1X2NoYXIJaTJjc3IxOwkJLyogMHgzMDBjIC0gSTJDIDEgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1QQzg2eHhfSTJDU1JfTUNGCTB4ODAKKyNkZWZpbmUgTVBDODZ4eF9JMkNTUl9NQUFTICAgICAgMHg0MAorI2RlZmluZSBNUEM4Nnh4X0kyQ1NSX01CQiAgICAgICAweDIwCisjZGVmaW5lIE1QQzg2eHhfSTJDU1JfTUFMICAgICAgIDB4MTAKKyNkZWZpbmUgTVBDODZ4eF9JMkNTUl9CQ1NUTSAgICAgMHgwOAorI2RlZmluZSBNUEM4Nnh4X0kyQ1NSX1NSVyAgICAgICAweDA0CisjZGVmaW5lIE1QQzg2eHhfSTJDU1JfTUlGICAgICAgIDB4MDIKKyNkZWZpbmUgTVBDODZ4eF9JMkNTUl9SWEFLICAgICAgMHgwMQorCWNoYXIJcmVzNFszXTsKKwl1X2NoYXIJaTJjZHIxOwkJLyogMHgzMDEwIC0gSTJDIDEgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBNUEM4Nnh4X0kyQ0RSX0RBVEEJMHhGRgorCWNoYXIJcmVzNVszXTsKKwl1X2NoYXIJaTJjZGZzcnIxOwkvKiAweDMwMTQgLSBJMkMgMSBEaWdpdGFsIEZpbHRlcmluZyBTYW1wbGluZyBSYXRlIFJlZ2lzdGVyICovCisjZGVmaW5lIE1QQzg2eHhfSTJDREZTUlIJMHgzRgorCWNoYXIJcmVzNlsyMzVdOworCisJdV9jaGFyCWkyY2FkcjI7CS8qIDB4MzEwMCAtIEkyQyAyIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczdbM107CisJdV9jaGFyCWkyY2ZkcjI7CS8qIDB4MzEwNCAtIEkyQyAyIEZyZXF1ZW5jeSBEaXZpZGVyIFJlZ2lzdGVyICovCisJY2hhcglyZXM4WzNdOworCXVfY2hhcglpMmNjcjI7CQkvKiAweDMxMDggLSBJMkMgMiBDb250cm9sIFJlZ2lzdGVyICovCisJY2hhcglyZXM5WzNdOworCXVfY2hhcglpMmNzcjI7CQkvKiAweDMxMGMgLSBJMkMgMiBTdGF0dXMgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczEwWzNdOworCXVfY2hhcglpMmNkcjI7CQkvKiAweDMxMTAgLSBJMkMgMiBEYXRhIFJlZ2lzdGVyICovCisJY2hhcglyZXMxMVszXTsKKwl1X2NoYXIJaTJjZGZzcnIyOwkvKiAweDMxMTQgLSBJMkMgMiBEaWdpdGFsIEZpbHRlcmluZyBTYW1wbGluZyBSYXRlIFJlZ2lzdGVyICovCisJY2hhcglyZXMxMlszODE5XTsKK30gY2Nzcl9pMmNfdDsKKworLyogRFVBUlQgUmVnaXN0ZXJzKDB4NDAwMC0weDUwMDApICovCit0eXBlZGVmIHN0cnVjdCBjY3NyX2R1YXJ0IHsKKwljaGFyCXJlczFbMTI4MF07CisJdV9jaGFyCXVyYnIxX3V0aHIxX3VkbGIxOy8qIDB4NDUwMCAtIFVSQlIxLCBVVEhSMSwgVURMQjEgd2l0aCB0aGUgc2FtZSBhZGRyZXNzIG9mZnNldCBvZiAweDA0NTAwICovCisJdV9jaGFyCXVpZXIxX3VkbWIxOwkvKiAweDQ1MDEgLSBVSUVSMSwgVURNQjEgd2l0aCB0aGUgc2FtZSBhZGRyZXNzIG9mZnNldCBvZiAweDA0NTAxICovCisJdV9jaGFyCXVpaXIxX3VmY3IxX3VhZnIxOy8qIDB4NDUwMiAtIFVJSVIxLCBVRkNSMSwgVUFGUjEgd2l0aCB0aGUgc2FtZSBhZGRyZXNzIG9mZnNldCBvZiAweDA0NTAyICovCisJdV9jaGFyCXVsY3IxOwkJLyogMHg0NTAzIC0gVUFSVDEgTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisJdV9jaGFyCXVtY3IxOwkJLyogMHg0NTA0IC0gVUFSVDEgTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworCXVfY2hhcgl1bHNyMTsJCS8qIDB4NDUwNSAtIFVBUlQxIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisJdV9jaGFyCXVtc3IxOwkJLyogMHg0NTA2IC0gVUFSVDEgTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCisJdV9jaGFyCXVzY3IxOwkJLyogMHg0NTA3IC0gVUFSVDEgU2NyYXRjaCBSZWdpc3RlciAqLworCWNoYXIJcmVzMls4XTsKKwl1X2NoYXIJdWRzcjE7CQkvKiAweDQ1MTAgLSBVQVJUMSBETUEgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXMzWzIzOV07CisJdV9jaGFyCXVyYnIyX3V0aHIyX3VkbGIyOy8qIDB4NDYwMCAtIFVSQlIyLCBVVEhSMiwgVURMQjIgd2l0aCB0aGUgc2FtZSBhZGRyZXNzIG9mZnNldCBvZiAweDA0NjAwICovCisJdV9jaGFyCXVpZXIyX3VkbWIyOwkvKiAweDQ2MDEgLSBVSUVSMiwgVURNQjIgd2l0aCB0aGUgc2FtZSBhZGRyZXNzIG9mZnNldCBvZiAweDA0NjAxICovCisJdV9jaGFyCXVpaXIyX3VmY3IyX3VhZnIyOy8qIDB4NDYwMiAtIFVJSVIyLCBVRkNSMiwgVUFGUjIgd2l0aCB0aGUgc2FtZSBhZGRyZXNzIG9mZnNldCBvZiAweDA0NjAyICovCisJdV9jaGFyCXVsY3IyOwkJLyogMHg0NjAzIC0gVUFSVDIgTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisJdV9jaGFyCXVtY3IyOwkJLyogMHg0NjA0IC0gVUFSVDIgTW9kZW0gQ29udHJvbCBSZWdpc3RlciAqLworCXVfY2hhcgl1bHNyMjsJCS8qIDB4NDYwNSAtIFVBUlQyIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisJdV9jaGFyCXVtc3IyOwkJLyogMHg0NjA2IC0gVUFSVDIgTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCisJdV9jaGFyCXVzY3IyOwkJLyogMHg0NjA3IC0gVUFSVDIgU2NyYXRjaCBSZWdpc3RlciAqLworCWNoYXIJcmVzNFs4XTsKKwl1X2NoYXIJdWRzcjI7CQkvKiAweDQ2MTAgLSBVQVJUMiBETUEgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXM1WzI1NDNdOworfSBjY3NyX2R1YXJ0X3Q7CisKKworLyogTG9jYWwgQnVzIENvbnRyb2xsZXIgUmVnaXN0ZXJzKDB4NTAwMC0weDYwMDApICovCit0eXBlZGVmIHN0cnVjdCBjY3NyX2xiYyB7CisJdWludAlicjA7CQkvKiAweDUwMDAgLSBMQkMgQmFzZSBSZWdpc3RlciAwICovCisJdWludAlvcjA7CQkvKiAweDUwMDQgLSBMQkMgT3B0aW9ucyBSZWdpc3RlciAwICovCisJdWludAlicjE7CQkvKiAweDUwMDggLSBMQkMgQmFzZSBSZWdpc3RlciAxICovCisJdWludAlvcjE7CQkvKiAweDUwMGMgLSBMQkMgT3B0aW9ucyBSZWdpc3RlciAxICovCisJdWludAlicjI7CQkvKiAweDUwMTAgLSBMQkMgQmFzZSBSZWdpc3RlciAyICovCisJdWludAlvcjI7CQkvKiAweDUwMTQgLSBMQkMgT3B0aW9ucyBSZWdpc3RlciAyICovCisJdWludAlicjM7CQkvKiAweDUwMTggLSBMQkMgQmFzZSBSZWdpc3RlciAzICovCisJdWludAlvcjM7CQkvKiAweDUwMWMgLSBMQkMgT3B0aW9ucyBSZWdpc3RlciAzICovCisJdWludAlicjQ7CQkvKiAweDUwMjAgLSBMQkMgQmFzZSBSZWdpc3RlciA0ICovCisJdWludAlvcjQ7CQkvKiAweDUwMjQgLSBMQkMgT3B0aW9ucyBSZWdpc3RlciA0ICovCisJdWludAlicjU7CQkvKiAweDUwMjggLSBMQkMgQmFzZSBSZWdpc3RlciA1ICovCisJdWludAlvcjU7CQkvKiAweDUwMmMgLSBMQkMgT3B0aW9ucyBSZWdpc3RlciA1ICovCisJdWludAlicjY7CQkvKiAweDUwMzAgLSBMQkMgQmFzZSBSZWdpc3RlciA2ICovCisJdWludAlvcjY7CQkvKiAweDUwMzQgLSBMQkMgT3B0aW9ucyBSZWdpc3RlciA2ICovCisJdWludAlicjc7CQkvKiAweDUwMzggLSBMQkMgQmFzZSBSZWdpc3RlciA3ICovCisJdWludAlvcjc7CQkvKiAweDUwM2MgLSBMQkMgT3B0aW9ucyBSZWdpc3RlciA3ICovCisJY2hhcglyZXMxWzQwXTsKKwl1aW50CW1hcjsJCS8qIDB4NTA2OCAtIExCQyBVUE0gQWRkcmVzcyBSZWdpc3RlciAqLworCWNoYXIJcmVzMls0XTsKKwl1aW50CW1hbXI7CQkvKiAweDUwNzAgLSBMQkMgVVBNQSBNb2RlIFJlZ2lzdGVyICovCisJdWludAltYm1yOwkJLyogMHg1MDc0IC0gTEJDIFVQTUIgTW9kZSBSZWdpc3RlciAqLworCXVpbnQJbWNtcjsJCS8qIDB4NTA3OCAtIExCQyBVUE1DIE1vZGUgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczNbOF07CisJdWludAltcnRwcjsJCS8qIDB4NTA4NCAtIExCQyBNZW1vcnkgUmVmcmVzaCBUaW1lciBQcmVzY2FsZXIgUmVnaXN0ZXIgKi8KKwl1aW50CW1kcjsJCS8qIDB4NTA4OCAtIExCQyBVUE0gRGF0YSBSZWdpc3RlciAqLworCWNoYXIJcmVzNFs4XTsKKwl1aW50CWxzZG1yOwkJLyogMHg1MDk0IC0gTEJDIFNEUkFNIE1vZGUgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczVbOF07CisJdWludAlsdXJ0OwkJLyogMHg1MGEwIC0gTEJDIFVQTSBSZWZyZXNoIFRpbWVyICovCisJdWludAlsc3J0OwkJLyogMHg1MGE0IC0gTEJDIFNEUkFNIFJlZnJlc2ggVGltZXIgKi8KKwljaGFyCXJlczZbOF07CisJdWludAlsdGVzcjsJCS8qIDB4NTBiMCAtIExCQyBUcmFuc2ZlciBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1aW50CWx0ZWRyOwkJLyogMHg1MGI0IC0gTEJDIFRyYW5zZmVyIEVycm9yIERpc2FibGUgUmVnaXN0ZXIgKi8KKwl1aW50CWx0ZWlyOwkJLyogMHg1MGI4IC0gTEJDIFRyYW5zZmVyIEVycm9yIEludGVycnVwdCBSZWdpc3RlciAqLworCXVpbnQJbHRlYXRyOwkJLyogMHg1MGJjIC0gTEJDIFRyYW5zZmVyIEVycm9yIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwl1aW50CWx0ZWFyOwkJLyogMHg1MGMwIC0gTEJDIFRyYW5zZmVyIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczdbMTJdOworCXVpbnQJbGJjcjsJCS8qIDB4NTBkMCAtIExCQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJdWludAlsY3JyOwkJLyogMHg1MGQ0IC0gTEJDIENsb2NrIFJhdGlvIFJlZ2lzdGVyICovCisJY2hhcglyZXM4WzM4ODBdOworfSBjY3NyX2xiY190OworCisvKiBQQ0kgRXhwcmVzcyBSZWdpc3RlcnMoMHg4MDAwLTB4OTAwMCkgYW5kICgweDkwMDAtMHhBMDAwKSAqLwordHlwZWRlZiBzdHJ1Y3QgY2Nzcl9wZXggeworCXVpbnQJY2ZnX2FkZHI7CS8qIDB4ODAwMCAtIFBFWCBDb25maWd1cmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CWNmZ19kYXRhOwkvKiAweDgwMDQgLSBQRVggQ29uZmlndXJhdGlvbiBEYXRhIFJlZ2lzdGVyICovCisJY2hhcglyZXMxWzRdOwkKKwl1aW50CW91dF9jb21wX3RvOwkvKiAweDgwMEMgLSBQRVggT3V0Ym91bmQgQ29tcGxldGlvbiBUaW1lb3V0IFJlZ2lzdGVyICovCisJY2hhcglyZXMyWzE2XTsKKwl1aW50CXBtZV9tc2dfZGV0OwkvKiAweDgwMjAgLSBQRVggUE1FICYgbWVzc2FnZSBkZXRlY3QgcmVnaXN0ZXIgKi8KKwl1aW50ICAgIHBtZV9tc2dfaW50X2VuOwkvKiAweDgwMjQgLSBQRVggUE1FICYgbWVzc2FnZSBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisJdWludCAgICBwbWVfbXNnX2RpczsJLyogMHg4MDI4IC0gUEVYIFBNRSAmIG1lc3NhZ2UgZGlzYWJsZSByZWdpc3RlciAqLworCXVpbnQgICAgcG1fY29tbWFuZDsJLyogMHg4MDJjIC0gUEVYIFBNIENvbW1hbmQgcmVnaXN0ZXIgKi8KKwljaGFyCXJlczNbMzAxNl07CisJdWludCAgICBibG9ja19yZXYxOwkvKiAweDhiZjggLSBQRVggQmxvY2sgUmV2aXNpb24gcmVnaXN0ZXIgMSAqLworCXVpbnQgICAgYmxvY2tfcmV2MjsJLyogMHg4YmZjIC0gUEVYIEJsb2NrIFJldmlzaW9uIHJlZ2lzdGVyIDIgKi8KKwl1aW50CXBvdGFyMDsJICAgICAgICAvKiAweDhjMDAgLSBQRVggT3V0Ym91bmQgVHJhbnNhY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAwICovCisJdWludAlwb3RlYXIwOwkvKiAweDhjMDQgLSBQRVggT3V0Ym91bmQgVHJhbnNsYXRpb24gRXh0ZW5kZWQgQWRkcmVzcyBSZWdpc3RlciAwICovCisJY2hhcglyZXM0WzhdOworCXVpbnQJcG93YXIwOwkgICAgICAgIC8qIDB4OGMxMCAtIFBFWCBPdXRib3VuZCBXaW5kb3cgQXR0cmlidXRlcyBSZWdpc3RlciAwICovCisJY2hhcglyZXM1WzEyXTsKKwl1aW50CXBvdGFyMTsJICAgICAgICAvKiAweDhjMjAgLSBQRVggT3V0Ym91bmQgVHJhbnNhY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAxICovCisJdWludAlwb3RlYXIxOwkvKiAweDhjMjQgLSBQRVggT3V0Ym91bmQgVHJhbnNsYXRpb24gRXh0ZW5kZWQgQWRkcmVzcyBSZWdpc3RlciAxICovCisJdWludAlwb3diYXIxOwkvKiAweDhjMjggLSBQRVggT3V0Ym91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAxICovCisJY2hhcglyZXM2WzRdOworCXVpbnQJcG93YXIxOwkgICAgICAgIC8qIDB4OGMzMCAtIFBFWCBPdXRib3VuZCBXaW5kb3cgQXR0cmlidXRlcyBSZWdpc3RlciAxICovCisJY2hhcglyZXM3WzEyXTsKKwl1aW50CXBvdGFyMjsJICAgICAgICAvKiAweDhjNDAgLSBQRVggT3V0Ym91bmQgVHJhbnNhY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAyICovCisJdWludAlwb3RlYXIyOwkvKiAweDhjNDQgLSBQRVggT3V0Ym91bmQgVHJhbnNsYXRpb24gRXh0ZW5kZWQgQWRkcmVzcyBSZWdpc3RlciAyICovCisJdWludAlwb3diYXIyOwkvKiAweDhjNDggLSBQRVggT3V0Ym91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAyICovCisJY2hhcglyZXM4WzRdOworCXVpbnQJcG93YXIyOwkgICAgICAgIC8qIDB4OGM1MCAtIFBFWCBPdXRib3VuZCBXaW5kb3cgQXR0cmlidXRlcyBSZWdpc3RlciAyICovCisJY2hhcglyZXM5WzEyXTsKKwl1aW50CXBvdGFyMzsJICAgICAgICAvKiAweDhjNjAgLSBQRVggT3V0Ym91bmQgVHJhbnNhY3Rpb24gQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlwb3RlYXIzOwkvKiAweDhjNjQgLSBQRVggT3V0Ym91bmQgVHJhbnNsYXRpb24gRXh0ZW5kZWQgQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlwb3diYXIzOwkvKiAweDhjNjggLSBQRVggT3V0Ym91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAzICovCisJY2hhcglyZXMxMFs0XTsKKwl1aW50CXBvd2FyMzsJICAgICAgICAvKiAweDhjNzAgLSBQRVggT3V0Ym91bmQgV2luZG93IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgMyAqLworCWNoYXIJcmVzMTFbMTJdOworCXVpbnQJcG90YXI0OwkgICAgICAgIC8qIDB4OGM4MCAtIFBFWCBPdXRib3VuZCBUcmFuc2FjdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDQgKi8KKwl1aW50CXBvdGVhcjQ7CS8qIDB4OGM4NCAtIFBFWCBPdXRib3VuZCBUcmFuc2xhdGlvbiBFeHRlbmRlZCBBZGRyZXNzIFJlZ2lzdGVyIDQgKi8KKwl1aW50CXBvd2JhcjQ7CS8qIDB4OGM4OCAtIFBFWCBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDQgKi8KKwljaGFyCXJlczEyWzRdOworCXVpbnQJcG93YXI0OwkgICAgICAgIC8qIDB4OGM5MCAtIFBFWCBPdXRib3VuZCBXaW5kb3cgQXR0cmlidXRlcyBSZWdpc3RlciA0ICovCisJY2hhcglyZXMxM1sxMl07CisJY2hhcglyZXMxNFsyNTZdOworCXVpbnQJcGl0YXIzOwkgICAgICAgIC8qIDB4OGRhMCAtIFBFWCBJbmJvdW5kIFRyYW5zbGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgMyAgKi8KKwljaGFyCXJlczE1WzRdOworCXVpbnQJcGl3YmFyMzsJLyogMHg4ZGE4IC0gUEVYIEluYm91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlwaXdiZWFyMzsJLyogMHg4ZGFjIC0gUEVYIEluYm91bmQgV2luZG93IEJhc2UgRXh0ZW5kZWQgQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlwaXdhcjM7CSAgICAgICAgLyogMHg4ZGIwIC0gUEVYIEluYm91bmQgV2luZG93IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgMyAqLworCWNoYXIJcmVzMTZbMTJdOworCXVpbnQJcGl0YXIyOwkgICAgICAgIC8qIDB4OGRjMCAtIFBFWCBJbmJvdW5kIFRyYW5zbGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgMiAgKi8KKwljaGFyCXJlczE3WzRdOwkKKwl1aW50CXBpd2JhcjI7CS8qIDB4OGRjOCAtIFBFWCBJbmJvdW5kIFdpbmRvdyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworCXVpbnQJcGl3YmVhcjI7CS8qIDB4OGRjYyAtIFBFWCBJbmJvdW5kIFdpbmRvdyBCYXNlIEV4dGVuZGVkIEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworCXVpbnQJcGl3YXIyOwkgICAgICAgIC8qIDB4OGRkMCAtIFBFWCBJbmJvdW5kIFdpbmRvdyBBdHRyaWJ1dGVzIFJlZ2lzdGVyIDIgKi8KKwljaGFyCXJlczE4WzEyXTsKKwl1aW50CXBpdGFyMTsJICAgICAgICAvKiAweDhkZTAgLSBQRVggSW5ib3VuZCBUcmFuc2xhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDEgICovCisJY2hhcglyZXMxOVs0XTsKKwl1aW50CXBpd2JhcjE7CS8qIDB4OGRlOCAtIFBFWCBJbmJvdW5kIFdpbmRvdyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworCXVpbnQJcGl3YmVhcjE7CisJdWludAlwaXdhcjE7CSAgICAgICAgLyogMHg4ZGYwIC0gUEVYIEluYm91bmQgV2luZG93IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgMSAqLworCWNoYXIJcmVzMjBbMTJdOworCXVpbnQJcGVkcjsJCS8qIDB4OGUwMCAtIFBFWCBFcnJvciBEZXRlY3QgUmVnaXN0ZXIgKi8KKwljaGFyICAgIHJlczIxWzRdOworCXVpbnQJcGVlcjsJCS8qIDB4OGUwOCAtIFBFWCBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisJY2hhciAgICByZXMyMls0XTsKKwl1aW50CXBlY2RyOwkJLyogMHg4ZTEwIC0gUEVYIEVycm9yIERpc2FibGUgUmVnaXN0ZXIgKi8KKwljaGFyICAgIHJlczIzWzEyXTsKKwl1aW50CXBlZXJfc3RhdDsJLyogMHg4ZTIwIC0gUEVYIEVycm9yIENhcHR1cmUgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhciAgICByZXMyNFs0XTsKKwl1aW50CXBlcnJfY2FwMDsJLyogMHg4ZTI4IC0gUEVYIEVycm9yIENhcHR1cmUgUmVnaXN0ZXIgMCAqLworCXVpbnQJcGVycl9jYXAxOwkvKiAweDhlMmMgLSBQRVggRXJyb3IgQ2FwdHVyZSBSZWdpc3RlciAxICovCisJdWludAlwZXJyX2NhcDI7CS8qIDB4OGUzMCAtIFBFWCBFcnJvciBDYXB0dXJlIFJlZ2lzdGVyIDIgKi8KKwl1aW50CXBlcnJfY2FwMzsJLyogMHg4ZTM0IC0gUEVYIEVycm9yIENhcHR1cmUgUmVnaXN0ZXIgMyAqLworCWNoYXIJcmVzMjVbNDUyXTsKKwljaGFyICAgIHJlczI2WzRdOworfSBjY3NyX3BleF90OworCisvKiBIeXBlciBUcmFuc3BvcnQgUmVnaXN0ZXIgQmxvY2sgKDB4QTAwMC0weEIwMDApICovCit0eXBlZGVmIHN0cnVjdCBjY3NyX2h0IHsKKyAgICAgICAgdWludCAgICBoY2ZnX2FkZHI7ICAgICAgLyogMHhhMDAwIC0gSFQgQ29uZmlndXJhdGlvbiBBZGRyZXNzIHJlZ2lzdGVyICovIAorICAgICAgICB1aW50ICAgIGhjZmdfZGF0YTsgICAgICAvKiAweGEwMDQgLSBIVCBDb25maWd1cmF0aW9uIERhdGEgcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMxWzMwNjRdOworICAgICAgICB1aW50ICAgIGhvd3RhcjA7ICAgICAgICAvKiAweGFjMDAgLSBIVCBPdXRib3VuZCBXaW5kb3cgMCBUcmFuc2xhdGlvbiByZWdpc3RlciAqLyAKKwljaGFyCXJlczJbMTJdOworICAgICAgICB1aW50ICAgIGhvd2FyMDsgICAgICAgICAvKiAweGFjMTAgLSBIVCBPdXRib3VuZCBXaW5kb3cgMCBBdHRyaWJ1dGVzIHJlZ2lzdGVyICovCisJY2hhcglyZXMzWzEyXTsgCisgICAgICAgIHVpbnQgICAgaG93dGFyMTsgICAgICAgIC8qIDB4YWMyMCAtIEhUIE91dGJvdW5kIFdpbmRvdyAxIFRyYW5zbGF0aW9uIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzNFs0XTsgCisgICAgICAgIHVpbnQgICAgaG93YmFyMTsgICAgICAgIC8qIDB4YWMyOCAtIEhUIE91dGJvdW5kIFdpbmRvdyAxIEJhc2UgQWRkcmVzcyByZWdpc3RlciAqLyAKKwljaGFyCXJlczVbNF07IAorICAgICAgICB1aW50ICAgIGhvd2FyMTsgICAgICAgICAvKiAweGFjMzAgLSBIVCBPdXRib3VuZCBXaW5kb3cgMSBBdHRyaWJ1dGVzIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzNlsxMl07IAorICAgICAgICB1aW50ICAgIGhvd3RhcjI7ICAgICAgICAvKiAweGFjNDAgLSBIVCBPdXRib3VuZCBXaW5kb3cgMiBUcmFuc2xhdGlvbiByZWdpc3RlciAqLyAKKwljaGFyCXJlczdbNF07IAorICAgICAgICB1aW50ICAgIGhvd2JhcjI7ICAgICAgICAvKiAweGFjNDggLSBIVCBPdXRib3VuZCBXaW5kb3cgMiBCYXNlIEFkZHJlc3MgcmVnaXN0ZXIgKi8gCisJY2hhcglyZXM4WzRdOyAKKyAgICAgICAgdWludCAgICBob3dhcjI7ICAgICAgICAgLyogMHhhYzUwIC0gSFQgT3V0Ym91bmQgV2luZG93IDIgQXR0cmlidXRlcyByZWdpc3RlciAqLyAKKwljaGFyCXJlczlbMTJdOyAKKyAgICAgICAgdWludCAgICBob3d0YXIzOyAgICAgICAgLyogMHhhYzYwIC0gSFQgT3V0Ym91bmQgV2luZG93IDMgVHJhbnNsYXRpb24gcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMxMFs0XTsgCisgICAgICAgIHVpbnQgICAgaG93YmFyMzsgICAgICAgIC8qIDB4YWM2OCAtIEhUIE91dGJvdW5kIFdpbmRvdyAzIEJhc2UgQWRkcmVzcyByZWdpc3RlciAqLyAKKwljaGFyCXJlczExWzRdOyAKKyAgICAgICAgdWludCAgICBob3dhcjM7ICAgICAgICAgLyogMHhhYzcwIC0gSFQgT3V0Ym91bmQgV2luZG93IDMgQXR0cmlidXRlcyAgcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMxMlsxMl07IAorICAgICAgICB1aW50ICAgIGhvd3RhcjQ7ICAgICAgICAvKiAweGFjODAgLSBIVCBPdXRib3VuZCBXaW5kb3cgNCBUcmFuc2xhdGlvbiByZWdpc3RlciAqLyAKKwljaGFyCXJlczEzWzRdOyAKKyAgICAgICAgdWludCAgICBob3diYXI0OyAgICAgICAgLyogMHhhYzg4IC0gSFQgT3V0Ym91bmQgV2luZG93IDQgQmFzZSBBZGRyZXNzIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzMTRbNF07IAorICAgICAgICB1aW50ICAgIGhvd2FyNDsgICAgICAgICAvKiAweGFjOTAgLSBIVCBPdXRib3VuZCBXaW5kb3cgNCBBdHRyaWJ1dGVzIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzMTVbMjM2XTsgCisgICAgICAgIHVpbnQgICAgaGl3dGFyNDsgICAgICAgIC8qIDB4YWQ4MCAtIEhUIEluYm91bmQgV2luZG93IDQgVHJhbnNsYXRpb24gcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMxNls0XTsgCisgICAgICAgIHVpbnQgICAgaGl3YmFyNDsgICAgICAgIC8qIDB4YWQ4OCAtIEhUIEluYm91bmQgV2luZG93IDQgQmFzZSBBZGRyZXNzIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzMTdbNF07IAorICAgICAgICB1aW50ICAgIGhpd2FyNDsgICAgICAgICAvKiAweGFkOTAgLSBIVCBJbmJvdW5kIFdpbmRvdyA0IEF0dHJpYnV0ZXMgcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMxOFsxMl07IAorICAgICAgICB1aW50ICAgIGhpd3RhcjM7ICAgICAgICAvKiAweGFkYTAgLSBIVCBJbmJvdW5kIFdpbmRvdyAzIFRyYW5zbGF0aW9uIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzMTlbNF07IAorICAgICAgICB1aW50ICAgIGhpd2JhcjM7ICAgICAgICAvKiAweGFkYTggLSBIVCBJbmJvdW5kIFdpbmRvdyAzIEJhc2UgQWRkcmVzcyByZWdpc3RlciAqLyAKKwljaGFyCXJlczIwWzRdOyAKKyAgICAgICAgdWludCAgICBoaXdhcjM7ICAgICAgICAgLyogMHhhZGIwIC0gSFQgSW5ib3VuZCBXaW5kb3cgMyBBdHRyaWJ1dGVzIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzMjFbMTJdOyAKKyAgICAgICAgdWludCAgICBoaXd0YXIyOyAgICAgICAgLyogMHhhZGMwIC0gSFQgSW5ib3VuZCBXaW5kb3cgMiBUcmFuc2xhdGlvbiByZWdpc3RlciAqLyAKKwljaGFyCXJlczIyWzRdOyAKKyAgICAgICAgdWludCAgICBoaXdiYXIyOyAgICAgICAgLyogMHhhZGM4IC0gSFQgSW5ib3VuZCBXaW5kb3cgMiBCYXNlIEFkZHJlc3MgcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMyM1s0XTsgCisgICAgICAgIHVpbnQgICAgaGl3YXIyOyAgICAgICAgIC8qIDB4YWRkMCAtIEhUIEluYm91bmQgV2luZG93IDIgQXR0cmlidXRlcyByZWdpc3RlciAqLyAKKwljaGFyCXJlczI0WzEyXTsgCisgICAgICAgIHVpbnQgICAgaGl3dGFyMTsgICAgICAgIC8qIDB4YWRlMCAtIEhUIEluYm91bmQgV2luZG93IDEgVHJhbnNsYXRpb24gcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMyNVs0XTsgCisgICAgICAgIHVpbnQgICAgaGl3YmFyMTsgICAgICAgIC8qIDB4YWRlOCAtIEhUIEluYm91bmQgV2luZG93IDEgQmFzZSBBZGRyZXNzIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzMjZbNF07IAorICAgICAgICB1aW50ICAgIGhpd2FyMTsgICAgICAgICAvKiAweGFkZjAgLSBIVCBJbmJvdW5kIFdpbmRvdyAxIEF0dHJpYnV0ZXMgcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMyN1sxMl07IAorICAgICAgICB1aW50ICAgIGhlZHI7ICAgICAgICAgICAvKiAweGFlMDAgLSBIVCBFcnJvciBEZXRlY3QgcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMyOFs0XTsgCisgICAgICAgIHVpbnQgICAgaGVpZXI7ICAgICAgICAgIC8qIDB4YWUwOCAtIEhUIEVycm9yIEludGVycnVwdCBFbmFibGUgcmVnaXN0ZXIgKi8gCisJY2hhcglyZXMyOVs0XTsgCisgICAgICAgIHVpbnQgICAgaGVjZHI7ICAgICAgICAgIC8qIDB4YWUxMCAtIEhUIEVycm9yIENhcHR1cmUgRGlzYmFsZSByZWdpc3RlciAqLyAKKwljaGFyCXJlczMwWzEyXTsgCisgICAgICAgIHVpbnQgICAgaGVjc3I7ICAgICAgICAgIC8qIDB4YWUyMCAtIEhUIEVycm9yIENhcHR1cmUgU3RhdHVzIHJlZ2lzdGVyICovIAorCWNoYXIJcmVzMzFbNF07IAorICAgICAgICB1aW50ICAgIGhlYzA7ICAgICAgICAgICAvKiAweGFlMjggLSBIVCBFcnJvciBDYXB0dXJlIDAgcmVnaXN0ZXIgKi8gCisgICAgICAgIHVpbnQgICAgaGVjMTsgICAgICAgICAgIC8qIDB4YWUyYyAtIEhUIEVycm9yIENhcHR1cmUgMSByZWdpc3RlciAqLyAKKyAgICAgICAgdWludCAgICBoZWMyOyAgICAgICAgICAgLyogMHhhZTMwIC0gSFQgRXJyb3IgQ2FwdHVyZSAyIHJlZ2lzdGVyICovIAorICAgICAgICBjaGFyICAgIHJlczMyWzQ2MF07Cit9IGNjc3JfaHRfdDsKKworLyogRE1BIFJlZ2lzdGVycygweDJfMTAwMC0weDJfMjAwMCkgKi8KK3R5cGVkZWYgc3RydWN0IGNjc3JfZG1hIHsKKwljaGFyCXJlczFbMjU2XTsKKwl1aW50CW1yMDsJCS8qIDB4MjExMDAgLSBETUEgMCBNb2RlIFJlZ2lzdGVyICovCisJdWludAlzcjA7CQkvKiAweDIxMTA0IC0gRE1BIDAgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXMyWzRdOworCXVpbnQJY2xuZGFyMDsJLyogMHgyMTEwYyAtIERNQSAwIEN1cnJlbnQgTGluayBEZXNjcmlwdG9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CXNhdHIwOwkJLyogMHgyMTExMCAtIERNQSAwIFNvdXJjZSBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCisJdWludAlzYXIwOwkJLyogMHgyMTExNCAtIERNQSAwIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlkYXRyMDsJCS8qIDB4MjExMTggLSBETUEgMCBEZXN0aW5hdGlvbiBBdHRyaWJ1dGVzIFJlZ2lzdGVyICovCisJdWludAlkYXIwOwkJLyogMHgyMTExYyAtIERNQSAwIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CWJjcjA7CQkvKiAweDIxMTIwIC0gRE1BIDAgQnl0ZSBDb3VudCBSZWdpc3RlciAqLworCWNoYXIJcmVzM1s0XTsKKwl1aW50CW5sbmRhcjA7CS8qIDB4MjExMjggLSBETUEgMCBOZXh0IExpbmsgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXM0WzhdOworCXVpbnQJY2xhYmRhcjA7CS8qIDB4MjExMzQgLSBETUEgMCBDdXJyZW50IExpc3QgLSBBbHRlcm5hdGUgQmFzZSBEZXNjcmlwdG9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczVbNF07CisJdWludAlubHNkYXIwOwkvKiAweDIxMTNjIC0gRE1BIDAgTmV4dCBMaXN0IERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJc3NyMDsJCS8qIDB4MjExNDAgLSBETUEgMCBTb3VyY2UgU3RyaWRlIFJlZ2lzdGVyICovCisJdWludAlkc3IwOwkJLyogMHgyMTE0NCAtIERNQSAwIERlc3RpbmF0aW9uIFN0cmlkZSBSZWdpc3RlciAqLworCWNoYXIJcmVzNls1Nl07CisJdWludAltcjE7CQkvKiAweDIxMTgwIC0gRE1BIDEgTW9kZSBSZWdpc3RlciAqLworCXVpbnQJc3IxOwkJLyogMHgyMTE4NCAtIERNQSAxIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzN1s0XTsKKwl1aW50CWNsbmRhcjE7CS8qIDB4MjExOGMgLSBETUEgMSBDdXJyZW50IExpbmsgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlzYXRyMTsJCS8qIDB4MjExOTAgLSBETUEgMSBTb3VyY2UgQXR0cmlidXRlcyBSZWdpc3RlciAqLworCXVpbnQJc2FyMTsJCS8qIDB4MjExOTQgLSBETUEgMSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJZGF0cjE7CQkvKiAweDIxMTk4IC0gRE1BIDEgRGVzdGluYXRpb24gQXR0cmlidXRlcyBSZWdpc3RlciAqLworCXVpbnQJZGFyMTsJCS8qIDB4MjExOWMgLSBETUEgMSBEZXN0aW5hdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAliY3IxOwkJLyogMHgyMTFhMCAtIERNQSAxIEJ5dGUgQ291bnQgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczhbNF07CisJdWludAlubG5kYXIxOwkvKiAweDIxMWE4IC0gRE1BIDEgTmV4dCBMaW5rIERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLworCWNoYXIJcmVzOVs4XTsKKwl1aW50CWNsYWJkYXIxOwkvKiAweDIxMWI0IC0gRE1BIDEgQ3VycmVudCBMaXN0IC0gQWx0ZXJuYXRlIEJhc2UgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxMFs0XTsKKwl1aW50CW5sc2RhcjE7CS8qIDB4MjExYmMgLSBETUEgMSBOZXh0IExpc3QgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlzc3IxOwkJLyogMHgyMTFjMCAtIERNQSAxIFNvdXJjZSBTdHJpZGUgUmVnaXN0ZXIgKi8KKwl1aW50CWRzcjE7CQkvKiAweDIxMWM0IC0gRE1BIDEgRGVzdGluYXRpb24gU3RyaWRlIFJlZ2lzdGVyICovCisJY2hhcglyZXMxMVs1Nl07CisJdWludAltcjI7CQkvKiAweDIxMjAwIC0gRE1BIDIgTW9kZSBSZWdpc3RlciAqLworCXVpbnQJc3IyOwkJLyogMHgyMTIwNCAtIERNQSAyIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzMTJbNF07CisJdWludAljbG5kYXIyOwkvKiAweDIxMjBjIC0gRE1BIDIgQ3VycmVudCBMaW5rIERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJc2F0cjI7CQkvKiAweDIxMjEwIC0gRE1BIDIgU291cmNlIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwl1aW50CXNhcjI7CQkvKiAweDIxMjE0IC0gRE1BIDIgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CWRhdHIyOwkJLyogMHgyMTIxOCAtIERNQSAyIERlc3RpbmF0aW9uIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwl1aW50CWRhcjI7CQkvKiAweDIxMjFjIC0gRE1BIDIgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJYmNyMjsJCS8qIDB4MjEyMjAgLSBETUEgMiBCeXRlIENvdW50IFJlZ2lzdGVyICovCisJY2hhcglyZXMxM1s0XTsKKwl1aW50CW5sbmRhcjI7CS8qIDB4MjEyMjggLSBETUEgMiBOZXh0IExpbmsgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxNFs4XTsKKwl1aW50CWNsYWJkYXIyOwkvKiAweDIxMjM0IC0gRE1BIDIgQ3VycmVudCBMaXN0IC0gQWx0ZXJuYXRlIEJhc2UgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxNVs0XTsKKwl1aW50CW5sc2RhcjI7CS8qIDB4MjEyM2MgLSBETUEgMiBOZXh0IExpc3QgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlzc3IyOwkJLyogMHgyMTI0MCAtIERNQSAyIFNvdXJjZSBTdHJpZGUgUmVnaXN0ZXIgKi8KKwl1aW50CWRzcjI7CQkvKiAweDIxMjQ0IC0gRE1BIDIgRGVzdGluYXRpb24gU3RyaWRlIFJlZ2lzdGVyICovCisJY2hhcglyZXMxNls1Nl07CisJdWludAltcjM7CQkvKiAweDIxMjgwIC0gRE1BIDMgTW9kZSBSZWdpc3RlciAqLworCXVpbnQJc3IzOwkJLyogMHgyMTI4NCAtIERNQSAzIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzMTdbNF07CisJdWludAljbG5kYXIzOwkvKiAweDIxMjhjIC0gRE1BIDMgQ3VycmVudCBMaW5rIERlc2NyaXB0b3IgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJc2F0cjM7CQkvKiAweDIxMjkwIC0gRE1BIDMgU291cmNlIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwl1aW50CXNhcjM7CQkvKiAweDIxMjk0IC0gRE1BIDMgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CWRhdHIzOwkJLyogMHgyMTI5OCAtIERNQSAzIERlc3RpbmF0aW9uIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwl1aW50CWRhcjM7CQkvKiAweDIxMjljIC0gRE1BIDMgRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJYmNyMzsJCS8qIDB4MjEyYTAgLSBETUEgMyBCeXRlIENvdW50IFJlZ2lzdGVyICovCisJY2hhcglyZXMxOFs0XTsKKwl1aW50CW5sbmRhcjM7CS8qIDB4MjEyYTggLSBETUEgMyBOZXh0IExpbmsgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxOVs4XTsKKwl1aW50CWNsYWJkYXIzOwkvKiAweDIxMmI0IC0gRE1BIDMgQ3VycmVudCBMaXN0IC0gQWx0ZXJuYXRlIEJhc2UgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJY2hhcglyZXMyMFs0XTsKKwl1aW50CW5sc2RhcjM7CS8qIDB4MjEyYmMgLSBETUEgMyBOZXh0IExpc3QgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlzc3IzOwkJLyogMHgyMTJjMCAtIERNQSAzIFNvdXJjZSBTdHJpZGUgUmVnaXN0ZXIgKi8KKwl1aW50CWRzcjM7CQkvKiAweDIxMmM0IC0gRE1BIDMgRGVzdGluYXRpb24gU3RyaWRlIFJlZ2lzdGVyICovCisJY2hhcglyZXMyMVs1Nl07CisJdWludAlkZ3NyOwkJLyogMHgyMTMwMCAtIERNQSBHZW5lcmFsIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzMjJbMzMyNF07Cit9IGNjc3JfZG1hX3Q7CisKKy8qIHRzZWMxLTQ6IDI0MDAwLTI4MDAwICovCit0eXBlZGVmIHN0cnVjdCBjY3NyX3RzZWMgeworICAgICAgICB1aW50ICAgIGlkOyAJCS8qIDB4MjQwMDAgLSBDb250cm9sbGVyIElEIFJlZ2lzdGVyICovCisJY2hhcglyZXMxWzEyXTsKKwl1aW50CWlldmVudDsJCS8qIDB4MjQwMTAgLSBJbnRlcnJ1cHQgRXZlbnQgUmVnaXN0ZXIgKi8KKwl1aW50CWltYXNrOwkJLyogMHgyNDAxNCAtIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisJdWludAllZGlzOwkJLyogMHgyNDAxOCAtIEVycm9yIERpc2FibGVkIFJlZ2lzdGVyICovCisJY2hhcglyZXMyWzRdOworCXVpbnQJZWNudHJsOwkJLyogMHgyNDAyMCAtIEV0aGVybmV0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgY2hhciAgICByZXMyXzFbNF07CisJdWludAlwdHY7CQkvKiAweDI0MDI4IC0gUGF1c2UgVGltZSBWYWx1ZSBSZWdpc3RlciAqLworCXVpbnQJZG1hY3RybDsJLyogMHgyNDAyYyAtIERNQSBDb250cm9sIFJlZ2lzdGVyICovCisJdWludAl0YmlwYTsJCS8qIDB4MjQwMzAgLSBUQkkgUEhZIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczNbODhdOworCXVpbnQJZmlmb190eF90aHI7CS8qIDB4MjQwOGMgLSBGSUZPIHRyYW5zbWl0IHRocmVzaG9sZCByZWdpc3RlciAqLworCWNoYXIJcmVzNFs4XTsKKwl1aW50CWZpZm9fdHhfc3RhcnZlOwkvKiAweDI0MDk4IC0gRklGTyB0cmFuc21pdCBzdGFydmUgcmVnaXN0ZXIgKi8KKwl1aW50CWZpZm9fdHhfc3RhcnZlX3NodXRvZmY7LyogMHgyNDA5YyAtIEZJRk8gdHJhbnNtaXQgc3RhcnZlIHNodXRvZmYgcmVnaXN0ZXIgKi8KKyAgICAgICAgY2hhciAgICByZXM0XzFbNF07CisgICAgICAgIHVpbnQgICAgZmlmb19yeF9wYXVzZTsgIC8qIDB4MjQwYTQgLSBGSUZPIHJlY2VpdmUgcGF1c2UgdGhyZXNob2xkIHJlZ2lzdGVyICovCisgICAgICAgIHVpbnQgICAgZmlmb19yeF9hbGFybTsgIC8qIDB4MjQwYTggLSBGSUZPIHJlY2VpdmUgYWxhcm0gdGhyZXNob2xkIHJlZ2lzdGVyICovCisJY2hhcglyZXM1Wzg0XTsKKwl1aW50CXRjdHJsOwkJLyogMHgyNDEwMCAtIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1aW50CXRzdGF0OwkJLyogMHgyNDEwNCAtIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciAqLworICAgICAgICB1aW50ICAgIGRmdmxhbjsJCS8qIDB4MjQxMDggLSBEZWZhdWx0IFZMQU4gY29udHJvbCB3b3JkICovCisgICAgICAgIGNoYXIgICAgcmVzNls0XTsKKyAgICAgICAgdWludCAgICB0eGljOwkJLyogMHgyNDExMCAtIFRyYW5zbWl0IGludGVycnVwdCBjb2FsZXNjaW5nIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQgICAgdHF1ZXVlOyAgICAgICAgIC8qIDB4MjQxMTQgLSBUcmFuc21pdCBRdWV1ZSBDb250cm9sIFJlZ2lzdGVyICovCisJY2hhcglyZXM3WzQwXTsKKyAgICAgICAgdWludCAgICB0cjAzd3Q7ICAgICAgICAgLyogMHgyNDE0MCAtIFR4QkQgUmluZ3MgMC0zIHJvdW5kLXJvYmluIHdlaWdodGluZ3MgKi8KKyAgICAgICAgdWludCAgICB0dzQ3d3Q7ICAgICAgICAgLyogMHgyNDE0NCAtIFR4QkQgUmluZ3MgNC03IHJvdW5kLXJvYmluIHdlaWdodGluZ3MgKi8KKyAgICAgICAgY2hhciAgICByZXM4WzUyXTsKKyAgICAgICAgdWludAl0YmRicGg7CSAgICAgICAgLyogMHgyNDE3YyAtIFRyYW5zbWl0IERhdGEgQnVmZmVyIFBvaW50ZXIgSGlnaCBSZWdpc3RlciAqLworICAgICAgICBjaGFyICAgIHJlczlbNF07CisgICAgICAgIHVpbnQgICAgdGJwdHIwOyAgICAgICAgIC8qIDB4MjQxODQgLSBUcmFuc21pdCBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDAgKi8KKyAgICAgICAgY2hhciAgICByZXMxMFs0XTsKKyAgICAgICAgdWludCAgICB0YnB0cjE7ICAgICAgICAgLyogMHgyNDE4QyAtIFRyYW5zbWl0IEJ1ZmZlciBEZXNjcmlwdG9yIFBvaW50ZXIgZm9yIFJpbmcgMSAqLworICAgICAgICBjaGFyICAgIHJlczExWzRdOworICAgICAgICB1aW50ICAgIHRicHRyMjsgICAgICAgICAvKiAweDI0MTk0IC0gVHJhbnNtaXQgQnVmZmVyIERlc2NyaXB0b3IgUG9pbnRlciBmb3IgUmluZyAyICovCisgICAgICAgIGNoYXIgICAgcmVzMTJbNF07CisgICAgICAgIHVpbnQgICAgdGJwdHIzOyAgICAgICAgIC8qIDB4MjQxOUMgLSBUcmFuc21pdCBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDMgKi8KKyAgICAgICAgY2hhciAgICByZXMxM1s0XTsKKyAgICAgICAgdWludCAgICB0YnB0cjQ7ICAgICAgICAgLyogMHgyNDFBNCAtIFRyYW5zbWl0IEJ1ZmZlciBEZXNjcmlwdG9yIFBvaW50ZXIgZm9yIFJpbmcgNCAqLworICAgICAgICBjaGFyICAgIHJlczE0WzRdOworICAgICAgICB1aW50ICAgIHRicHRyNTsgICAgICAgICAvKiAweDI0MUFDIC0gVHJhbnNtaXQgQnVmZmVyIERlc2NyaXB0b3IgUG9pbnRlciBmb3IgUmluZyA1ICovCisgICAgICAgIGNoYXIgICAgcmVzMTVbNF07CisgICAgICAgIHVpbnQgICAgdGJwdHI2OyAgICAgICAgIC8qIDB4MjQxQjQgLSBUcmFuc21pdCBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDYgKi8KKyAgICAgICAgY2hhciAgICByZXMxNls0XTsKKyAgICAgICAgdWludCAgICB0YnB0cjc7ICAgICAgICAgLyogMHgyNDFCQyAtIFRyYW5zbWl0IEJ1ZmZlciBEZXNjcmlwdG9yIFBvaW50ZXIgZm9yIFJpbmcgNyAqLworICAgICAgICBjaGFyICAgIHJlczE3WzY0XTsKKwl1aW50CXRiYXNlaDsJCS8qIDB4MjQyMDAgLSBUcmFuc21pdCBEZXNjcmlwdG9yIEJhc2UgQWRkcmVzcyBIaWdoIFJlZ2lzdGVyICovCisJdWludAl0YmFzZTA7CQkvKiAweDI0MjA0IC0gVHJhbnNtaXQgRGVzY3JpcHRvciBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgb2YgUmluZyAwICovCisgICAgICAgIGNoYXIgICAgcmVzMThbNF07ICAgICAgCisgICAgICAgIHVpbnQgICAgdGJhc2UxOyAgICAgICAgIC8qIDB4MjQyMEMgLSBUcmFuc21pdCBEZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyBvZiBSaW5nIDEgKi8KKyAgICAgICAgY2hhciAgICByZXMxOVs0XTsKKyAgICAgICAgdWludCAgICB0YmFzZTI7ICAgICAgICAgLyogMHgyNDIxNCAtIFRyYW5zbWl0IERlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIG9mIFJpbmcgMiAqLworICAgICAgICBjaGFyICAgIHJlczIwWzRdOworICAgICAgICB1aW50ICAgIHRiYXNlMzsgICAgICAgICAvKiAweDI0MjFDIC0gVHJhbnNtaXQgRGVzY3JpcHRvciBiYXNlIGFkZHJlc3Mgb2YgUmluZyAzICovCisgICAgICAgIGNoYXIgICAgcmVzMjFbNF07CisgICAgICAgIHVpbnQgICAgdGJhc2U0OyAgICAgICAgIC8qIDB4MjQyMjQgLSBUcmFuc21pdCBEZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyBvZiBSaW5nIDQgKi8KKyAgICAgICAgY2hhciAgICByZXMyMls0XTsKKyAgICAgICAgdWludCAgICB0YmFzZTU7ICAgICAgICAgLyogMHgyNDIyQyAtIFRyYW5zbWl0IERlc2NyaXB0b3IgYmFzZSBhZGRyZXNzIG9mIFJpbmcgNSAqLworICAgICAgICBjaGFyICAgIHJlczIzWzRdOworICAgICAgICB1aW50ICAgIHRiYXNlNjsgICAgICAgICAvKiAweDI0MjM0IC0gVHJhbnNtaXQgRGVzY3JpcHRvciBiYXNlIGFkZHJlc3Mgb2YgUmluZyA2ICovCisgICAgICAgIGNoYXIgICAgcmVzMjRbNF07CisgICAgICAgIHVpbnQgICAgdGJhc2U3OyAgICAgICAgIC8qIDB4MjQyM0MgLSBUcmFuc21pdCBEZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyBvZiBSaW5nIDcgKi8KKyAgICAgICAgY2hhciAgICByZXMyNVsxOTJdOworCXVpbnQJcmN0cmw7CQkvKiAweDI0MzAwIC0gUmVjZWl2ZSBDb250cm9sIFJlZ2lzdGVyICovCisJdWludAlyc3RhdDsJCS8qIDB4MjQzMDQgLSBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzMjZbOF07CisgICAgICAgIHVpbnQgICAgcnhpYzsgICAgICAgICAgIC8qIDB4MjQzMTAgLSBSZWNlaXZlIEludGVycnVwdCBDb2FsZWNpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludCAgICBycXVldWU7ICAgICAgICAgLyogMHgyNDMxNCAtIFJlY2VpdmUgcXVldWUgY29udHJvbCByZWdpc3RlciAqLworCWNoYXIJcmVzMjdbMjRdOworICAgICAgICB1aW50ICAgIHJiaWZ4OwkJLyogMHgyNDMzMCAtIFJlY2VpdmUgYml0IGZpZWxkIGV4dHJhY3QgY29udHJvbCBSZWdpc3RlciAqLworICAgICAgICB1aW50ICAgIHJxZmFyOwkJLyogMHgyNDMzNCAtIFJlY2VpdmUgcXVldWUgZmlsaW5nIHRhYmxlIGFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludCAgICBycWZjcjsJCS8qIDB4MjQzMzggLSBSZWNlaXZlIHF1ZXVlIGZpbGluZyB0YWJsZSBjb250cm9sIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQgICAgcnFmcHI7ICAgICAgCS8qIDB4MjQzM2MgLSBSZWNlaXZlIHF1ZXVlIGZpbGluZyB0YWJsZSBwcm9wZXJ0eSBSZWdpc3RlciAqLworCXVpbnQJbXJibHI7CQkvKiAweDI0MzQwIC0gTWF4aW11bSBSZWNlaXZlIEJ1ZmZlciBMZW5ndGggUmVnaXN0ZXIgKi8KKwljaGFyCXJlczI4WzU2XTsKKyAgICAgICAgdWludCAgICByYmRicGg7CQkvKiAweDI0MzdDIC0gUmVjZWl2ZSBEYXRhIEJ1ZmZlciBQb2ludGVyIEhpZ2ggKi8KKyAgICAgICAgY2hhciAgICByZXMyOVs0XTsKKyAgICAgICAgdWludAlyYnB0cjA7CQkvKiAweDI0Mzg0IC0gUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDAgKi8KKyAgICAgICAgY2hhciAgICByZXMzMFs0XTsKKyAgICAgICAgdWludAlyYnB0cjE7CQkvKiAweDI0MzhDIC0gUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDEgKi8KKyAgICAgICAgY2hhciAgICByZXMzMVs0XTsKKyAgICAgICAgdWludAlyYnB0cjI7CQkvKiAweDI0Mzk0IC0gUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDIgKi8KKyAgICAgICAgY2hhciAgICByZXMzMls0XTsKKyAgICAgICAgdWludAlyYnB0cjM7CQkvKiAweDI0MzlDIC0gUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDMgKi8KKyAgICAgICAgY2hhciAgICByZXMzM1s0XTsKKyAgICAgICAgdWludAlyYnB0cjQ7CQkvKiAweDI0M0E0IC0gUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDQgKi8KKyAgICAgICAgY2hhciAgICByZXMzNFs0XTsKKyAgICAgICAgdWludAlyYnB0cjU7CQkvKiAweDI0M0FDIC0gUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDUgKi8KKyAgICAgICAgY2hhciAgICByZXMzNVs0XTsKKyAgICAgICAgdWludAlyYnB0cjY7CQkvKiAweDI0M0I0IC0gUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDYgKi8KKyAgICAgICAgY2hhciAgICByZXMzNls0XTsKKyAgICAgICAgdWludAlyYnB0cjc7CQkvKiAweDI0M0JDIC0gUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciBQb2ludGVyIGZvciBSaW5nIDcgKi8KKyAgICAgICAgY2hhciAgICByZXMzN1s2NF07CisJdWludAlyYmFzZWg7CQkvKiAweDI0NDAwIC0gUmVjZWl2ZSBEZXNjcmlwdG9yIEJhc2UgQWRkcmVzcyBIaWdoIDAgKi8KKwl1aW50CXJiYXNlMDsJCS8qIDB4MjQ0MDQgLSBSZWNlaXZlIERlc2NyaXB0b3IgQmFzZSBBZGRyZXNzIG9mIFJpbmcgMCAqLworICAgICAgICBjaGFyICAgIHJlczM4WzRdOworCXVpbnQJcmJhc2UxOwkJLyogMHgyNDQwQyAtIFJlY2VpdmUgRGVzY3JpcHRvciBCYXNlIEFkZHJlc3Mgb2YgUmluZyAxICovCisgICAgICAgIGNoYXIgICAgcmVzMzlbNF07CisJdWludAlyYmFzZTI7CQkvKiAweDI0NDE0IC0gUmVjZWl2ZSBEZXNjcmlwdG9yIEJhc2UgQWRkcmVzcyBvZiBSaW5nIDIgKi8KKyAgICAgICAgY2hhciAgICByZXM0MFs0XTsKKwl1aW50CXJiYXNlMzsJCS8qIDB4MjQ0MUMgLSBSZWNlaXZlIERlc2NyaXB0b3IgQmFzZSBBZGRyZXNzIG9mIFJpbmcgMyAqLworICAgICAgICBjaGFyICAgIHJlczQxWzRdOworCXVpbnQJcmJhc2U0OwkJLyogMHgyNDQyNCAtIFJlY2VpdmUgRGVzY3JpcHRvciBCYXNlIEFkZHJlc3Mgb2YgUmluZyA0ICovCisgICAgICAgIGNoYXIgICAgcmVzNDJbNF07CisJdWludAlyYmFzZTU7CQkvKiAweDI0NDJDIC0gUmVjZWl2ZSBEZXNjcmlwdG9yIEJhc2UgQWRkcmVzcyBvZiBSaW5nIDUgKi8KKyAgICAgICAgY2hhciAgICByZXM0M1s0XTsKKwl1aW50CXJiYXNlNjsJCS8qIDB4MjQ0MzQgLSBSZWNlaXZlIERlc2NyaXB0b3IgQmFzZSBBZGRyZXNzIG9mIFJpbmcgNiAqLworICAgICAgICBjaGFyICAgIHJlczQ0WzRdOworCXVpbnQJcmJhc2U3OwkJLyogMHgyNDQzQyAtIFJlY2VpdmUgRGVzY3JpcHRvciBCYXNlIEFkZHJlc3Mgb2YgUmluZyA3ICovCisgICAgICAgIGNoYXIgICAgcmVzNDVbMTkyXTsKKwl1aW50CW1hY2NmZzE7CS8qIDB4MjQ1MDAgLSBNQUMgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCisJdWludAltYWNjZmcyOwkvKiAweDI0NTA0IC0gTUFDIENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLworCXVpbnQJaXBnaWZnOwkJLyogMHgyNDUwOCAtIEludGVyIFBhY2tldCBHYXAvSW50ZXIgRnJhbWUgR2FwIFJlZ2lzdGVyICovCisJdWludAloYWZkdXA7CQkvKiAweDI0NTBjIC0gSGFsZiBEdXBsZXggUmVnaXN0ZXIgKi8KKwl1aW50CW1heGZybTsJCS8qIDB4MjQ1MTAgLSBNYXhpbXVtIEZyYW1lIExlbmd0aCBSZWdpc3RlciAqLworCWNoYXIJcmVzNDZbMTJdOworCXVpbnQJbWlpbWNmZzsJLyogMHgyNDUyMCAtIE1JSSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwl1aW50CW1paW1jb207CS8qIDB4MjQ1MjQgLSBNSUkgTWFuYWdlbWVudCBDb21tYW5kIFJlZ2lzdGVyICovCisJdWludAltaWltYWRkOwkvKiAweDI0NTI4IC0gTUlJIE1hbmFnZW1lbnQgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJbWlpbWNvbjsJLyogMHgyNDUyYyAtIE1JSSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1aW50CW1paW1zdGF0OwkvKiAweDI0NTMwIC0gTUlJIE1hbmFnZW1lbnQgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludAltaWltaW5kOwkvKiAweDI0NTM0IC0gTUlJIE1hbmFnZW1lbnQgSW5kaWNhdG9yIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQgICAgaWZjdHJsOwkJLyogMHgyNDUzOCAtIEludGVyZmFjZSBDb250cmwgUmVnaXN0ZXIgKi8KKwl1aW50CWlmc3RhdDsJCS8qIDB4MjQ1M2MgLSBJbnRlcmZhY2UgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludAltYWNzdG5hZGRyMTsJLyogMHgyNDU0MCAtIFN0YXRpb24gQWRkcmVzcyBQYXJ0IDEgUmVnaXN0ZXIgKi8KKwl1aW50CW1hY3N0bmFkZHIyOwkvKiAweDI0NTQ0IC0gU3RhdGlvbiBBZGRyZXNzIFBhcnQgMiBSZWdpc3RlciAqLworICAgICAgICB1aW50ICAgIG1hYzAxYWRkcjE7ICAgICAvKiAweDI0NTQ4IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMSwgcGFydCAxICovCisgICAgICAgIHVpbnQgICAgbWFjMDFhZGRyMjsgICAgIC8qIDB4MjQ1NEMgLSBNQUMgZXhhY3QgbWF0Y2ggYWRkcmVzcyAxLCBwYXJ0IDIgKi8KKyAgICAgICAgdWludCAgICBtYWMwMmFkZHIxOyAgICAgLyogMHgyNDU1MCAtIE1BQyBleGFjdCBtYXRjaCBhZGRyZXNzIDIsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzAyYWRkcjI7ICAgICAvKiAweDI0NTU0IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMiwgcGFydCAyICovCisgICAgICAgIHVpbnQgICAgbWFjMDNhZGRyMTsgICAgIC8qIDB4MjQ1NTggLSBNQUMgZXhhY3QgbWF0Y2ggYWRkcmVzcyAzLCBwYXJ0IDEgKi8KKyAgICAgICAgdWludCAgICBtYWMwM2FkZHIyOyAgICAgLyogMHgyNDU1QyAtIE1BQyBleGFjdCBtYXRjaCBhZGRyZXNzIDMsIHBhcnQgMiAqLworICAgICAgICB1aW50ICAgIG1hYzA0YWRkcjE7ICAgICAvKiAweDI0NTYwIC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgNCwgcGFydCAxICovCisgICAgICAgIHVpbnQgICAgbWFjMDRhZGRyMjsgICAgIC8qIDB4MjQ1NjQgLSBNQUMgZXhhY3QgbWF0Y2ggYWRkcmVzcyA0LCBwYXJ0IDIgKi8KKyAgICAgICAgdWludCAgICBtYWMwNWFkZHIxOyAgICAgLyogMHgyNDU2OCAtIE1BQyBleGFjdCBtYXRjaCBhZGRyZXNzIDUsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzA1YWRkcjI7ICAgICAvKiAweDI0NTZDIC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgNSwgcGFydCAyICovCisgICAgICAgIHVpbnQgICAgbWFjMDZhZGRyMTsgICAgIC8qIDB4MjQ1NzAgLSBNQUMgZXhhY3QgbWF0Y2ggYWRkcmVzcyA2LCBwYXJ0IDEgKi8KKyAgICAgICAgdWludCAgICBtYWMwNmFkZHIyOyAgICAgLyogMHgyNDU3NCAtIE1BQyBleGFjdCBtYXRjaCBhZGRyZXNzIDYsIHBhcnQgMiAqLworICAgICAgICB1aW50ICAgIG1hYzA3YWRkcjE7ICAgICAvKiAweDI0NTc4IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgNywgcGFydCAxICovCisgICAgICAgIHVpbnQgICAgbWFjMDdhZGRyMjsgICAgIC8qIDB4MjQ1N0MgLSBNQUMgZXhhY3QgbWF0Y2ggYWRkcmVzcyA3LCBwYXJ0IDIgKi8KKyAgICAgICAgdWludCAgICBtYWMwOGFkZHIxOyAgICAgLyogMHgyNDU4MCAtIE1BQyBleGFjdCBtYXRjaCBhZGRyZXNzIDgsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzA4YWRkcjI7ICAgICAvKiAweDI0NTg0IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgOCwgcGFydCAyICovCisgICAgICAgIHVpbnQgICAgbWFjMDlhZGRyMTsgICAgIC8qIDB4MjQ1ODggLSBNQUMgZXhhY3QgbWF0Y2ggYWRkcmVzcyA5LCBwYXJ0IDEgKi8KKyAgICAgICAgdWludCAgICBtYWMwOWFkZHIyOyAgICAgLyogMHgyNDU4QyAtIE1BQyBleGFjdCBtYXRjaCBhZGRyZXNzIDksIHBhcnQgMiAqLworICAgICAgICB1aW50ICAgIG1hYzEwYWRkcjE7ICAgICAvKiAweDI0NTkwIC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTAsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzEwYWRkcjI7ICAgICAvKiAweDI0NTk0IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTAsIHBhcnQgMiAqLworICAgICAgICB1aW50ICAgIG1hYzExYWRkcjE7ICAgICAvKiAweDI0NTk4IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTEsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzExYWRkcjI7ICAgICAvKiAweDI0NTlDIC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTEsIHBhcnQgMiAqLworICAgICAgICB1aW50ICAgIG1hYzEyYWRkcjE7ICAgICAvKiAweDI0NUEwIC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTIsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzEyYWRkcjI7ICAgICAvKiAweDI0NUE0IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTIsIHBhcnQgMiAqLworICAgICAgICB1aW50ICAgIG1hYzEzYWRkcjE7ICAgICAvKiAweDI0NUE4IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTMsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzEzYWRkcjI7ICAgICAvKiAweDI0NUFDIC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTMsIHBhcnQgMiAqLworICAgICAgICB1aW50ICAgIG1hYzE0YWRkcjE7ICAgICAvKiAweDI0NUIwIC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTQsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzE0YWRkcjI7ICAgICAvKiAweDI0NUI0IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTQsIHBhcnQgMiAqLworICAgICAgICB1aW50ICAgIG1hYzE1YWRkcjE7ICAgICAvKiAweDI0NUI4IC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTUsIHBhcnQgMSAqLworICAgICAgICB1aW50ICAgIG1hYzE1YWRkcjI7ICAgICAvKiAweDI0NUJDIC0gTUFDIGV4YWN0IG1hdGNoIGFkZHJlc3MgMTUsIHBhcnQgMiAqLworCWNoYXIJcmVzNDhbMTkyXTsKKwl1aW50CXRyNjQ7CQkvKiAweDI0NjgwIC0gVHJhbnNtaXQgYW5kIFJlY2VpdmUgNjQtYnl0ZSBGcmFtZSBDb3VudGVyICovCisJdWludAl0cjEyNzsJCS8qIDB4MjQ2ODQgLSBUcmFuc21pdCBhbmQgUmVjZWl2ZSA2NS0xMjcgYnl0ZSBGcmFtZSBDb3VudGVyICovCisJdWludAl0cjI1NTsJCS8qIDB4MjQ2ODggLSBUcmFuc21pdCBhbmQgUmVjZWl2ZSAxMjgtMjU1IGJ5dGUgRnJhbWUgQ291bnRlciAqLworCXVpbnQJdHI1MTE7CQkvKiAweDI0NjhjIC0gVHJhbnNtaXQgYW5kIFJlY2VpdmUgMjU2LTUxMSBieXRlIEZyYW1lIENvdW50ZXIgKi8KKwl1aW50CXRyMWs7CQkvKiAweDI0NjkwIC0gVHJhbnNtaXQgYW5kIFJlY2VpdmUgNTEyLTEwMjMgYnl0ZSBGcmFtZSBDb3VudGVyICovCisJdWludAl0cm1heDsJCS8qIDB4MjQ2OTQgLSBUcmFuc21pdCBhbmQgUmVjZWl2ZSAxMDI0LTE1MTggYnl0ZSBGcmFtZSBDb3VudGVyICovCisJdWludAl0cm1ndjsJCS8qIDB4MjQ2OTggLSBUcmFuc21pdCBhbmQgUmVjZWl2ZSAxNTE5LTE1MjIgYnl0ZSBHb29kIFZMQU4gRnJhbWUgKi8KKwl1aW50CXJieXQ7CQkvKiAweDI0NjljIC0gUmVjZWl2ZSBCeXRlIENvdW50ZXIgKi8KKwl1aW50CXJwa3Q7CQkvKiAweDI0NmEwIC0gUmVjZWl2ZSBQYWNrZXQgQ291bnRlciAqLworCXVpbnQJcmZjczsJCS8qIDB4MjQ2YTQgLSBSZWNlaXZlIEZDUyBFcnJvciBDb3VudGVyICovCisJdWludAlybWNhOwkJLyogMHgyNDZhOCAtIFJlY2VpdmUgTXVsdGljYXN0IFBhY2tldCBDb3VudGVyICovCisJdWludAlyYmNhOwkJLyogMHgyNDZhYyAtIFJlY2VpdmUgQnJvYWRjYXN0IFBhY2tldCBDb3VudGVyICovCisJdWludAlyeGNmOwkJLyogMHgyNDZiMCAtIFJlY2VpdmUgQ29udHJvbCBGcmFtZSBQYWNrZXQgQ291bnRlciAqLworCXVpbnQJcnhwZjsJCS8qIDB4MjQ2YjQgLSBSZWNlaXZlIFBhdXNlIEZyYW1lIFBhY2tldCBDb3VudGVyICovCisJdWludAlyeHVvOwkJLyogMHgyNDZiOCAtIFJlY2VpdmUgVW5rbm93biBPUCBDb2RlIENvdW50ZXIgKi8KKwl1aW50CXJhbG47CQkvKiAweDI0NmJjIC0gUmVjZWl2ZSBBbGlnbm1lbnQgRXJyb3IgQ291bnRlciAqLworCXVpbnQJcmZscjsJCS8qIDB4MjQ2YzAgLSBSZWNlaXZlIEZyYW1lIExlbmd0aCBFcnJvciBDb3VudGVyICovCisJdWludAlyY2RlOwkJLyogMHgyNDZjNCAtIFJlY2VpdmUgQ29kZSBFcnJvciBDb3VudGVyICovCisJdWludAlyY3NlOwkJLyogMHgyNDZjOCAtIFJlY2VpdmUgQ2FycmllciBTZW5zZSBFcnJvciBDb3VudGVyICovCisJdWludAlydW5kOwkJLyogMHgyNDZjYyAtIFJlY2VpdmUgVW5kZXJzaXplIFBhY2tldCBDb3VudGVyICovCisJdWludAlyb3ZyOwkJLyogMHgyNDZkMCAtIFJlY2VpdmUgT3ZlcnNpemUgUGFja2V0IENvdW50ZXIgKi8KKwl1aW50CXJmcmc7CQkvKiAweDI0NmQ0IC0gUmVjZWl2ZSBGcmFnbWVudHMgQ291bnRlciAqLworCXVpbnQJcmpicjsJCS8qIDB4MjQ2ZDggLSBSZWNlaXZlIEphYmJlciBDb3VudGVyICovCisJdWludAlyZHJwOwkJLyogMHgyNDZkYyAtIFJlY2VpdmUgRHJvcCBDb3VudGVyICovCisJdWludAl0Ynl0OwkJLyogMHgyNDZlMCAtIFRyYW5zbWl0IEJ5dGUgQ291bnRlciBDb3VudGVyICovCisJdWludAl0cGt0OwkJLyogMHgyNDZlNCAtIFRyYW5zbWl0IFBhY2tldCBDb3VudGVyICovCisJdWludAl0bWNhOwkJLyogMHgyNDZlOCAtIFRyYW5zbWl0IE11bHRpY2FzdCBQYWNrZXQgQ291bnRlciAqLworCXVpbnQJdGJjYTsJCS8qIDB4MjQ2ZWMgLSBUcmFuc21pdCBCcm9hZGNhc3QgUGFja2V0IENvdW50ZXIgKi8KKwl1aW50CXR4cGY7CQkvKiAweDI0NmYwIC0gVHJhbnNtaXQgUGF1c2UgQ29udHJvbCBGcmFtZSBDb3VudGVyICovCisJdWludAl0ZGZyOwkJLyogMHgyNDZmNCAtIFRyYW5zbWl0IERlZmVycmFsIFBhY2tldCBDb3VudGVyICovCisJdWludAl0ZWRmOwkJLyogMHgyNDZmOCAtIFRyYW5zbWl0IEV4Y2Vzc2l2ZSBEZWZlcnJhbCBQYWNrZXQgQ291bnRlciAqLworCXVpbnQJdHNjbDsJCS8qIDB4MjQ2ZmMgLSBUcmFuc21pdCBTaW5nbGUgQ29sbGlzaW9uIFBhY2tldCBDb3VudGVyICovCisJdWludAl0bWNsOwkJLyogMHgyNDcwMCAtIFRyYW5zbWl0IE11bHRpcGxlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlciAqLworCXVpbnQJdGxjbDsJCS8qIDB4MjQ3MDQgLSBUcmFuc21pdCBMYXRlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlciAqLworCXVpbnQJdHhjbDsJCS8qIDB4MjQ3MDggLSBUcmFuc21pdCBFeGNlc3NpdmUgQ29sbGlzaW9uIFBhY2tldCBDb3VudGVyICovCisJdWludAl0bmNsOwkJLyogMHgyNDcwYyAtIFRyYW5zbWl0IFRvdGFsIENvbGxpc2lvbiBDb3VudGVyICovCisJY2hhcglyZXM0OVs0XTsKKwl1aW50CXRkcnA7CQkvKiAweDI0NzE0IC0gVHJhbnNtaXQgRHJvcCBGcmFtZSBDb3VudGVyICovCisJdWludAl0amJyOwkJLyogMHgyNDcxOCAtIFRyYW5zbWl0IEphYmJlciBGcmFtZSBDb3VudGVyICovCisJdWludAl0ZmNzOwkJLyogMHgyNDcxYyAtIFRyYW5zbWl0IEZDUyBFcnJvciBDb3VudGVyICovCisJdWludAl0eGNmOwkJLyogMHgyNDcyMCAtIFRyYW5zbWl0IENvbnRyb2wgRnJhbWUgQ291bnRlciAqLworCXVpbnQJdG92cjsJCS8qIDB4MjQ3MjQgLSBUcmFuc21pdCBPdmVyc2l6ZSBGcmFtZSBDb3VudGVyICovCisJdWludAl0dW5kOwkJLyogMHgyNDcyOCAtIFRyYW5zbWl0IFVuZGVyc2l6ZSBGcmFtZSBDb3VudGVyICovCisJdWludAl0ZnJnOwkJLyogMHgyNDcyYyAtIFRyYW5zbWl0IEZyYWdtZW50cyBGcmFtZSBDb3VudGVyICovCisJdWludAljYXIxOwkJLyogMHgyNDczMCAtIENhcnJ5IFJlZ2lzdGVyIE9uZSAqLworCXVpbnQJY2FyMjsJCS8qIDB4MjQ3MzQgLSBDYXJyeSBSZWdpc3RlciBUd28gKi8KKwl1aW50CWNhbTE7CQkvKiAweDI0NzM4IC0gQ2FycnkgTWFzayBSZWdpc3RlciBPbmUgKi8KKwl1aW50CWNhbTI7CQkvKiAweDI0NzNjIC0gQ2FycnkgTWFzayBSZWdpc3RlciBUd28gKi8KKyAgICAgICAgdWludCAgICBycmVqOwkgICAgICAgIC8qIDB4MjQ3NDAgLSBSZWNlaXZlIGZpbGVyIHJlamVjdGVkIHBhY2tldCBjb3VudGVyICovCisJY2hhcglyZXM1MFsxODhdOworCXVpbnQJaWFkZHIwOwkJLyogMHgyNDgwMCAtIEluZGl2ZHVhbCBhZGRyZXNzIHJlZ2lzdGVyIDAgKi8KKwl1aW50CWlhZGRyMTsJCS8qIDB4MjQ4MDQgLSBJbmRpdmR1YWwgYWRkcmVzcyByZWdpc3RlciAxICovCisJdWludAlpYWRkcjI7CQkvKiAweDI0ODA4IC0gSW5kaXZkdWFsIGFkZHJlc3MgcmVnaXN0ZXIgMiAqLworCXVpbnQJaWFkZHIzOwkJLyogMHgyNDgwYyAtIEluZGl2ZHVhbCBhZGRyZXNzIHJlZ2lzdGVyIDMgKi8KKwl1aW50CWlhZGRyNDsJCS8qIDB4MjQ4MTAgLSBJbmRpdmR1YWwgYWRkcmVzcyByZWdpc3RlciA0ICovCisJdWludAlpYWRkcjU7CQkvKiAweDI0ODE0IC0gSW5kaXZkdWFsIGFkZHJlc3MgcmVnaXN0ZXIgNSAqLworCXVpbnQJaWFkZHI2OwkJLyogMHgyNDgxOCAtIEluZGl2ZHVhbCBhZGRyZXNzIHJlZ2lzdGVyIDYgKi8KKwl1aW50CWlhZGRyNzsJCS8qIDB4MjQ4MWMgLSBJbmRpdmR1YWwgYWRkcmVzcyByZWdpc3RlciA3ICovCisJY2hhcglyZXM1MVs5Nl07CisJdWludAlnYWRkcjA7CQkvKiAweDI0ODgwIC0gR2xvYmFsIGFkZHJlc3MgcmVnaXN0ZXIgMCAqLworCXVpbnQJZ2FkZHIxOwkJLyogMHgyNDg4NCAtIEdsb2JhbCBhZGRyZXNzIHJlZ2lzdGVyIDEgKi8KKwl1aW50CWdhZGRyMjsJCS8qIDB4MjQ4ODggLSBHbG9iYWwgYWRkcmVzcyByZWdpc3RlciAyICovCisJdWludAlnYWRkcjM7CQkvKiAweDI0ODhjIC0gR2xvYmFsIGFkZHJlc3MgcmVnaXN0ZXIgMyAqLworCXVpbnQJZ2FkZHI0OwkJLyogMHgyNDg5MCAtIEdsb2JhbCBhZGRyZXNzIHJlZ2lzdGVyIDQgKi8KKwl1aW50CWdhZGRyNTsJCS8qIDB4MjQ4OTQgLSBHbG9iYWwgYWRkcmVzcyByZWdpc3RlciA1ICovCisJdWludAlnYWRkcjY7CQkvKiAweDI0ODk4IC0gR2xvYmFsIGFkZHJlc3MgcmVnaXN0ZXIgNiAqLworCXVpbnQJZ2FkZHI3OwkJLyogMHgyNDg5YyAtIEdsb2JhbCBhZGRyZXNzIHJlZ2lzdGVyIDcgKi8KKwljaGFyCXJlczUyWzM1Ml07CisgICAgICAgIHVpbnQgICAgZmlmb2NmZzsgICAgICAgIC8qIDB4MjRBMDAgLSBGSUZPIGludGVyZmFjZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisgICAgICAgIGNoYXIgICAgcmVzNTNbNTAwXTsKKyAgICAgICAgdWludCAgICBhdHRyOyAgICAgICAgICAgLyogMHgyNEJGOCAtIERNQSBBdHRyaWJ1dGUgcmVnaXN0ZXIgKi8gIAorICAgICAgICB1aW50ICAgIGF0dHJlbGk7ICAgICAgICAvKiAweDI0QkZDIC0gRE1BIEF0dHJpYnV0ZSBleHRyYWN0IGxlbmd0aCBhbmQgaW5kZXggcmVnaXN0ZXIgKi8gIAorICAgICAgICBjaGFyICAgIHJlczU0WzEwMjRdOworfSBjY3NyX3RzZWNfdDsKKworLyogUElDIFJlZ2lzdGVycygweDRfMDAwMC0weDZfMTAwMCkgKi8KKwordHlwZWRlZiBzdHJ1Y3QgY2Nzcl9waWMgeworCWNoYXIJcmVzMVs2NF07CisJdWludAlpcGlkcjA7CQkvKiAweDQwMDQwIC0gSW50ZXJwcm9jZXNzb3IgSW50ZXJydXB0IERpc3BhdGNoIFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczJbMTJdOworCXVpbnQJaXBpZHIxOwkJLyogMHg0MDA1MCAtIEludGVycHJvY2Vzc29yIEludGVycnVwdCBEaXNwYXRjaCBSZWdpc3RlciAxICovCisJY2hhcglyZXMzWzEyXTsKKwl1aW50CWlwaWRyMjsJCS8qIDB4NDAwNjAgLSBJbnRlcnByb2Nlc3NvciBJbnRlcnJ1cHQgRGlzcGF0Y2ggUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzNFsxMl07CisJdWludAlpcGlkcjM7CQkvKiAweDQwMDcwIC0gSW50ZXJwcm9jZXNzb3IgSW50ZXJydXB0IERpc3BhdGNoIFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczVbMTJdOworCXVpbnQJY3RwcjsJCS8qIDB4NDAwODAgLSBDdXJyZW50IFRhc2sgUHJpb3JpdHkgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczZbMTJdOworCXVpbnQJd2hvYW1pOwkJLyogMHg0MDA5MCAtIFdobyBBbSBJIFJlZ2lzdGVyICovCisJY2hhcglyZXM3WzEyXTsKKwl1aW50CWlhY2s7CQkvKiAweDQwMGEwIC0gSW50ZXJydXB0IEFja25vd2xlZGdlIFJlZ2lzdGVyICovCisJY2hhcglyZXM4WzEyXTsKKwl1aW50CWVvaTsJCS8qIDB4NDAwYjAgLSBFbmQgT2YgSW50ZXJydXB0IFJlZ2lzdGVyICovCisJY2hhcglyZXM5WzM5MTZdOworCXVpbnQJZnJyOwkJLyogMHg0MTAwMCAtIEZlYXR1cmUgUmVwb3J0aW5nIFJlZ2lzdGVyICovCisJY2hhcglyZXMxMFsyOF07CisJdWludAlnY3I7CQkvKiAweDQxMDIwIC0gR2xvYmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwljaGFyCXJlczExWzkyXTsKKwl1aW50CXZpcjsJCS8qIDB4NDEwODAgLSBWZW5kb3IgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgKi8KKwljaGFyCXJlczEyWzEyXTsKKwl1aW50CXBpcjsJCS8qIDB4NDEwOTAgLSBQcm9jZXNzb3IgSW5pdGlhbGl6YXRpb24gUmVnaXN0ZXIgKi8KKwljaGFyCXJlczEzWzEyXTsKKwl1aW50CWlwaXZwcjA7CS8qIDB4NDEwYTAgLSBJUEkgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczE0WzEyXTsKKwl1aW50CWlwaXZwcjE7CS8qIDB4NDEwYjAgLSBJUEkgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDEgKi8KKwljaGFyCXJlczE1WzEyXTsKKwl1aW50CWlwaXZwcjI7CS8qIDB4NDEwYzAgLSBJUEkgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDIgKi8KKwljaGFyCXJlczE2WzEyXTsKKwl1aW50CWlwaXZwcjM7CS8qIDB4NDEwZDAgLSBJUEkgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczE3WzEyXTsKKwl1aW50CXN2cjsJCS8qIDB4NDEwZTAgLSBTcHVyaW91cyBWZWN0b3IgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczE4WzEyXTsKKwl1aW50CXRmcnI7CQkvKiAweDQxMGYwIC0gVGltZXIgRnJlcXVlbmN5IFJlcG9ydGluZyBSZWdpc3RlciAqLworCWNoYXIJcmVzMTlbMTJdOworCXVpbnQJZ3RjY3IwOwkJLyogMHg0MTEwMCAtIEdsb2JhbCBUaW1lciBDdXJyZW50IENvdW50IFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczIwWzEyXTsKKwl1aW50CWd0YmNyMDsJCS8qIDB4NDExMTAgLSBHbG9iYWwgVGltZXIgQmFzZSBDb3VudCBSZWdpc3RlciAwICovCisJY2hhcglyZXMyMVsxMl07CisJdWludAlndHZwcjA7CQkvKiAweDQxMTIwIC0gR2xvYmFsIFRpbWVyIFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAwICovCisJY2hhcglyZXMyMlsxMl07CisJdWludAlndGRyMDsJCS8qIDB4NDExMzAgLSBHbG9iYWwgVGltZXIgRGVzdGluYXRpb24gUmVnaXN0ZXIgMCAqLworCWNoYXIJcmVzMjNbMTJdOworCXVpbnQJZ3RjY3IxOwkJLyogMHg0MTE0MCAtIEdsb2JhbCBUaW1lciBDdXJyZW50IENvdW50IFJlZ2lzdGVyIDEgKi8KKwljaGFyCXJlczI0WzEyXTsKKwl1aW50CWd0YmNyMTsJCS8qIDB4NDExNTAgLSBHbG9iYWwgVGltZXIgQmFzZSBDb3VudCBSZWdpc3RlciAxICovCisJY2hhcglyZXMyNVsxMl07CisJdWludAlndHZwcjE7CQkvKiAweDQxMTYwIC0gR2xvYmFsIFRpbWVyIFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAxICovCisJY2hhcglyZXMyNlsxMl07CisJdWludAlndGRyMTsJCS8qIDB4NDExNzAgLSBHbG9iYWwgVGltZXIgRGVzdGluYXRpb24gUmVnaXN0ZXIgMSAqLworCWNoYXIJcmVzMjdbMTJdOworCXVpbnQJZ3RjY3IyOwkJLyogMHg0MTE4MCAtIEdsb2JhbCBUaW1lciBDdXJyZW50IENvdW50IFJlZ2lzdGVyIDIgKi8KKwljaGFyCXJlczI4WzEyXTsKKwl1aW50CWd0YmNyMjsJCS8qIDB4NDExOTAgLSBHbG9iYWwgVGltZXIgQmFzZSBDb3VudCBSZWdpc3RlciAyICovCisJY2hhcglyZXMyOVsxMl07CisJdWludAlndHZwcjI7CQkvKiAweDQxMWEwIC0gR2xvYmFsIFRpbWVyIFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAyICovCisJY2hhcglyZXMzMFsxMl07CisJdWludAlndGRyMjsJCS8qIDB4NDExYjAgLSBHbG9iYWwgVGltZXIgRGVzdGluYXRpb24gUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzMzFbMTJdOworCXVpbnQJZ3RjY3IzOwkJLyogMHg0MTFjMCAtIEdsb2JhbCBUaW1lciBDdXJyZW50IENvdW50IFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczMyWzEyXTsKKwl1aW50CWd0YmNyMzsJCS8qIDB4NDExZDAgLSBHbG9iYWwgVGltZXIgQmFzZSBDb3VudCBSZWdpc3RlciAzICovCisJY2hhcglyZXMzM1sxMl07CisJdWludAlndHZwcjM7CQkvKiAweDQxMWUwIC0gR2xvYmFsIFRpbWVyIFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAzICovCisJY2hhcglyZXMzNFsxMl07CisJdWludAlndGRyMzsJCS8qIDB4NDExZjAgLSBHbG9iYWwgVGltZXIgRGVzdGluYXRpb24gUmVnaXN0ZXIgMyAqLworCWNoYXIJcmVzMzVbMjY4XTsKKwl1aW50CXRjcjsJCS8qIDB4NDEzMDAgLSBUaW1lciBDb250cm9sIFJlZ2lzdGVyICovCisJY2hhcglyZXMzNlsxMl07CisJdWludAlpcnFzcjA7CQkvKiAweDQxMzEwIC0gSVJRX09VVCBTdW1tYXJ5IFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczM3WzEyXTsKKwl1aW50CWlycXNyMTsJCS8qIDB4NDEzMjAgLSBJUlFfT1VUIFN1bW1hcnkgUmVnaXN0ZXIgMSAqLworCWNoYXIJcmVzMzhbMTJdOworCXVpbnQJY2lzcjA7CQkvKiAweDQxMzMwIC0gQ3JpdGljYWwgSW50ZXJydXB0IFN1bW1hcnkgUmVnaXN0ZXIgMCAqLworCWNoYXIJcmVzMzlbMTJdOworCXVpbnQJY2lzcjE7CQkvKiAweDQxMzQwIC0gQ3JpdGljYWwgSW50ZXJydXB0IFN1bW1hcnkgUmVnaXN0ZXIgMSAqLworCWNoYXIJcmVzNDBbMTJdOworCXVpbnQJcG0wbXIwOwkJLyogMHg0MTM1MCAtIFBlcmZvcm1hbmNlIG1vbml0b3IgMCBtYXNrIHJlZ2lzdGVyIDAgICovCisJY2hhcglyZXM0MVsxMl07CisJdWludAlwbTBtcjE7CQkvKiAweDQxMzYwIC0gUGVyZm9ybWFuY2UgbW9uaXRvciAwIG1hc2sgcmVnaXN0ZXIgMSAgKi8KKwljaGFyCXJlczQyWzEyXTsKKwl1aW50CXBtMW1yMDsJCS8qIDB4NDEzNzAgLSBQZXJmb3JtYW5jZSBtb25pdG9yIDEgbWFzayByZWdpc3RlciAwICAqLworCWNoYXIJcmVzNDNbMTJdOworCXVpbnQJcG0xbXIxOwkJLyogMHg0MTM4MCAtIFBlcmZvcm1hbmNlIG1vbml0b3IgMSBtYXNrIHJlZ2lzdGVyIDEgICovCisJY2hhcglyZXM0NFsxMl07CisJdWludAlwbTJtcjA7CQkvKiAweDQxMzkwIC0gUGVyZm9ybWFuY2UgbW9uaXRvciAyIG1hc2sgcmVnaXN0ZXIgMCAgKi8KKwljaGFyCXJlczQ1WzEyXTsKKwl1aW50CXBtMm1yMTsJCS8qIDB4NDEzQTAgLSBQZXJmb3JtYW5jZSBtb25pdG9yIDIgbWFzayByZWdpc3RlciAxICAqLworCWNoYXIJcmVzNDZbMTJdOworICAgICAgICB1aW50CXBtM21yMDsJCS8qIDB4NDEzQjAgLSBQZXJmb3JtYW5jZSBtb25pdG9yIDMgbWFzayByZWdpc3RlciAwICAqLworCWNoYXIJcmVzNDdbMTJdOworCXVpbnQJcG0zbXIxOwkJLyogMHg0MTNDMCAtIFBlcmZvcm1hbmNlIG1vbml0b3IgMyBtYXNrIHJlZ2lzdGVyIDEgICovCisJY2hhcglyZXM0OFs2MF07CisJdWludAltc2dyMDsJCS8qIDB4NDE0MDAgLSBNZXNzYWdlIFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczQ5WzEyXTsKKwl1aW50CW1zZ3IxOwkJLyogMHg0MTQxMCAtIE1lc3NhZ2UgUmVnaXN0ZXIgMSAqLworCWNoYXIJcmVzNTBbMTJdOworCXVpbnQJbXNncjI7CQkvKiAweDQxNDIwIC0gTWVzc2FnZSBSZWdpc3RlciAyICovCisJY2hhcglyZXM1MVsxMl07CisJdWludAltc2dyMzsJCS8qIDB4NDE0MzAgLSBNZXNzYWdlIFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczUyWzIwNF07CisJdWludAltZXI7CQkvKiAweDQxNTAwIC0gTWVzc2FnZSBFbmFibGUgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczUzWzEyXTsKKwl1aW50CW1zcjsJCS8qIDB4NDE1MTAgLSBNZXNzYWdlIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzNTRbNjAxNDBdOworCXVpbnQJZWl2cHIwOwkJLyogMHg1MDAwMCAtIEV4dGVybmFsIEludGVycnVwdCBWZWN0b3IvUHJpb3JpdHkgUmVnaXN0ZXIgMCAqLworCWNoYXIJcmVzNTVbMTJdOworCXVpbnQJZWlkcjA7CQkvKiAweDUwMDEwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczU2WzEyXTsKKwl1aW50CWVpdnByMTsJCS8qIDB4NTAwMjAgLSBFeHRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDEgKi8KKwljaGFyCXJlczU3WzEyXTsKKwl1aW50CWVpZHIxOwkJLyogMHg1MDAzMCAtIEV4dGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxICovCisJY2hhcglyZXM1OFsxMl07CisJdWludAllaXZwcjI7CQkvKiAweDUwMDQwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAyICovCisJY2hhcglyZXM1OVsxMl07CisJdWludAllaWRyMjsJCS8qIDB4NTAwNTAgLSBFeHRlcm5hbCBJbnRlcnJ1cHQgRGVzdGluYXRpb24gUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzNjBbMTJdOworCXVpbnQJZWl2cHIzOwkJLyogMHg1MDA2MCAtIEV4dGVybmFsIEludGVycnVwdCBWZWN0b3IvUHJpb3JpdHkgUmVnaXN0ZXIgMyAqLworCWNoYXIJcmVzNjFbMTJdOworCXVpbnQJZWlkcjM7CQkvKiAweDUwMDcwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczYyWzEyXTsKKwl1aW50CWVpdnByNDsJCS8qIDB4NTAwODAgLSBFeHRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDQgKi8KKwljaGFyCXJlczYzWzEyXTsKKwl1aW50CWVpZHI0OwkJLyogMHg1MDA5MCAtIEV4dGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciA0ICovCisJY2hhcglyZXM2NFsxMl07CisJdWludAllaXZwcjU7CQkvKiAweDUwMGEwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciA1ICovCisJY2hhcglyZXM2NVsxMl07CisJdWludAllaWRyNTsJCS8qIDB4NTAwYjAgLSBFeHRlcm5hbCBJbnRlcnJ1cHQgRGVzdGluYXRpb24gUmVnaXN0ZXIgNSAqLworCWNoYXIJcmVzNjZbMTJdOworCXVpbnQJZWl2cHI2OwkJLyogMHg1MDBjMCAtIEV4dGVybmFsIEludGVycnVwdCBWZWN0b3IvUHJpb3JpdHkgUmVnaXN0ZXIgNiAqLworCWNoYXIJcmVzNjdbMTJdOworCXVpbnQJZWlkcjY7CQkvKiAweDUwMGQwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDYgKi8KKwljaGFyCXJlczY4WzEyXTsKKwl1aW50CWVpdnByNzsJCS8qIDB4NTAwZTAgLSBFeHRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDcgKi8KKwljaGFyCXJlczY5WzEyXTsKKwl1aW50CWVpZHI3OwkJLyogMHg1MDBmMCAtIEV4dGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciA3ICovCisJY2hhcglyZXM3MFsxMl07CisJdWludAllaXZwcjg7CQkvKiAweDUwMTAwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciA4ICovCisJY2hhcglyZXM3MVsxMl07CisJdWludAllaWRyODsJCS8qIDB4NTAxMTAgLSBFeHRlcm5hbCBJbnRlcnJ1cHQgRGVzdGluYXRpb24gUmVnaXN0ZXIgOCAqLworCWNoYXIJcmVzNzJbMTJdOworCXVpbnQJZWl2cHI5OwkJLyogMHg1MDEyMCAtIEV4dGVybmFsIEludGVycnVwdCBWZWN0b3IvUHJpb3JpdHkgUmVnaXN0ZXIgOSAqLworCWNoYXIJcmVzNzNbMTJdOworCXVpbnQJZWlkcjk7CQkvKiAweDUwMTMwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDkgKi8KKwljaGFyCXJlczc0WzEyXTsKKwl1aW50CWVpdnByMTA7CS8qIDB4NTAxNDAgLSBFeHRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDEwICovCisJY2hhcglyZXM3NVsxMl07CisJdWludAllaWRyMTA7CQkvKiAweDUwMTUwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDEwICovCisJY2hhcglyZXM3NlsxMl07CisJdWludAllaXZwcjExOwkvKiAweDUwMTYwIC0gRXh0ZXJuYWwgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAxMSAqLworCWNoYXIJcmVzNzdbMTJdOworCXVpbnQJZWlkcjExOwkJLyogMHg1MDE3MCAtIEV4dGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxMSAqLworCWNoYXIJcmVzNzhbMTQwXTsKKwl1aW50CWlpdnByMDsJCS8qIDB4NTAyMDAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczc5WzEyXTsKKwl1aW50CWlpZHIwOwkJLyogMHg1MDIxMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAwICovCisJY2hhcglyZXM4MFsxMl07CisJdWludAlpaXZwcjE7CQkvKiAweDUwMjIwIC0gSW50ZXJuYWwgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAxICovCisJY2hhcglyZXM4MVsxMl07CisJdWludAlpaWRyMTsJCS8qIDB4NTAyMzAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgRGVzdGluYXRpb24gUmVnaXN0ZXIgMSAqLworCWNoYXIJcmVzODJbMTJdOworCXVpbnQJaWl2cHIyOwkJLyogMHg1MDI0MCAtIEludGVybmFsIEludGVycnVwdCBWZWN0b3IvUHJpb3JpdHkgUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzODNbMTJdOworCXVpbnQJaWlkcjI7CQkvKiAweDUwMjUwIC0gSW50ZXJuYWwgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDIgKi8KKwljaGFyCXJlczg0WzEyXTsKKwl1aW50CWlpdnByMzsJCS8qIDB4NTAyNjAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczg1WzEyXTsKKwl1aW50CWlpZHIzOwkJLyogMHg1MDI3MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAzICovCisJY2hhcglyZXM4NlsxMl07CisJdWludAlpaXZwcjQ7CQkvKiAweDUwMjgwIC0gSW50ZXJuYWwgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciA0ICovCisJY2hhcglyZXM4N1sxMl07CisJdWludAlpaWRyNDsJCS8qIDB4NTAyOTAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgRGVzdGluYXRpb24gUmVnaXN0ZXIgNCAqLworCWNoYXIJcmVzODhbMTJdOworCXVpbnQJaWl2cHI1OwkJLyogMHg1MDJhMCAtIEludGVybmFsIEludGVycnVwdCBWZWN0b3IvUHJpb3JpdHkgUmVnaXN0ZXIgNSAqLworCWNoYXIJcmVzODlbMTJdOworCXVpbnQJaWlkcjU7CQkvKiAweDUwMmIwIC0gSW50ZXJuYWwgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDUgKi8KKwljaGFyCXJlczkwWzEyXTsKKwl1aW50CWlpdnByNjsJCS8qIDB4NTAyYzAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDYgKi8KKwljaGFyCXJlczkxWzEyXTsKKwl1aW50CWlpZHI2OwkJLyogMHg1MDJkMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciA2ICovCisJY2hhcglyZXM5MlsxMl07CisJdWludAlpaXZwcjc7CQkvKiAweDUwMmUwIC0gSW50ZXJuYWwgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciA3ICovCisJY2hhcglyZXM5M1sxMl07CisJdWludAlpaWRyNzsJCS8qIDB4NTAyZjAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgRGVzdGluYXRpb24gUmVnaXN0ZXIgNyAqLworCWNoYXIJcmVzOTRbMTJdOworCXVpbnQJaWl2cHI4OwkJLyogMHg1MDMwMCAtIEludGVybmFsIEludGVycnVwdCBWZWN0b3IvUHJpb3JpdHkgUmVnaXN0ZXIgOCAqLworCWNoYXIJcmVzOTVbMTJdOworCXVpbnQJaWlkcjg7CQkvKiAweDUwMzEwIC0gSW50ZXJuYWwgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDggKi8KKwljaGFyCXJlczk2WzEyXTsKKwl1aW50CWlpdnByOTsJCS8qIDB4NTAzMjAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDkgKi8KKwljaGFyCXJlczk3WzEyXTsKKwl1aW50CWlpZHI5OwkJLyogMHg1MDMzMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciA5ICovCisJY2hhcglyZXM5OFsxMl07CisJdWludAlpaXZwcjEwOwkvKiAweDUwMzQwIC0gSW50ZXJuYWwgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAxMCAqLworCWNoYXIJcmVzOTlbMTJdOworCXVpbnQJaWlkcjEwOwkJLyogMHg1MDM1MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxMCAqLworCWNoYXIJcmVzMTAwWzEyXTsKKwl1aW50CWlpdnByMTE7CS8qIDB4NTAzNjAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDExICovCisJY2hhcglyZXMxMDFbMTJdOworCXVpbnQJaWlkcjExOwkJLyogMHg1MDM3MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxMSAqLworCWNoYXIJcmVzMTAyWzEyXTsKKwl1aW50CWlpdnByMTI7CS8qIDB4NTAzODAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDEyICovCisJY2hhcglyZXMxMDNbMTJdOworCXVpbnQJaWlkcjEyOwkJLyogMHg1MDM5MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxMiAqLworCWNoYXIJcmVzMTA0WzEyXTsKKwl1aW50CWlpdnByMTM7CS8qIDB4NTAzYTAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDEzICovCisJY2hhcglyZXMxMDVbMTJdOworCXVpbnQJaWlkcjEzOwkJLyogMHg1MDNiMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxMyAqLworCWNoYXIJcmVzMTA2WzEyXTsKKwl1aW50CWlpdnByMTQ7CS8qIDB4NTAzYzAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDE0ICovCisJY2hhcglyZXMxMDdbMTJdOworCXVpbnQJaWlkcjE0OwkJLyogMHg1MDNkMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxNCAqLworCWNoYXIJcmVzMTA4WzEyXTsKKwl1aW50CWlpdnByMTU7CS8qIDB4NTAzZTAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDE1ICovCisJY2hhcglyZXMxMDlbMTJdOworCXVpbnQJaWlkcjE1OwkJLyogMHg1MDNmMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxNSAqLworCWNoYXIJcmVzMTEwWzEyXTsKKwl1aW50CWlpdnByMTY7CS8qIDB4NTA0MDAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDE2ICovCisJY2hhcglyZXMxMTFbMTJdOworCXVpbnQJaWlkcjE2OwkJLyogMHg1MDQxMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxNiAqLworCWNoYXIJcmVzMTEyWzEyXTsKKwl1aW50CWlpdnByMTc7CS8qIDB4NTA0MjAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDE3ICovCisJY2hhcglyZXMxMTNbMTJdOworCXVpbnQJaWlkcjE3OwkJLyogMHg1MDQzMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxNyAqLworCWNoYXIJcmVzMTE0WzEyXTsKKwl1aW50CWlpdnByMTg7CS8qIDB4NTA0NDAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDE4ICovCisJY2hhcglyZXMxMTVbMTJdOworCXVpbnQJaWlkcjE4OwkJLyogMHg1MDQ1MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxOCAqLworCWNoYXIJcmVzMTE2WzEyXTsKKwl1aW50CWlpdnByMTk7CS8qIDB4NTA0NjAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDE5ICovCisJY2hhcglyZXMxMTdbMTJdOworCXVpbnQJaWlkcjE5OwkJLyogMHg1MDQ3MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAxOSAqLworCWNoYXIJcmVzMTE4WzEyXTsKKwl1aW50CWlpdnByMjA7CS8qIDB4NTA0ODAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDIwICovCisJY2hhcglyZXMxMTlbMTJdOworCXVpbnQJaWlkcjIwOwkJLyogMHg1MDQ5MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyMCAqLworCWNoYXIJcmVzMTIwWzEyXTsKKwl1aW50CWlpdnByMjE7CS8qIDB4NTA0YTAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDIxICovCisJY2hhcglyZXMxMjFbMTJdOworCXVpbnQJaWlkcjIxOwkJLyogMHg1MDRiMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyMSAqLworCWNoYXIJcmVzMTIyWzEyXTsKKwl1aW50CWlpdnByMjI7CS8qIDB4NTA0YzAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDIyICovCisJY2hhcglyZXMxMjNbMTJdOworCXVpbnQJaWlkcjIyOwkJLyogMHg1MDRkMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyMiAqLworCWNoYXIJcmVzMTI0WzEyXTsKKwl1aW50CWlpdnByMjM7CS8qIDB4NTA0ZTAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDIzICovCisJY2hhcglyZXMxMjVbMTJdOworCXVpbnQJaWlkcjIzOwkJLyogMHg1MDRmMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyMyAqLworCWNoYXIJcmVzMTI2WzEyXTsKKwl1aW50CWlpdnByMjQ7CS8qIDB4NTA1MDAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDI0ICovCisJY2hhcglyZXMxMjdbMTJdOworCXVpbnQJaWlkcjI0OwkJLyogMHg1MDUxMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyNCAqLworCWNoYXIJcmVzMTI4WzEyXTsKKwl1aW50CWlpdnByMjU7CS8qIDB4NTA1MjAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDI1ICovCisJY2hhcglyZXMxMjlbMTJdOworCXVpbnQJaWlkcjI1OwkJLyogMHg1MDUzMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyNSAqLworCWNoYXIJcmVzMTMwWzEyXTsKKwl1aW50CWlpdnByMjY7CS8qIDB4NTA1NDAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDI2ICovCisJY2hhcglyZXMxMzFbMTJdOworCXVpbnQJaWlkcjI2OwkJLyogMHg1MDU1MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyNiAqLworCWNoYXIJcmVzMTMyWzEyXTsKKwl1aW50CWlpdnByMjc7CS8qIDB4NTA1NjAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDI3ICovCisJY2hhcglyZXMxMzNbMTJdOworCXVpbnQJaWlkcjI3OwkJLyogMHg1MDU3MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyNyAqLworCWNoYXIJcmVzMTM0WzEyXTsKKwl1aW50CWlpdnByMjg7CS8qIDB4NTA1ODAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDI4ICovCisJY2hhcglyZXMxMzVbMTJdOworCXVpbnQJaWlkcjI4OwkJLyogMHg1MDU5MCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyOCAqLworCWNoYXIJcmVzMTM2WzEyXTsKKwl1aW50CWlpdnByMjk7CS8qIDB4NTA1YTAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDI5ICovCisJY2hhcglyZXMxMzdbMTJdOworCXVpbnQJaWlkcjI5OwkJLyogMHg1MDViMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAyOSAqLworCWNoYXIJcmVzMTM4WzEyXTsKKwl1aW50CWlpdnByMzA7CS8qIDB4NTA1YzAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDMwICovCisJY2hhcglyZXMxMzlbMTJdOworCXVpbnQJaWlkcjMwOwkJLyogMHg1MDVkMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAzMCAqLworCWNoYXIJcmVzMTQwWzEyXTsKKwl1aW50CWlpdnByMzE7CS8qIDB4NTA1ZTAgLSBJbnRlcm5hbCBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDMxICovCisJY2hhcglyZXMxNDFbMTJdOworCXVpbnQJaWlkcjMxOwkJLyogMHg1MDVmMCAtIEludGVybmFsIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAzMSAqLworICAgICAgICBjaGFyCXJlczE0Mls0MTA4XTsKKwl1aW50CW1pdnByMDsJCS8qIDB4NTE2MDAgLSBNZXNzYWdpbmcgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAwICovCisJY2hhcglyZXMxNDNbMTJdOworCXVpbnQJbWlkcjA7CQkvKiAweDUxNjEwIC0gTWVzc2FnaW5nIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAwICovCisJY2hhcglyZXMxNDRbMTJdOworCXVpbnQJbWl2cHIxOwkJLyogMHg1MTYyMCAtIE1lc3NhZ2luZyBJbnRlcnJ1cHQgVmVjdG9yL1ByaW9yaXR5IFJlZ2lzdGVyIDEgKi8KKwljaGFyCXJlczE0NVsxMl07CisJdWludAltaWRyMTsJCS8qIDB4NTE2MzAgLSBNZXNzYWdpbmcgSW50ZXJydXB0IERlc3RpbmF0aW9uIFJlZ2lzdGVyIDEgKi8KKwljaGFyCXJlczE0NlsxMl07CisJdWludAltaXZwcjI7CQkvKiAweDUxNjQwIC0gTWVzc2FnaW5nIEludGVycnVwdCBWZWN0b3IvUHJpb3JpdHkgUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzMTQ3WzEyXTsKKwl1aW50CW1pZHIyOwkJLyogMHg1MTY1MCAtIE1lc3NhZ2luZyBJbnRlcnJ1cHQgRGVzdGluYXRpb24gUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzMTQ4WzEyXTsKKwl1aW50CW1pdnByMzsJCS8qIDB4NTE2NjAgLSBNZXNzYWdpbmcgSW50ZXJydXB0IFZlY3Rvci9Qcmlvcml0eSBSZWdpc3RlciAzICovCisJY2hhcglyZXMxNDlbMTJdOworCXVpbnQJbWlkcjM7CQkvKiAweDUxNjcwIC0gTWVzc2FnaW5nIEludGVycnVwdCBEZXN0aW5hdGlvbiBSZWdpc3RlciAzICovCisJY2hhcglyZXMxNTBbNTk4NTJdOworCXVpbnQJaXBpMGRyMDsJLyogMHg2MDA0MCAtIFByb2Nlc3NvciAwIEludGVycHJvY2Vzc29yIEludGVycnVwdCBEaXNwYXRjaCBSZWdpc3RlciAwICovCisJY2hhcglyZXMxNTFbMTJdOworCXVpbnQJaXBpMGRyMTsJLyogMHg2MDA1MCAtIFByb2Nlc3NvciAwIEludGVycHJvY2Vzc29yIEludGVycnVwdCBEaXNwYXRjaCBSZWdpc3RlciAxICovCisJY2hhcglyZXMxNTJbMTJdOworCXVpbnQJaXBpMGRyMjsJLyogMHg2MDA2MCAtIFByb2Nlc3NvciAwIEludGVycHJvY2Vzc29yIEludGVycnVwdCBEaXNwYXRjaCBSZWdpc3RlciAyICovCisJY2hhcglyZXMxNTNbMTJdOworCXVpbnQJaXBpMGRyMzsJLyogMHg2MDA3MCAtIFByb2Nlc3NvciAwIEludGVycHJvY2Vzc29yIEludGVycnVwdCBEaXNwYXRjaCBSZWdpc3RlciAzICovCisJY2hhcglyZXMxNTRbMTJdOworCXVpbnQJY3RwcjA7CQkvKiAweDYwMDgwIC0gQ3VycmVudCBUYXNrIFByaW9yaXR5IFJlZ2lzdGVyIGZvciBQcm9jZXNzb3IgMCAqLworCWNoYXIJcmVzMTU1WzEyXTsKKwl1aW50CXdob2FtaTA7CS8qIDB4NjAwOTAgLSBXaG8gQW0gSSBSZWdpc3RlciBmb3IgUHJvY2Vzc29yIDAgKi8KKwljaGFyCXJlczE1NlsxMl07CisJdWludAlpYWNrMDsJCS8qIDB4NjAwYTAgLSBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgZm9yIFByb2Nlc3NvciAwICovCisJY2hhcglyZXMxNTdbMTJdOworCXVpbnQJZW9pMDsJCS8qIDB4NjAwYjAgLSBFbmQgT2YgSW50ZXJydXB0IFJlZ2lzdGVyIGZvciBQcm9jZXNzb3IgMCAqLworCWNoYXIJcmVzMTU4WzM5MTZdOworfSBjY3NyX3BpY190OworCisvKiBSYXBpZElPIFJlZ2lzdGVycygweGNfMDAwMC0weGVfMDAwMCkgKi8KKwordHlwZWRlZiBzdHJ1Y3QgY2Nzcl9yaW8geworCXVpbnQJZGlkY2FyOwkJLyogMHhjMDAwMCAtIERldmljZSBJZGVudGl0eSBDYXBhYmlsaXR5IFJlZ2lzdGVyICovCisJdWludAlkaWNhcjsJCS8qIDB4YzAwMDQgLSBEZXZpY2UgSW5mb3JtYXRpb24gQ2FwYWJpbGl0eSBSZWdpc3RlciAqLworCXVpbnQJYWlkY2FyOwkJLyogMHhjMDAwOCAtIEFzc2VtYmx5IElkZW50aXR5IENhcGFiaWxpdHkgUmVnaXN0ZXIgKi8KKwl1aW50CWFpY2FyOwkJLyogMHhjMDAwYyAtIEFzc2VtYmx5IEluZm9ybWF0aW9uIENhcGFiaWxpdHkgUmVnaXN0ZXIgKi8KKwl1aW50CXBlZmNhcjsJCS8qIDB4YzAwMTAgLSBQcm9jZXNzaW5nIEVsZW1lbnQgRmVhdHVyZXMgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLworCXVpbnQJc3BpY2FyOwkJLyogMHhjMDAxNCAtIFN3aXRjaCBQb3J0IEluZm9ybWF0aW9uIENhcGFiaWxpdHkgUmVnaXN0ZXIgKi8KKwl1aW50CXNvY2FyOwkJLyogMHhjMDAxOCAtIFNvdXJjZSBPcGVyYXRpb25zIENhcGFiaWxpdHkgUmVnaXN0ZXIgKi8KKwl1aW50CWRvY2FyOwkJLyogMHhjMDAxYyAtIERlc3RpbmF0aW9uIE9wZXJhdGlvbnMgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLworCWNoYXIJcmVzMVszMl07CisJdWludAltc3I7CQkvKiAweGMwMDQwIC0gTWFpbGJveCBDb21tYW5kIEFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1aW50CXB3ZGNzcjsJCS8qIDB4YzAwNDQgLSBQb3J0LVdyaXRlIGFuZCBEb29yYmVsbCBDb21tYW5kIEFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczJbNF07CisJdWludAlwZWxsY2NzcjsJLyogMHhjMDA0YyAtIFByb2Nlc3NpbmcgRWxlbWVudCBMb2dpYyBMYXllciBDb250cm9sIENvbW1hbmQgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzM1sxMl07CisJdWludAlsY3NiYWNzcjsJLyogMHhjMDA1YyAtIExvY2FsIENvbmZpZ3VyYXRpb24gU3BhY2UgQmFzZSBBZGRyZXNzIENvbW1hbmQgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworCXVpbnQJYmRpZGNzcjsJLyogMHhjMDA2MCAtIEJhc2UgRGV2aWNlIElEIENvbW1hbmQgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzNFs0XTsKKwl1aW50CWhiZGlkbGNzcjsJLyogMHhjMDA2OCAtIEhvc3QgQmFzZSBEZXZpY2UgSUQgTG9jayBDb21tYW5kIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1aW50CWN0Y3NyOwkJLyogMHhjMDA2YyAtIENvbXBvbmVudCBUYWcgQ29tbWFuZCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXM1WzE0NF07CisJdWludAlwbWJoMGNzcjsJLyogMHhjMDEwMCAtIDgvMTYgTFAtTFZEUyBQb3J0IE1haW50ZW5hbmNlIEJsb2NrIEhlYWRlciAwIENvbW1hbmQgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzNlsyOF07CisJdWludAlwbHRvY2NzcjsJLyogMHhjMDEyMCAtIFBvcnQgTGluayBUaW1lLW91dCBDb250cm9sIENvbW1hbmQgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworCXVpbnQJcHJ0b2Njc3I7CS8qIDB4YzAxMjQgLSBQb3J0IFJlc3BvbnNlIFRpbWUtb3V0IENvbnRyb2wgQ29tbWFuZCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXM3WzIwXTsKKwl1aW50CXBnY2NzcjsJCS8qIDB4YzAxM2MgLSBQb3J0IEdlbmVyYWwgQ29tbWFuZCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludAlwbG1yZXFjc3I7CS8qIDB4YzAxNDAgLSBQb3J0IExpbmsgTWFpbnRlbmFuY2UgUmVxdWVzdCBDb21tYW5kIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1aW50CXBsbXJlc3Bjc3I7CS8qIDB4YzAxNDQgLSBQb3J0IExpbmsgTWFpbnRlbmFuY2UgUmVzcG9uc2UgQ29tbWFuZCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludAlwbGFzY3NyOwkvKiAweGMwMTQ4IC0gUG9ydCBMb2NhbCBBY2tpZCBTdGF0dXMgQ29tbWFuZCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXM4WzEyXTsKKwl1aW50CXBlc2NzcjsJCS8qIDB4YzAxNTggLSBQb3J0IEVycm9yIGFuZCBTdGF0dXMgQ29tbWFuZCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludAlwY2NzcjsJCS8qIDB4YzAxNWMgLSBQb3J0IENvbnRyb2wgQ29tbWFuZCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXM5WzExODRdOworCXVpbnQJZXJiaDsJCS8qIDB4YzA2MDAgLSBFcnJvciBSZXBvcnRpbmcgQmxvY2sgSGVhZGVyIFJlZ2lzdGVyICovCisJY2hhcglyZXMxMFs0XTsKKwl1aW50CWx0bGVkY3NyOwkvKiAweGMwNjA4IC0gTG9naWNhbC9UcmFuc3BvcnQgbGF5ZXIgZXJyb3IgZGV0ZWN0IHN0YXR1cyByZWdpc3RlciAqLworCXVpbnQJbHRsZWVjc3I7CS8qIDB4YzA2MGMgLSBMb2dpY2FsL1RyYW5zcG9ydCBsYXllciBlcnJvciBlbmFibGUgcmVnaXN0ZXIgKi8KKwljaGFyCXJlczExWzRdOworCXVpbnQJbHRsYWNjc3I7CS8qIDB4YzA2MTQgLSBMb2dpY2FsL1RyYW5zcG9ydCBsYXllciBhZGRyZXNzcyBjYXB0dXJlIHJlZ2lzdGVyICovCisJdWludAlsdGxkaWRjY3NyOwkvKiAweGMwNjE4IC0gTG9naWNhbC9UcmFuc3BvcnQgbGF5ZXIgZGV2aWNlIElEIGNhcHR1cmUgcmVnaXN0ZXIgKi8KKwl1aW50CWx0bGNjY3NyOwkvKiAweGMwNjFjIC0gTG9naWNhbC9UcmFuc3BvcnQgbGF5ZXIgY29udHJvbCBjYXB0dXJlIHJlZ2lzdGVyICovCisJY2hhcglyZXMxMlszMl07CisJdWludAllZGNzcjsJICAgICAgICAvKiAweGMwNjQwIC0gUG9ydCAwIGVycm9yIGRldGVjdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl1aW50CWVyZWNzcjsJICAgICAgICAvKiAweGMwNjQ0IC0gUG9ydCAwIGVycm9yIHJhdGUgZW5hYmxlIHN0YXR1cyByZWdpc3RlciAqLworCXVpbnQJZWNhY3NyOwkgICAgICAgIC8qIDB4YzA2NDggLSBQb3J0IDAgZXJyb3IgY2FwdHVyZSBhdHRyaWJ1dGVzIHJlZ2lzdGVyICovCisJdWludAlwY3NlY2NzcjA7CS8qIDB4YzA2NGMgLSBQb3J0IDAgcGFja2V0L2NvbnRyb2wgc3ltYm9sIGVycm9yIGNhcHR1cmUgcmVnaXN0ZXIgMCAqLworCXVpbnQJcGVjY3NyMTsJLyogMHhjMDY1MCAtIFBvcnQgMCBlcnJvciBjYXB0dXJlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciAxICovCisgICAgICAgIHVpbnQJcGVjY3NyMjsJLyogMHhjMDY1NCAtIFBvcnQgMCBlcnJvciBjYXB0dXJlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciAyICovCisJdWludAlwZWNjc3IzOwkvKiAweGMwNjU4IC0gUG9ydCAwIGVycm9yIGNhcHR1cmUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczEzWzEyXTsKKwl1aW50CWVyY3NyOwkgICAgICAgIC8qIDB4YzA2NjggLSBQb3J0IDAgZXJyb3IgcmF0ZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl1aW50CWVydGNzcjsJICAgICAgICAvKiAweGMwNjZDIC0gUG9ydCAwIGVycm9yIHJhdGUgdGhyZXNob2xkIHN0YXR1cyByZWdpc3RlciovCisJY2hhcglyZXMxNFs2Mzg5Ml07CisJdWludAlsbGNyOwkJLyogMHhkMDAwNCAtIExvZ2ljYWwgTGF5ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCWNoYXIJcmVzMTVbMTJdOworCXVpbnQJZXB3aXNyOwkJLyogMHhkMDAxMCAtIEVycm9yIC8gUG9ydC1Xcml0ZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXMxNlsxMl07CisJdWludAlscmV0Y3I7CQkvKiAweGQwMDIwIC0gTG9naWNhbCBSZXRyeSBFcnJvciBUaHJlc2hvbGQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCWNoYXIJcmVzMTdbOTJdOworCXVpbnQJcHJldGNyOwkJLyogMHhkMDA4MCAtIFBoeXNpY2FsIFJldHJ5IEVyb3JyIFRocmVzaG9sZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJY2hhcglyZXMxOFsxMjRdOworCXVpbnQJYWRpZGNzcjsJLyogMHhkMDEwMCAtIFBvcnQgMCBBbHQuIERldmljZSBJRCBDb21tYW5kIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczE5WzI4XTsKKwl1aW50CXB0YWFjcjsJICAgICAgICAvKiAweGQwMTIwIC0gUG9ydCAwIFBhc3MtVGhyb3VnaC9BY2NlcHQtQWxsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwljaGFyCXJlczIwWzEyXTsKKwl1aW50CWllY3NyOwkgICAgICAgIC8qIDB4ZDAxMzAgLSBQb3J0IDAgSW1wbGVtZW50YXRpb24gRXJyb3IgU3RhdHVzIFJlZ2lzdGVyICovCisJY2hhcglyZXMyMVsxMl07CisJdWludAlwY3I7CQkvKiAweGQwMTQwIC0gUG9ydCAwIFBoc3lpY2FsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJSZWdpc3RlciAqLworCWNoYXIJcmVzMjJbMjBdOworCXVpbnQJc2xjc3I7CSAgICAgICAgLyogMHhkMDE1OCAtIFBvcnQgMCBTZXJpYWwgTGluayBDb21tYW5kIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczIzWzRdOworCXVpbnQJc2xlaXI7CSAgICAgICAgLyogMHhkMDE2MCAtIFBvcnQgMCBTZXJpYWwgTGluayBFcnJvciBJbmplY3Rpb24gUmVnaXN0ZXIgKi8gCisJY2hhcglyZXMyNFsyNzE2XTsKKwl1aW50CXJvd3RhcjA7CS8qIDB4ZDBjMDAgLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBUcmFuc2xhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKwl1aW50CXJvd3RlYXIwOwkvKiAweGQwYzA0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gRXh0LiBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczI1WzhdOworCXVpbnQJcm93YXIwOwkJLyogMHhkMGMxMCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciAwICovCisJY2hhcglyZXMyNlsxMl07CisJdWludAlyb3d0YXIxOwkvKiAweGQwYzIwIC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciAxICovCisJdWludAlyb3d0ZWFyMTsJLyogMHhkMGMyNCAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFRyYW5zbGF0aW9uIEV4dC4gQWRkcmVzcyBSZWdpc3RlciAxICovCisJdWludAlyb3diYXIxOwkvKiAweGQwYzI4IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKwljaGFyCXJlczI3WzRdOworCXVpbnQJcm93YXIxOwkJLyogMHhkMGMzMCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciAxICovCisJdWludAlyb3dzMXIxOwkvKiAweGQwYzM0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgU2VnbWVudCAxIFJlZ2lzdGVyIDEgKi8KKwl1aW50CXJvd3MycjE7CS8qIDB4ZDBjMzggLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBTZWdtZW50IDIgUmVnaXN0ZXIgMSAqLworCXVpbnQJcm93czNyMTsJLyogMHhkMGMzYyAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFNlZ21lbnQgMyBSZWdpc3RlciAxICovCisJdWludAlyb3d0YXIyOwkvKiAweGQwYzQwIC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciAyICovCisJdWludAlyb3d0ZWFyMjsJLyogMHhkMGM0NCAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFRyYW5zbGF0aW9uIEV4dC4gQWRkcmVzcyBSZWdpc3RlciAyICovCisJdWludAlyb3diYXIyOwkvKiAweGQwYzQ4IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKwljaGFyCXJlczI4WzRdOworCXVpbnQJcm93YXIyOwkJLyogMHhkMGM1MCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciAyICovCisJdWludAlyb3dzMXIyOwkvKiAweGQwYzU0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgU2VnbWVudCAxIFJlZ2lzdGVyIDIgKi8KKwl1aW50CXJvd3MycjI7CS8qIDB4ZDBjNTggLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBTZWdtZW50IDIgUmVnaXN0ZXIgMiAqLworCXVpbnQJcm93czNyMjsJLyogMHhkMGM1YyAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFNlZ21lbnQgMyBSZWdpc3RlciAyICovCisJdWludAlyb3d0YXIzOwkvKiAweGQwYzYwIC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlyb3d0ZWFyMzsJLyogMHhkMGM2NCAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFRyYW5zbGF0aW9uIEV4dC4gQWRkcmVzcyBSZWdpc3RlciAzICovCisJdWludAlyb3diYXIzOwkvKiAweGQwYzY4IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczI5WzRdOworCXVpbnQJcm93YXIzOwkJLyogMHhkMGM3MCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciAzICovCisJdWludAlyb3dzMXIzOwkvKiAweGQwYzc0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgU2VnbWVudCAxIFJlZ2lzdGVyIDMgKi8KKwl1aW50CXJvd3MycjM7CS8qIDB4ZDBjNzggLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBTZWdtZW50IDIgUmVnaXN0ZXIgMyAqLworCXVpbnQJcm93czNyMzsJLyogMHhkMGM3YyAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFNlZ21lbnQgMyBSZWdpc3RlciAzICovCisJdWludAlyb3d0YXI0OwkvKiAweGQwYzgwIC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciA0ICovCisJdWludAlyb3d0ZWFyNDsJLyogMHhkMGM4NCAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFRyYW5zbGF0aW9uIEV4dC4gQWRkcmVzcyBSZWdpc3RlciA0ICovCisJdWludAlyb3diYXI0OwkvKiAweGQwYzg4IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDQgKi8KKwljaGFyCXJlczMwWzRdOworCXVpbnQJcm93YXI0OwkJLyogMHhkMGM5MCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciA0ICovCisJdWludAlyb3dzMXI0OwkvKiAweGQwYzk0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgU2VnbWVudCAxIFJlZ2lzdGVyIDQgKi8KKwl1aW50CXJvd3MycjQ7CS8qIDB4ZDBjOTggLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBTZWdtZW50IDIgUmVnaXN0ZXIgNCAqLworCXVpbnQJcm93czNyNDsJLyogMHhkMGM5YyAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFNlZ21lbnQgMyBSZWdpc3RlciA0ICovCisJdWludAlyb3d0YXI1OwkvKiAweGQwY2EwIC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciA1ICovCisJdWludAlyb3d0ZWFyNTsJLyogMHhkMGNhNCAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFRyYW5zbGF0aW9uIEV4dC4gQWRkcmVzcyBSZWdpc3RlciA1ICovCisJdWludAlyb3diYXI1OwkvKiAweGQwY2E4IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDUgKi8KKwljaGFyCXJlczMxWzRdOworCXVpbnQJcm93YXI1OwkJLyogMHhkMGNiMCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciA1ICovCisJdWludAlyb3dzMXI1OwkvKiAweGQwY2I0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgU2VnbWVudCAxIFJlZ2lzdGVyIDUgKi8KKwl1aW50CXJvd3MycjU7CS8qIDB4ZDBjYjggLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBTZWdtZW50IDIgUmVnaXN0ZXIgNSAqLworCXVpbnQJcm93czNyNTsJLyogMHhkMGNiYyAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFNlZ21lbnQgMyBSZWdpc3RlciA1ICovCisJdWludAlyb3d0YXI2OwkvKiAweGQwY2MwIC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciA2ICovCisJdWludAlyb3d0ZWFyNjsJLyogMHhkMGNjNCAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFRyYW5zbGF0aW9uIEV4dC4gQWRkcmVzcyBSZWdpc3RlciA2ICovCisJdWludAlyb3diYXI2OwkvKiAweGQwY2M4IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDYgKi8KKwljaGFyCXJlczMyWzRdOworCXVpbnQJcm93YXI2OwkJLyogMHhkMGNkMCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciA2ICovCisJdWludAlyb3dzMXI2OwkvKiAweGQwY2Q0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgU2VnbWVudCAxIFJlZ2lzdGVyIDYgKi8KKwl1aW50CXJvd3MycjY7CS8qIDB4ZDBjZDggLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBTZWdtZW50IDIgUmVnaXN0ZXIgNiAqLworCXVpbnQJcm93czNyNjsJLyogMHhkMGNkYyAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFNlZ21lbnQgMyBSZWdpc3RlciA2ICovCisJdWludAlyb3d0YXI3OwkvKiAweGQwY2UwIC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciA3ICovCisJdWludAlyb3d0ZWFyNzsJLyogMHhkMGNlNCAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFRyYW5zbGF0aW9uIEV4dC4gQWRkcmVzcyBSZWdpc3RlciA3ICovCisJdWludAlyb3diYXI3OwkvKiAweGQwY2U4IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDcgKi8KKwljaGFyCXJlczMzWzRdOworCXVpbnQJcm93YXI3OwkJLyogMHhkMGNmMCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciA3ICovCisJdWludAlyb3dzMXI3OwkvKiAweGQwY2Y0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgU2VnbWVudCAxIFJlZ2lzdGVyIDcgKi8KKwl1aW50CXJvd3Mycjc7CS8qIDB4ZDBjZjggLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBTZWdtZW50IDIgUmVnaXN0ZXIgNyAqLworCXVpbnQJcm93czNyNzsJLyogMHhkMGNmYyAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFNlZ21lbnQgMyBSZWdpc3RlciA3ICovCisJdWludAlyb3d0YXI4OwkvKiAweGQwZDAwIC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciA4ICovCisJdWludAlyb3d0ZWFyODsJLyogMHhkMGQwNCAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFRyYW5zbGF0aW9uIEV4dC4gQWRkcmVzcyBSZWdpc3RlciA4ICovCisJdWludAlyb3diYXI4OwkvKiAweGQwZDA4IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDggKi8KKwljaGFyCXJlczM0WzRdOworCXVpbnQJcm93YXI4OwkJLyogMHhkMGQxMCAtIFJhcGlkSU8gT3V0Ym91bmQgQXR0cmlidXRlcyBSZWdpc3RlciA4ICovCisJdWludAlyb3dzMXI4OwkvKiAweGQwZDE0IC0gUmFwaWRJTyBPdXRib3VuZCBXaW5kb3cgU2VnbWVudCAxIFJlZ2lzdGVyIDggKi8KKwl1aW50CXJvd3Mycjg7CS8qIDB4ZDBkMTggLSBSYXBpZElPIE91dGJvdW5kIFdpbmRvdyBTZWdtZW50IDIgUmVnaXN0ZXIgOCAqLworCXVpbnQJcm93czNyODsJLyogMHhkMGQxYyAtIFJhcGlkSU8gT3V0Ym91bmQgV2luZG93IFNlZ21lbnQgMyBSZWdpc3RlciA4ICovCisJY2hhcglyZXMzNVs2NF07CisJdWludAlyaXd0YXI0OwkvKiAweGQwZDYwIC0gUmFwaWRJTyBJbmJvdW5kIFdpbmRvdyBUcmFuc2xhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDQgKi8KKwl1aW50CXJpd2JhcjQ7CS8qIDB4ZDBkNjggLSBSYXBpZElPIEluYm91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciA0ICovCisJY2hhcglyZXMzNls0XTsKKwl1aW50CXJpd2FyNDsJCS8qIDB4ZDBkNzAgLSBSYXBpZElPIEluYm91bmQgQXR0cmlidXRlcyBSZWdpc3RlciA0ICovCisJY2hhcglyZXMzN1sxMl07CisJdWludAlyaXd0YXIzOwkvKiAweGQwZDgwIC0gUmFwaWRJTyBJbmJvdW5kIFdpbmRvdyBUcmFuc2xhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczM4WzRdOworCXVpbnQJcml3YmFyMzsJLyogMHhkMGQ4OCAtIFJhcGlkSU8gSW5ib3VuZCBXaW5kb3cgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczM5WzRdOworCXVpbnQJcml3YXIzOwkJLyogMHhkMGQ5MCAtIFJhcGlkSU8gSW5ib3VuZCBBdHRyaWJ1dGVzIFJlZ2lzdGVyIDMgKi8KKwljaGFyCXJlczQwWzEyXTsKKwl1aW50CXJpd3RhcjI7CS8qIDB4ZDBkYTAgLSBSYXBpZElPIEluYm91bmQgV2luZG93IFRyYW5zbGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzNDFbNF07CisJdWludAlyaXdiYXIyOwkvKiAweGQwZGE4IC0gUmFwaWRJTyBJbmJvdW5kIFdpbmRvdyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzNDJbNF07CisJdWludAlyaXdhcjI7CQkvKiAweGQwZGIwIC0gUmFwaWRJTyBJbmJvdW5kIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgMiAqLworCWNoYXIJcmVzNDNbMTJdOworCXVpbnQJcml3dGFyMTsJLyogMHhkMGRjMCAtIFJhcGlkSU8gSW5ib3VuZCBXaW5kb3cgVHJhbnNsYXRpb24gQWRkcmVzcyBSZWdpc3RlciAxICovCisJY2hhcglyZXM0NFs0XTsKKwl1aW50CXJpd2JhcjE7CS8qIDB4ZDBkYzggLSBSYXBpZElPIEluYm91bmQgV2luZG93IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAxICovCisJY2hhcglyZXM0NVs0XTsKKwl1aW50CXJpd2FyMTsJCS8qIDB4ZDBkZDAgLSBSYXBpZElPIEluYm91bmQgQXR0cmlidXRlcyBSZWdpc3RlciAxICovCisJY2hhcglyZXM0NlsxMl07CisJdWludAlyaXd0YXIwOwkvKiAweGQwZGUwIC0gUmFwaWRJTyBJbmJvdW5kIFdpbmRvdyBUcmFuc2xhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKwljaGFyCXJlczQ3WzEyXTsKKwl1aW50CXJpd2FyMDsJCS8qIDB4ZDBkZjAgLSBSYXBpZElPIEluYm91bmQgQXR0cmlidXRlcyBSZWdpc3RlciAwICovCisJY2hhcglyZXM0OFsxMl07CisJdWludAlwbmZlZHI7CQkvKiAweGQwZTAwIC0gUG9ydCBOb3RpZmljYXRpb24vRmF0YWwgRXJyb3IgRGV0ZWN0IFJlZ2lzdGVyICovCisJdWludAlwbmZlZGlyOwkvKiAweGQwZTA0IC0gUG9ydCBOb3RpZmljYXRpb24vRmF0YWwgRXJyb3IgRGV0ZWN0IFJlZ2lzdGVyICovCisJdWludAlwbmZlaWVyOwkvKiAweGQwZTA4IC0gUG9ydCBOb3RpZmljYXRpb24vRmF0YWwgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworCXVpbnQJcGVjcjsJCS8qIDB4ZDBlMGMgLSBQb3J0IEVycm9yIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1aW50CXBlcGNzcjA7CS8qIDB4ZDBlMTAgLSBQb3J0IEVycm9yIFBhY2tldC9Db250cm9sIFN5bWJvbCBSZWdpc3RlciAwICovCisJdWludAlwZXByMTsJCS8qIDB4ZDBlMTQgLSBQb3J0IEVycm9yIFBhY2tldCBSZWdpc3RlciAxICovCisJdWludAlwZXByMjsJCS8qIDB4ZDBlMTggLSBQb3J0IEVycm9yIFBhY2tldCBSZWdpc3RlciAyICovCisJY2hhcglyZXM0OVs0XTsKKwl1aW50CXByZWRyOwkJLyogMHhkMGUyMCAtIFBvcnQgUmVjb3ZlcmFibGUgRXJyb3IgRGV0ZWN0IFJlZ2lzdGVyICovCisJY2hhcglyZXM1MFs0XTsKKwl1aW50CXBlcnRyOwkJLyogMHhkMGUyOCAtIFBvcnQgRXJyb3IgUmVjb3ZlcnkgVGhyZXNob2xkIFJlZ2lzdGVyICovCisJdWludAlwcnRyOwkJLyogMHhkMGUyYyAtIFBvcnQgUmV0cnkgVGhyZXNob2xkIFJlZ2lzdGVyICovCisJY2hhcglyZXM1MVs4NjU2XTsKKwl1aW50CW9tcjsJCS8qIDB4ZDMwMDAgLSBPdXRib3VuZCBNb2RlIFJlZ2lzdGVyICovCisJdWludAlvc3I7CQkvKiAweGQzMDA0IC0gT3V0Ym91bmQgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludAllb2RxdHBhcjsJLyogMHhkMzAwOCAtIEV4dGVuZGVkIE91dGJvdW5kIERlc2NyaXB0b3IgUXVldWUgVGFpbCBQb2ludGVyIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CW9kcXRwYXI7CS8qIDB4ZDMwMGMgLSBPdXRib3VuZCBEZXNjcmlwdG9yIFF1ZXVlIFRhaWwgUG9pbnRlciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAllb3NhcjsJCS8qIDB4ZDMwMTAgLSBFeHRlbmRlZCBPdXRib3VuZCBVbml0IFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlvc2FyOwkJLyogMHhkMzAxNCAtIE91dGJvdW5kIFVuaXQgU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CW9kcHI7CQkvKiAweGQzMDE4IC0gT3V0Ym91bmQgRGVzdGluYXRpb24gUG9ydCBSZWdpc3RlciAqLworCXVpbnQJb2RhdHI7CQkvKiAweGQzMDFjIC0gT3V0Ym91bmQgRGVzdGluYXRpb24gQXR0cmlidXRlcyBSZWdpc3RlciAqLworCXVpbnQJb2RjcjsJCS8qIDB4ZDMwMjAgLSBPdXRib3VuZCBEb3VibGV3b3JkIENvdW50IFJlZ2lzdGVyICovCisJdWludAllb2RxaHBhcjsJLyogMHhkMzAyNCAtIEV4dGVuZGVkIE91dGJvdW5kIERlc2NyaXB0b3IgUXVldWUgSGVhZCBQb2ludGVyIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CW9kcWhwYXI7CS8qIDB4ZDMwMjggLSBPdXRib3VuZCBEZXNjcmlwdG9yIFF1ZXVlIEhlYWQgUG9pbnRlciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlvcmV0cjsJICAgICAgICAvKiAweGQzMDJDIC0gT3V0Ym91bmQgUmV0cnkgRXJyb3IgVGhyZXNob2xkIFJlZ2lzdGVyICovCisJdWludAlvbWdyOwkgICAgICAgIC8qIDB4ZDMwMzAgLSBPdXRib3VuZCBNdWx0aWNhc3QgR3JvdXAgUmVnaXN0ZXIgKi8KKwl1aW50CW9tbHI7CSAgICAgICAgLyogMHhkMzAzNCAtIE91dGJvdW5kIE11bHRpY2FzdCBMaXN0IFJlZ2lzdGVyICovCisJY2hhcglyZXM1Mls0MF07CisJdWludAlpbXI7CQkvKiAweGQzMDYwIC0gT3V0Ym91bmQgTW9kZSBSZWdpc3RlciAqLworCXVpbnQJaXNyOwkJLyogMHhkMzA2NCAtIEluYm91bmQgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludAllaWRxdHBhcjsJLyogMHhkMzA2OCAtIEV4dGVuZGVkIEluYm91bmQgRGVzY3JpcHRvciBRdWV1ZSBUYWlsIFBvaW50ZXIgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJaWRxdHBhcjsJLyogMHhkMzA2YyAtIEluYm91bmQgRGVzY3JpcHRvciBRdWV1ZSBUYWlsIFBvaW50ZXIgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJZWlmcWhwYXI7CS8qIDB4ZDMwNzAgLSBFeHRlbmRlZCBJbmJvdW5kIEZyYW1lIFF1ZXVlIEhlYWQgUG9pbnRlciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlpZnFocGFyOwkvKiAweGQzMDc0IC0gSW5ib3VuZCBGcmFtZSBRdWV1ZSBIZWFkIFBvaW50ZXIgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJaW1pcmlyOwkgICAgICAgIC8qIDB4ZDMwNzggLSBJbmJvdW5kIE1heGltdW0gSW50ZXJydXRwIFJlcG9ydCBJbnRlcnZhbCBSZWdpc3RlciAqLworCWNoYXIJcmVzNTNbOTAwXTsKKwl1aW50CW9kZG1yOwkJLyogMHhkMzQwMCAtIE91dGJvdW5kIERvb3JiZWxsIE1vZGUgUmVnaXN0ZXIgKi8KKwl1aW50CW9kZHNyOwkJLyogMHhkMzQwNCAtIE91dGJvdW5kIERvb3JiZWxsIFN0YXR1cyBSZWdpc3RlciAqLworCWNoYXIJcmVzNTRbMTZdOworCXVpbnQJb2RkcHI7CQkvKiAweGQzNDE4IC0gT3V0Ym91bmQgRG9vcmJlbGwgRGVzdGluYXRpb24gUG9ydCBSZWdpc3RlciAqLworCXVpbnQJb2RkYXRyOwkJLyogMHhkMzQxQyAtIE91dGJvdW5kIERvb3JiZWxsIERlc3RpbmF0aW9uIEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczU1WzEyXTsKKwl1aW50CW9kZHJldHI7CS8qIDB4ZDM0MkMgLSBPdXRib3VuZCBEb29yYmVsbCBSZXRyeSBUaHJlc2hvbGQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworCWNoYXIJcmVzNTZbNDhdOworCXVpbnQJaWRtcjsJCS8qIDB4ZDM0NjAgLSBJbmJvdW5kIERvb3JiZWxsIE1vZGUgUmVnaXN0ZXIgKi8KKwl1aW50CWlkc3I7CQkvKiAweGQzNDY0IC0gSW5ib3VuZCBEb29yYmVsbCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1aW50CWllZHF0cGFyOwkvKiAweGQzNDY4IC0gRXh0ZW5kZWQgSW5ib3VuZCBEb29yYmVsbCBRdWV1ZSBUYWlsIFBvaW50ZXIgQWRkcmVzcyBSZWdpc3RlciAqLworCXVpbnQJaXF0cGFyOwkgICAgICAgIC8qIDB4ZDM0NmMgLSBJbmJvdW5kIERvb3JiZWxsIFF1ZXVlIFRhaWwgUG9pbnRlciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlpZWRxaHBhcjsJLyogMHhkMzQ3MCAtIEV4dGVuZGVkIEluYm91bmQgRG9vcmJlbGwgUXVldWUgSGVhZCBQb2ludGVyIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1aW50CWlkcWhwYXI7CS8qIDB4ZDM0NzQgLSBJbmJvdW5kIERvb3JiZWxsIFF1ZXVlIEhlYWQgUG9pbnRlciBBZGRyZXNzIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQJaWRtaXJpcjsJLyogMHhkMzQ3OCAtIEluYm91bmQgRG9vcmJlbGwgTWF4IEludGVycnVwdCBSZXBvcnQgSW50ZXJ2YWwgUmVnaXN0ZXIgKi8KKwljaGFyCXJlczU3WzEwMF07CisJdWludAlwd21yOwkJLyogMHhkMzRlMCAtIFBvcnQtV3JpdGUgTW9kZSBSZWdpc3RlciAqLworCXVpbnQJcHdzcjsJCS8qIDB4ZDM0ZTQgLSBQb3J0LVdyaXRlIFN0YXR1cyBSZWdpc3RlciAqLworCXVpbnQJZXB3cWJhcjsJLyogMHhkMzRlOCAtIEV4dGVuZGVkIFBvcnQtV3JpdGUgUXVldWUgQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisJdWludAlwd3FiYXI7CQkvKiAweGQzNGVjIC0gUG9ydC1Xcml0ZSBRdWV1ZSBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgICAgICAgY2hhcglyZXM1OFs1MTk4NF07Cit9IGNjc3JfcmlvX3Q7CisKKy8qIEdsb2JhbCBVdGlsaXRpZXMgUmVnaXN0ZXIgQmxvY2soMHhlXzAwMDAtMHhmX2ZmZmYpICovCit0eXBlZGVmIHN0cnVjdCBjY3NyX2d1ciB7CisJdWludAlwb3JwbGxzcjsJLyogMHhlMDAwMCAtIFBPUiBQTEwgcmF0aW8gc3RhdHVzIHJlZ2lzdGVyICovCisJdWludAlwb3JibXNyOwkvKiAweGUwMDA0IC0gUE9SIGJvb3QgbW9kZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVBDODZ4eF9QT1JCTVNSX0hBICAgICAgMHgwMDA2MDAwMAorCXVpbnQJcG9yaW1wc2NyOwkvKiAweGUwMDA4IC0gUE9SIEkvTyBpbXBlZGFuY2Ugc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyICovCisJdWludAlwb3JkZXZzcjsJLyogMHhlMDAwYyAtIFBPUiBJL08gZGV2aWNlIHN0YXR1cyByZWdzaXRlciAqLworI2RlZmluZSBNUEM4Nnh4X1BPUkRFVlNSX0lPX1NFTCAweDAwMEYwMDAwCisJdWludAlwb3JkYmdtc3I7CS8qIDB4ZTAwMTAgLSBQT1IgZGVidWcgbW9kZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwljaGFyCXJlczFbMTJdOworCXVpbnQJZ3Bwb3JjcjsJLyogMHhlMDAyMCAtIEdlbmVyYWwtcHVycG9zZSBQT1IgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCWNoYXIJcmVzMlsxMl07CisJdWludAlncGlvY3I7CQkvKiAweGUwMDMwIC0gR1BJTyBjb250cm9sIHJlZ2lzdGVyICovCisJY2hhcglyZXMzWzEyXTsKKwl1aW50CWdwb3V0ZHI7CS8qIDB4ZTAwNDAgLSBHZW5lcmFsLXB1cnBvc2Ugb3V0cHV0IGRhdGEgcmVnaXN0ZXIgKi8KKwljaGFyCXJlczRbMTJdOworCXVpbnQJZ3BpbmRyOwkJLyogMHhlMDA1MCAtIEdlbmVyYWwtcHVycG9zZSBpbnB1dCBkYXRhIHJlZ2lzdGVyICovCisJY2hhcglyZXM1WzEyXTsKKwl1aW50CXBtdXhjcjsJCS8qIDB4ZTAwNjAgLSBBbHRlcm5hdGUgZnVuY3Rpb24gc2lnbmFsIG11bHRpcGxleCBjb250cm9sICovCisJY2hhcglyZXM2WzEyXTsKKwl1aW50CWRldmRpc3I7CS8qIDB4ZTAwNzAgLSBEZXZpY2UgZGlzYWJsZSBjb250cm9sICovCisjZGVmaW5lIE1QQzg2eHhfREVWRElTUl9QQ0lFWDEgIDB4ODAwMDAwMDAKKyNkZWZpbmUgTVBDODZ4eF9ERVZESVNSX1BDSUVYMiAgMHg0MDAwMDAwMCAgIAorCWNoYXIJcmVzN1sxMl07CisJdWludAlwb3dtZ3Rjc3I7CS8qIDB4ZTAwODAgLSBQb3dlciBtYW5hZ2VtZW50IHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlciAqLworCWNoYXIJcmVzOFsxMl07CisJdWludAltY3BzdW1yOwkvKiAweGUwMDkwIC0gTWFjaGluZSBjaGVjayBzdW1tYXJ5IHJlZ2lzdGVyICovCisJY2hhcglyZXM5WzEyXTsKKwl1aW50CXB2cjsJCS8qIDB4ZTAwYTAgLSBQcm9jZXNzb3IgdmVyc2lvbiByZWdpc3RlciAqLworCXVpbnQJc3ZyOwkJLyogMHhlMDBhNCAtIFN5c3RlbSB2ZXJzaW9uIHJlZ2lzdGVyICovCisJY2hhcglyZXMxMFszNDE2XTsKKwl1aW50CWNsa29jcjsJCS8qIDB4ZTBlMDAgLSBDbG9jayBvdXQgc2VsZWN0IHJlZ2lzdGVyICovCisJY2hhcglyZXMxMVsxMl07CisJdWludAlkZHJkbGxjcjsJLyogMHhlMGUxMCAtIEREUiBETEwgY29udHJvbCByZWdpc3RlciAqLworCWNoYXIJcmVzMTJbMTJdOworCXVpbnQJbGJjZGxsY3I7CS8qIDB4ZTBlMjAgLSBMQkMgRExMIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyAgICAgICAgaW50CXJlczEzWzU3XTsKKyAgICAgICAgdWludCAgICBseW54ZGNyMTsgICAgICAgIC8qIDB4ZTBmMDggLSBMeW54IGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgMSovCisgICAgICAgIGludCAgICAgcmVzMTRbNl07CisgICAgICAgIHVpbnQgICAgZGRyaW9vdmNyOyAgICAgIC8qIDB4ZTBmMjQgLSBERFIgSU8gT3ZlcmRyaXZlIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyAgICAgICAgY2hhcglyZXMxNVs2MTY1Nl07Cit9IGNjc3JfZ3VyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGltbWFwIHsKKwljY3NyX2xvY2FsX21jbV90CWltX2xvY2FsX21jbTsKKwljY3NyX2Rkcl90CQlpbV9kZHIxOworCWNjc3JfaTJjX3QJCWltX2kyYzsKKwljY3NyX2R1YXJ0X3QJCWltX2R1YXJ0OworCWNjc3JfbGJjX3QJCWltX2xiYzsKKyAgICAgICAgY2Nzcl9kZHJfdAkJaW1fZGRyMjsgCisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHJlczFbNDA5Nl07CisJY2Nzcl9wZXhfdAkJaW1fcGV4MTsKKyAgICAgICAgY2Nzcl9wZXhfdAkJaW1fcGV4MjsKKyAgICAgICAgY2Nzcl9odF90ICAgICAgICAgICAgICAgaW1faHQ7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHJlczJbOTAxMTJdOworCWNjc3JfZG1hX3QJCWltX2RtYTsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgcmVzM1s4MTkyXTsKKwljY3NyX3RzZWNfdAkJaW1fdHNlYzE7CisJY2Nzcl90c2VjX3QJCWltX3RzZWMyOworICAgICAgICBjY3NyX3RzZWNfdCAgICAgICAgICAgICBpbV90c2VjMzsKKyAgICAgICAgY2Nzcl90c2VjX3QgICAgICAgICAgICAgaW1fdHNlYzQ7CisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHJlczRbOTgzMDRdOyAgCisJY2Nzcl9waWNfdAkJaW1fcGljOworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICByZXM1WzM4OTEyMF07CisJY2Nzcl9yaW9fdAkJaW1fcmlvOworCWNjc3JfZ3VyX3QJCWltX2d1cjsKK30gaW1tYXBfdDsKKworZXh0ZXJuIGltbWFwX3QgICppbW1yOworCisjZW5kaWYgLypfX0lNTUFQXzg2eHhfXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbW11LmggYi9pbmNsdWRlL2FzbS1wcGMvbW11LmgKaW5kZXggMjYwNmI3OS4uNWMzOGNlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tbXUuaApAQCAtNDM0LDE5ICs0MzQsMjggQEAKICNkZWZpbmUgQk9PS0VfUEFHRVNaXzFHQiAgICAgICAgMTAKICNkZWZpbmUgQk9PS0VfUEFHRVNaXzRHQiAgICAgICAgMTEKIAorI2lmIGRlZmluZWQoQ09ORklHX01QQzg2eHgpCisjZGVmaW5lIExBV0JBUl9CQVNFX0FERFIJMHgwMEZGRkZGRgorI2RlZmluZSBMQVdBUl9UUkdUX0lGCQkweDAxRjAwMDAwCisjZWxzZQogI2RlZmluZSBMQVdCQVJfQkFTRV9BRERSCTB4MDAwRkZGRkYKLSNkZWZpbmUgTEFXQVJfRU4JCTB4ODAwMDAwMDAKICNkZWZpbmUgTEFXQVJfVFJHVF9JRgkJMHgwMEYwMDAwMAorI2VuZGlmCisjZGVmaW5lIExBV0FSX0VOCQkweDgwMDAwMDAwCiAjZGVmaW5lIExBV0FSX1NJWkUJCTB4MDAwMDAwM0YKIAogI2RlZmluZSBMQVdBUl9UUkdUX0lGX1BDSQkweDAwMDAwMDAwCiAjZGVmaW5lIExBV0FSX1RSR1RfSUZfUENJMQkweDAwMDAwMDAwCiAjZGVmaW5lIExBV0FSX1RSR1RfSUZfUENJWAkweDAwMDAwMDAwCiAjZGVmaW5lIExBV0FSX1RSR1RfSUZfUENJMgkweDAwMTAwMDAwCisjZGVmaW5lIExBV0FSX1RSR1RfSUZfSFQJMHgwMDIwMDAwMAogI2RlZmluZSBMQVdBUl9UUkdUX0lGX0xCQwkweDAwNDAwMDAwCiAjZGVmaW5lIExBV0FSX1RSR1RfSUZfQ0NTUgkweDAwODAwMDAwCisjZGVmaW5lIExBV0FSX1RSR1RfSUZfRERSX0lOVEVSTEVBVkVEIDB4MDBCMDAwMDAKICNkZWZpbmUgTEFXQVJfVFJHVF9JRl9SSU8JMHgwMGMwMDAwMAogI2RlZmluZSBMQVdBUl9UUkdUX0lGX0REUgkweDAwZjAwMDAwCisjZGVmaW5lIExBV0FSX1RSR1RfSUZfRERSMQkweDAwZjAwMDAwCisjZGVmaW5lIExBV0FSX1RSR1RfSUZfRERSMgkweDAxNjAwMDAwCiAKICNkZWZpbmUgTEFXQVJfU0laRV9CQVNFCQkweGEKICNkZWZpbmUgTEFXQVJfU0laRV80SwkJKExBV0FSX1NJWkVfQkFTRSsxKQpAQCAtNDY5LDUgKzQ3OCw1MCBAQAogI2RlZmluZSBMQVdBUl9TSVpFXzUxMk0JCShMQVdBUl9TSVpFX0JBU0UrMTgpCiAjZGVmaW5lIExBV0FSX1NJWkVfMUcJCShMQVdBUl9TSVpFX0JBU0UrMTkpCiAjZGVmaW5lIExBV0FSX1NJWkVfMkcJCShMQVdBUl9TSVpFX0JBU0UrMjApCisjZGVmaW5lIExBV0FSX1NJWkVfNEcJCShMQVdBUl9TSVpFX0JBU0UrMjEpCisjZGVmaW5lIExBV0FSX1NJWkVfOEcJCShMQVdBUl9TSVpFX0JBU0UrMjIpCisjZGVmaW5lIExBV0FSX1NJWkVfMTZHCQkoTEFXQVJfU0laRV9CQVNFKzIzKQorI2RlZmluZSBMQVdBUl9TSVpFXzMyRwkJKExBV0FSX1NJWkVfQkFTRSsyNCkKIAorI2lmZGVmIENPTkZJR180NDBTUEUKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRm9sbG93aW5nIGluc3RydWN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSBpbiBCb29rIEUgbW9kZSBvZiB0aGUgR05VIGFzc2VtYmxlci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRENDQ0kocmEscmIpCQkJLmxvbmcgMHg3YzAwMDAwMHxcCisJCQkJCShyYTw8MTYpfChyYjw8MTEpfCg0NTQ8PDEpCisKKyNkZWZpbmUgSUNDQ0kocmEscmIpCQkJLmxvbmcgMHg3YzAwMDAwMHxcCisJCQkJCShyYTw8MTYpfChyYjw8MTEpfCg5NjY8PDEpCisKKyNkZWZpbmUgRENSRUFEKHJ0LHJhLHJiKQkJLmxvbmcgMHg3YzAwMDAwMHxcCisJCQkJCShydDw8MjEpfChyYTw8MTYpfChyYjw8MTEpfCg0ODY8PDEpCisKKyNkZWZpbmUgSUNSRUFEKHJhLHJiKQkJCS5sb25nIDB4N2MwMDAwMDB8XAorCQkJCQkocmE8PDE2KXwocmI8PDExKXwoOTk4PDwxKQorCisjZGVmaW5lIFRMQlNYKHJ0LHJhLHJiKQkJCS5sb25nIDB4N2MwMDAwMDB8XAorCQkJCQkocnQ8PDIxKXwocmE8PDE2KXwocmI8PDExKXwoOTE0PDwxKQorCisjZGVmaW5lIFRMQldFKHJzLHJhLHdzKQkJCS5sb25nIDB4N2MwMDAwMDB8XAorCQkJCQkocnM8PDIxKXwocmE8PDE2KXwod3M8PDExKXwoOTc4PDwxKQorCisjZGVmaW5lIFRMQlJFKHJ0LHJhLHdzKQkJCS5sb25nIDB4N2MwMDAwMDB8XAorCQkJCQkocnQ8PDIxKXwocmE8PDE2KXwod3M8PDExKXwoOTQ2PDwxKQorCisjZGVmaW5lIFRMQlNYRE9UKHJ0LHJhLHJiKQkJLmxvbmcgMHg3YzAwMDAwMXxcCisJCQkJCShydDw8MjEpfChyYTw8MTYpfChyYjw8MTEpfCg5MTQ8PDEpCisKKyNkZWZpbmUgTVNZTkMJCQkJLmxvbmcgMHg3YzAwMDAwMHxcCisJCQkJCSg1OTg8PDEpCisKKyNkZWZpbmUgTUJBUl9JTlNUIAkJCQkubG9uZyAweDdjMDAwMDAwfFwKKwkJCQkJKDg1NDw8MSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiBQUEM0MDUgbW9kZSBvZiB0aGUgR05VIGFzc2VtYmxlci4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVExCUkUocnQscmEsd3MpCQkJLmxvbmcgMHg3YzAwMDAwMHxcCisJCQkJCShydDw8MjEpfChyYTw8MTYpfCh3czw8MTEpfCg5NDY8PDEpCisKKyNlbmRpZgogI2VuZGlmIC8qIF9QUENfTU1VX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wcGMvcHJvY2Vzc29yLmgKaW5kZXggOWZmMDNhZi4uMzg4ZGVhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcm9jZXNzb3IuaApAQCAtMjY0LDYgKzI2NCw3IEBACiAjZGVmaW5lIFNQUk5fSUNUQwkweDNGQgkvKiBJbnN0cnVjdGlvbiBDYWNoZSBUaHJvdHRsaW5nIENvbnRyb2wgUmVnICovCiAjZGVmaW5lIFNQUk5fSU1JU1MJMHgzRDQJLyogSW5zdHJ1Y3Rpb24gVExCIE1pc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9JTU1SCTB4MjdFICAJLyogSW50ZXJuYWwgTWVtb3J5IE1hcCBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0xEU1RDUgkweDNGOCAgIC8qIExvYWQvU3RvcmUgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0wyQ1IJMHgzRjkJLyogTGV2ZWwgMiBDYWNoZSBDb250cm9sIFJlZ3NpdGVyICovCiAjZGVmaW5lIFNQUk5fTFIJCTB4MDA4CS8qIExpbmsgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9NQkFSICAgICAgIDB4MTM3ICAgLyogU3lzdGVtIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KQEAgLTQ0Myw2ICs0NDQsMTEgQEAKICNkZWZpbmUgU1BSTl9NQ1NSCTB4MjNjCS8qIE1hY2hpbmUgQ2hlY2sgU3luZHJvbWUgcmVnaXN0ZXIgKi8KICNkZWZpbmUgRVNSX1NUICAgICAgICAgIDB4MDA4MDAwMDAgICAgICAvKiBTdG9yZSBPcGVyYXRpb24gKi8KIAorI2lmIGRlZmluZWQoQ09ORklHX01QQzg2eHgpCisjZGVmaW5lIFNQUk5fTVNTQ1JPCTB4M2Y2CisjZW5kaWYKKworCiAvKiBTaG9ydC1oYW5kIHZlcnNpb25zIGZvciBhIG51bWJlciBvZiB0aGUgYWJvdmUgU1BSTnMgKi8KIAogI2RlZmluZSBDVFIJU1BSTl9DVFIJLyogQ291bnRlciBSZWdpc3RlciAqLwpAQCAtNTAxLDEwICs1MDcsMTQgQEAKICNkZWZpbmUgSUNNUAlTUFJOX0lDTVAJLyogSW5zdHJ1Y3Rpb24gVExCIENvbXBhcmUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgSU1JU1MJU1BSTl9JTUlTUwkvKiBJbnN0cnVjdGlvbiBUTEIgTWlzcyBSZWdpc3RlciAqLwogI2RlZmluZSBJTU1SCVNQUk5fSU1NUiAgICAgIAkvKiBQUEMgODYwLzgyMSBJbnRlcm5hbCBNZW1vcnkgTWFwIFJlZ2lzdGVyICovCisjZGVmaW5lIExEU1RDUglTUFJOX0xEU1RDUiAgICAgLyogTG9hZC9TdG9yZSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEwyQ1IJU1BSTl9MMkNSICAgIAkvKiBQUEMgNzUwIEwyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTFIJU1BSTl9MUgogI2RlZmluZSBNQkFSICAgIFNQUk5fTUJBUiAgICAgICAvKiBTeXN0ZW0gbWVtb3J5IGJhc2UgYWRkcmVzcyAqLwotI2lmIGRlZmluZWQoQ09ORklHX0U1MDApCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODZ4eCkKKyNkZWZpbmUgTVNTQ1IwCVNQUk5fTVNTQ1JPCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19FNTAwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4Nnh4KQogI2RlZmluZSBQSVIJU1BSTl9QSVIKICNlbmRpZgogI2RlZmluZSBTVlIJU1BSTl9TVlIJLyogU3lzdGVtLU9uLUNoaXAgVmVyc2lvbiBSZWdpc3RlciAqLwpAQCAtNTM4LDcgKzU0OCw3IEBACiAjZGVmaW5lIENTUlIwCVNQUk5fQ1NSUjAKICNkZWZpbmUgQ1NSUjEJU1BSTl9DU1JSMQogI2RlZmluZSBJVlBSCVNQUk5fSVZQUgotI2RlZmluZSBVU1BSRzAJU1BSTl9VU1BSRzAKKyNkZWZpbmUgVVNQUkcwCVNQUk5fVVNQUkcKICNkZWZpbmUgU1BSRzRSCVNQUk5fU1BSRzRSCiAjZGVmaW5lIFNQUkc1UglTUFJOX1NQUkc1UgogI2RlZmluZSBTUFJHNlIJU1BSTl9TUFJHNlIKQEAgLTcyOCw2ICs3MzgsMTAgQEAKICNkZWZpbmUgUFZSXzQ0MEVQX1JDCTB4NDIyMjE4RDQgLyogNDQwRVAgcmV2IEMgYW5kIDQ0MEdSIHJldiBCIGhhdmUgc2FtZSBQVlIgKi8KICNkZWZpbmUgUFZSXzQ0MEdSX1JBCTB4NDIyMjE4RDMgLyogNDQwRVAgcmV2IEIgYW5kIDQ0MEdSIHJldiBBIGhhdmUgc2FtZSBQVlIgKi8KICNkZWZpbmUgUFZSXzQ0MEdSX1JCCTB4NDIyMjE4RDQgLyogNDQwRVAgcmV2IEMgYW5kIDQ0MEdSIHJldiBCIGhhdmUgc2FtZSBQVlIgKi8KKyNkZWZpbmUgUFZSXzQ0MEVQWDFfUkEgIDB4MjE2MjE4RDAgLyogNDQwRVBYIHJldiBBIHdpdGggU2VjdXJpdHkgLyBLYXN1bWkgKi8KKyNkZWZpbmUgUFZSXzQ0MEVQWDJfUkEgIDB4MjE2MjE4RDQgLyogNDQwRVBYIHJldiBBIHdpdGhvdXQgU2VjdXJpdHkgLyBLYXN1bWkgKi8KKyNkZWZpbmUgUFZSXzQ0MEdSWDFfUkEgIDB4MjE2MjE4RDggLyogNDQwR1JYIHJldiBBIHdpdGggU2VjdXJpdHkgLyBLYXN1bWkgKi8KKyNkZWZpbmUgUFZSXzQ0MEdSWDJfUkEgIDB4MjE2MjE4REMgLyogNDQwR1JYIHJldiBBIHdpdGhvdXQgU2VjdXJpdHkgLyBLYXN1bWkgKi8KICNkZWZpbmUgUFZSXzQ0MEdYX1JBCTB4NTFCMjE4NTAKICNkZWZpbmUgUFZSXzQ0MEdYX1JCCTB4NTFCMjE4NTEKICNkZWZpbmUgUFZSXzQ0MEdYX1JDCTB4NTFCMjE4OTIKQEAgLTczNSw2ICs3NDksOCBAQAogI2RlZmluZSBQVlJfNDA1RVBfUkIJMHg1MTIxMDk1MAogI2RlZmluZSBQVlJfNDQwU1BfUkEJMHg1MzIyMTg1MAogI2RlZmluZSBQVlJfNDQwU1BfUkIJMHg1MzIyMTg5MQorI2RlZmluZSBQVlJfNDQwU1BlX1JBCTB4NTM0MjE4OTAKKyNkZWZpbmUgUFZSXzQ0MFNQZV9SQgkweDUzNDIxODkxCiAjZGVmaW5lIFBWUl82MDEJCTB4MDAwMTAwMDAKICNkZWZpbmUgUFZSXzYwMgkJMHgwMDA1MDAwMAogI2RlZmluZSBQVlJfNjAzCQkweDAwMDMwMDAwCkBAIC03NTcsNiArNzczLDggQEAKICNkZWZpbmUgUFZSXzg1eHhfUkVWMQkoUFZSXzg1eHggfCAweDAwMTApCiAjZGVmaW5lIFBWUl84NXh4X1JFVjIJKFBWUl84NXh4IHwgMHgwMDIwKQogCisjZGVmaW5lIFBWUl84Nnh4CTB4ODAwNDAwMDAKKyNkZWZpbmUgUFZSXzg2eHhfUkVWMQkoUFZSXzg2eHggfCAweDAwMTApCiAKIC8qCiAgKiBGb3IgdGhlIDh4eCBwcm9jZXNzb3JzLCBhbGwgb2YgdGhlbSByZXBvcnQgdGhlIHNhbWUgUFZSIGZhbWlseSBmb3IKQEAgLTc5Miw2ICs4MTAsOCBAQAogI2RlZmluZSBTVlJfVkVSKHN2cikJKCgoc3ZyKSA+PiAgMTYpICYgMHhGRkZGKQkvKiBWZXJzaW9uIGZpZWxkICovCiAjZGVmaW5lIFNWUl9SRVYoc3ZyKQkoKChzdnIpID4+ICAgMCkgJiAweEZGRkYpCS8qIFJldmlzb24gZmllbGQgKi8KIAorI2RlZmluZSBTVlJfU1VCVkVSKHN2cikJKCgoc3ZyKSA+PiAgOCkgJiAweEZGKQkvKiBQcm9jZXNzL01GRyBzdWItdmVyc2lvbiAqLworCiAjZGVmaW5lIFNWUl9GQU0oc3ZyKQkoKChzdnIpID4+IDIwKSAmIDB4RkZGKQkvKiBGYW1pbHkgZmllbGQgKi8KICNkZWZpbmUgU1ZSX01FTShzdnIpCSgoKHN2cikgPj4gMTYpICYgMHhGKQkvKiBNZW1iZXIgZmllbGQgKi8KIApAQCAtODA5LDYgKzgyOSw3IEBACiAjZGVmaW5lIFNWUl84NTQxCTB4ODA3QQogI2RlZmluZSBTVlJfODU0OAkweDgwMzEKICNkZWZpbmUgU1ZSXzg1NDhfRQkweDgwMzkKKyNkZWZpbmUgU1ZSXzg2NDEJMHg4MDkwCiAKIAogLyogSSBhbSBqdXN0IGFkZGluZyBhIHNpbmdsZSBlbnRyeSBmb3IgODI2MCBib2FyZHMuICBJIHRoaW5rIHdlIG1heSBiZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3UtYm9vdC5oIGIvaW5jbHVkZS9hc20tcHBjL3UtYm9vdC5oCmluZGV4IGY3YWE1NWYuLjMwYjQ0ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy91LWJvb3QuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdS1ib290LmgKQEAgLTQ1LDcgKzQ1LDcgQEAKIAl1bnNpZ25lZCBsb25nCWJpX3NyYW1zdGFydDsJLyogc3RhcnQgb2YgU1JBTSBtZW1vcnkgKi8KIAl1bnNpZ25lZCBsb25nCWJpX3NyYW1zaXplOwkvKiBzaXplCSBvZiBTUkFNIG1lbW9yeSAqLwogI2lmIGRlZmluZWQoQ09ORklHXzV4eCkgfHwgZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR184MjYwKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfRTUwMCkKKwl8fCBkZWZpbmVkKENPTkZJR19FNTAwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4Nnh4KQogCXVuc2lnbmVkIGxvbmcJYmlfaW1tcl9iYXNlOwkvKiBiYXNlIG9mIElNTVIgcmVnaXN0ZXIgKi8KICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpCkBAIC0xMDgsNyArMTA4LDggQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfNDA1R1ApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKSB8fCBkZWZpbmVkIChDT05GSUdfNDQwR1gpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAJdW5zaWduZWQgaW50CWJpX29wYmZyZXE7CQkvKiBPUEIgY2xvY2sgaW4gSHogKi8KIAlpbnQJCWJpX2lpY19mYXN0WzJdOwkJLyogVXNlIGZhc3QgaTJjIG1vZGUgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ibXBfbG9nby5oIGIvaW5jbHVkZS9ibXBfbG9nby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzkyNGI4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYm1wX2xvZ28uaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NDggKzAsMCBAQAotLyoKLSAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5ICJ0b29scy9ibXBfbG9nbyIKLSAqCi0gKiBETyBOT1QgRURJVAotICoKLSAqLwotCi0KLSNpZm5kZWYgX19CTVBfTE9HT19IX18KLSNkZWZpbmUgX19CTVBfTE9HT19IX18KLQotI2RlZmluZSBCTVBfTE9HT19XSURUSAkJMTYwCi0jZGVmaW5lIEJNUF9MT0dPX0hFSUdIVAkJOTYKLSNkZWZpbmUgQk1QX0xPR09fQ09MT1JTCQkzMQotI2RlZmluZSBCTVBfTE9HT19PRkZTRVQJCTE2Ci0KLXVuc2lnbmVkIHNob3J0IGJtcF9sb2dvX3BhbGV0dGVbXSA9IHsKLQkweDAzNDMsICAweDA0NTQsICAweDA1NjUsICAweDA1NjUsICAweDA2NzYsICAweDA3ODcsICAweDA4OTgsICAweDA5OTksCi0JMHgwQUFBLCAgMHgwQUJBLCAgMHgwQkNCLCAgMHgwQ0NDLCAgMHgwRERELCAgMHgwRUVFLCAgMHgwRkZGLCAgMHgwRkIzLAotCTB4MEZCNCwgIDB4MEZDNCwgIDB4MEZDNSwgIDB4MEZDNiwgIDB4MEZENywgIDB4MEZEOCwgIDB4MEZEOSwgIDB4MEZEQSwKLQkweDBGRUEsICAweDBGRUIsICAweDBGRUMsICAweDBGRkQsICAweDBGRkUsICAweDBGRkYsICAweDBGRkYsCi19OwotCi11bnNpZ25lZCBjaGFyIGJtcF9sb2dvX2JpdG1hcFtdID0gewotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUIsCi0JMHgxQiwgMHgxQiwgMHgxQiwgMHgxQiwgMHgxQiwgMHgxQiwgMHgxQiwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDFCLCAweDExLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTQsIDB4MUUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDFCLCAweDE0LCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDE3LAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDFCLCAweDE0LCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTQsIDB4MUMsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJBLCAweDFGLAotCTB4MUYsIDB4MjIsIDB4MkEsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyOSwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTQsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDE4LCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTgsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEyLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTksCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDE4LCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyQSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJELCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MjgsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFDLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxOSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEyLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkEsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxQiwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTgsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxNiwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJBLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTgsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTYsIDB4MkUsIDB4MTcsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyQSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxOSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkEsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJCLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRCwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTYsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJBLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyOCwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MjAsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyQSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MjIsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDIyLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTQsIDB4MTcsIDB4MTUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTcsIDB4MUIsIDB4MkUsIDB4MUEsIDB4MTQsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTcsIDB4MUIsIDB4MkUsIDB4MUIsCi0JMHgxNCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDFCLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkQsIDB4MjksCi0JMHgyMywgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDIzLCAweDJBLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTQsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDE0LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MUIsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDEyLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDE5LCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJCLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyNCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxMiwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDE0LCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDFCLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxQSwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxQywgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxNiwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUUsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDFFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDJFLCAweDJFLCAweDJFLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MUEsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJCLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MjgsIDB4MkUsIDB4MkEsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyOSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxMCwgMHgxOSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDJFLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDExLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MjEsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEyLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTcsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxRCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDE3LAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxNCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDFCLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDJBLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTQsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxNywKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MUIsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxQiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgyMywgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDE3LCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTcsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDIwLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MjIsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxOCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDE3LAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE3LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDIzLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTcsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxNywKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgyMywgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTcsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MkEsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDE3LAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE3LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDJFLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MUUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MjEsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJELCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEyLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxRCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTgsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxRCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE3LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyMiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDJFLCAweDJFLCAweDJFLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MjAsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxNiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkQsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxRCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDFDLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxQywgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDFFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTYsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE3LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTEsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFFLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDE3LCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDE2LCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyRCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyMSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MjQsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MUQsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxNCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDExLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxOCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDE1LCAweDJFLCAweDJFLCAweDJFLCAweDE5LAotCTB4MTIsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MUUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDFCLCAweDJFLCAweDJFLCAweDFCLCAweDE2LCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxOSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE3LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJELCAweDI2LAotCTB4MjIsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyMiwgMHgyNywKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTMsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDE2LCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTksIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyQSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MkQsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJELCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMiwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDFDLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkEsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJBLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyMCwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTMsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE3LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJBLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgyQywgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkQsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTEsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MUMsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFDLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyQSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDExLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEyLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkEsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDJBLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyQiwgMHgxRiwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMywgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MUIsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxRCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTIsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE3LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJBLCAweDFGLAotCTB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MjAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUYsCi0JMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUEsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDExLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTUsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyQSwgMHgxRiwKLQkweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDFGLCAweDJELCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MjksIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MTcsIDB4MTQsIDB4MTAsIDB4MTEsIDB4MTQsCi0JMHgxQSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MUIsIDB4MTcsIDB4MTcsIDB4MUEsIDB4MUIsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkIsIDB4MjYsCi0JMHgyQSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJBLCAweDI2LAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MTcsIDB4MUIsIDB4MUIsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDE2LCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwKLQkweDFFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTIsIDB4MTAsIDB4MTAsIDB4MTQsIDB4MTQsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDE2LAotCTB4MTAsIDB4MTAsIDB4MTQsIDB4MTQsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxMiwgMHgxMCwgMHgxQiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDE3LCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEzLCAweDE0LCAweDEzLCAweDEwLCAweDEwLCAweDFDLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxQiwgMHgxMCwgMHgyRSwKLQkweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxOCwgMHgxMCwgMHgxMCwgMHgxNywgMHgxNCwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNiwgMHgxMCwKLQkweDE2LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDE2LCAweDEwLCAweDExLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMCwgMHgxOSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUIsIDB4MTAsIDB4MTAsCi0JMHgxRCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEyLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxOSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDFCLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFCLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTUsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxRCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDFCLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTQsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDE5LCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDEwLAotCTB4MUIsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxRSwKLQkweDEwLCAweDEwLCAweDEwLCAweDE3LCAweDE3LCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxQiwgMHgxMCwgMHgxQiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MTYsIDB4MTAsIDB4MUUsIDB4MTIsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxOCwgMHgxMCwgMHgyRSwgMHgxNywgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTYsIDB4MTAsCi0JMHgxQywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MUIsIDB4MTAsIDB4MUIsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTUsIDB4MTAsCi0JMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTcsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTQsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFCLCAweDEwLCAweDFCLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNCwKLQkweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTEsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MTcsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDEzLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywKLQkweDEwLCAweDEwLCAweDEwLCAweDE4LCAweDJFLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxQiwgMHgxMCwgMHgxQiwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxNywgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxOSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywgMHgxNywgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTMsIDB4MTAsIDB4MUEsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE5LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDE5LCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MUMsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDE2LCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxNSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDE3LCAweDEwLCAweDJFLCAweDE3LAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxRSwgMHgxMCwgMHgxMiwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMiwKLQkweDExLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsCi0JMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxQywgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFBLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTcsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwgMHgxMCwgMHgxQywKLQkweDJFLCAweDJFLCAweDJFLCAweDFCLCAweDEwLCAweDE2LCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTYsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwgMHgxQSwgMHgyRSwKLQkweDJFLCAweDFELCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDE0LCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MUUsIDB4MTAsIDB4MTksIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxQSwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTMsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgxNywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDE3LCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTcsIDB4MTAsIDB4MTMsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgxNywgMHgxMCwgMHgxQywgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxNCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTEsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTQsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDE3LCAweDEwLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwgMHgxOCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MUQsIDB4MTAsIDB4MTUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MTQsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDE5LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTcsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTcsIDB4MTAsCi0JMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxNCwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDE5LCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDE0LCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLAotCTB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxQSwgMHgxMCwKLQkweDE0LCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDE3LCAweDEwLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTcsIDB4MTAsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFCLCAweDEwLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDEwLCAweDFDLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgxNCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDEwLAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MUEsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDFDLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEzLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgxMywgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxNiwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxNywgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDE3LCAweDEwLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMywgMHgxMCwKLQkweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDEwLCAweDExLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgxRSwgMHgxMCwgMHgxNiwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MTAsIDB4MTAsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgxMCwgMHgxMCwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDFBLCAweDEwLCAweDE5LCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MTEsIDB4MTAsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDEwLCAweDEwLCAweDEwLCAweDExLCAweDE0LAotCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTcsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwKLQkweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLCAweDJFLAotCTB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsIDB4MkUsCi0JMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgyRSwgMHgxNiwgMHgxMCwgMHgxMCwKLQkweDEwLCAweDE0LCAweDEzLCAweDEwLCAweDEwLCAweDEwLCAweDJFLCAweDJFLAotCi19OwotCi0jZW5kaWYgLyogX19CTVBfTE9HT19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uLmggYi9pbmNsdWRlL2NvbW1vbi5oCmluZGV4IDVkOGIxNTYuLjBjZDBkNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb21tb24uaApAQCAtNzksNiArNzksMTAgQEAKICNlbmRpZgogI2luY2x1ZGUgPGFzbS9pbW1hcF84MjYwLmg+CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVBDODZ4eAorI2luY2x1ZGUgPG1wYzg2eHguaD4KKyNpbmNsdWRlIDxhc20vaW1tYXBfODZ4eC5oPgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX01QQzg1eHgKICNpbmNsdWRlIDxtcGM4NXh4Lmg+CiAjaW5jbHVkZSA8YXNtL2ltbWFwXzg1eHguaD4KQEAgLTEwOSw2ICsxMTMsMTIgQEAKICNkZWZpbmUgZGVidWdYKGxldmVsLGZtdCxhcmdzLi4uKQogI2VuZGlmCS8qIERFQlVHICovCiAKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisgICAgICAgIHByaW50ZigiQlVHOiBmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKKwlwYW5pYygiQlVHISIpOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IGlmICh1bmxpa2VseSgoY29uZGl0aW9uKSE9MCkpIEJVRygpOyB9IHdoaWxlKDApCisKIHR5cGVkZWYgdm9pZCAoaW50ZXJydXB0X2hhbmRsZXJfdCkodm9pZCAqKTsKIAogI2luY2x1ZGUgPGFzbS91LWJvb3QuaD4gLyogYm9vdCBpbmZvcm1hdGlvbiBmb3IgTGludXgga2VybmVsICovCkBAIC0xMTYsMTIgKzEyNiwxMyBAQAogCiAvKgogICogZW5hYmxlIGNvbW1vbiBoYW5kbGluZyBmb3IgYWxsIFRRTTh4eEwvTSBib2FyZHM6Ci0gKiAtIENPTkZJR19UUU04eHhNIHdpbGwgYmUgZGVmaW5lZCBmb3IgYWxsIFRRTTh4eE0gYm9hcmRzCisgKiAtIENPTkZJR19UUU04eHhNIHdpbGwgYmUgZGVmaW5lZCBmb3IgYWxsIFRRTTh4eE0gYW5kIFRRTTg4NUQgYm9hcmRzCiAgKiAtIENPTkZJR19UUU04eHhMIHdpbGwgYmUgZGVmaW5lZCBmb3IgYWxsIFRRTTh4eEwgX2FuZF8gVFFNOHh4TSBib2FyZHMKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1RRTTgyM00pIHx8IGRlZmluZWQoQ09ORklHX1RRTTg1ME0pIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19UUU04NTVNKSB8fCBkZWZpbmVkKENPTkZJR19UUU04NjBNKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfVFFNODYyTSkgfHwgZGVmaW5lZChDT05GSUdfVFFNODY2TSkKKyAgICBkZWZpbmVkKENPTkZJR19UUU04NjJNKSB8fCBkZWZpbmVkKENPTkZJR19UUU04NjZNKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfVFFNODg1RCkKICMgaWZuZGVmIENPTkZJR19UUU04eHhNCiAjICBkZWZpbmUgQ09ORklHX1RRTTh4eE0KICMgZW5kaWYKQEAgLTE5Myw2ICsyMDQsOSBAQAogY2hhciAqCXN0cm1oeihjaGFyICpidWYsIGxvbmcgaHopOwogaW50CWxhc3Rfc3RhZ2VfaW5pdCh2b2lkKTsKIGV4dGVybiB1bG9uZyBtb25pdG9yX2ZsYXNoX2xlbjsKKyNpZmRlZiBDRkdfSURfRUVQUk9NCitpbnQgbWFjX3JlYWRfZnJvbV9lZXByb20odm9pZCk7CisjZW5kaWYKIAogLyogY29tbW9uL2ZsYXNoLmMgKi8KIHZvaWQgZmxhc2hfcGVycm9yIChpbnQpOwpAQCAtMjQ0LDYgKzI1OCw5IEBACiAJdm9pZAlwY2lfbWFzdGVyX2luaXQJICAgICAoc3RydWN0IHBjaV9jb250cm9sbGVyICopOwogIyAgIGVuZGlmCiAgICAgaW50CSAgICBpc19wY2lfaG9zdAkJKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKTsKKyNpZiBkZWZpbmVkKENPTkZJR180NDBTUEUpCisgICB2b2lkIHBjaWVfc2V0dXBfaG9zZXModm9pZCk7CisjZW5kaWYKICNlbmRpZgogCiBpbnQJbWlzY19pbml0X2YgICAodm9pZCk7CkBAIC0zNjYsNiArMzgzLDcgQEAKICAgICBkZWZpbmVkIChDT05GSUdfNzR4eCkJfHwgXAogICAgIGRlZmluZWQgKENPTkZJR19NUEM4MjIwKQl8fCBcCiAgICAgZGVmaW5lZCAoQ09ORklHX01QQzg1eHgpCXx8IFwKKyAgICBkZWZpbmVkIChDT05GSUdfTVBDODZ4eCkJfHwgXAogICAgIGRlZmluZWQgKENPTkZJR19NUEM4M1hYKQogdW5zaWduZWQgY2hhcglpbjgodW5zaWduZWQgaW50KTsKIHZvaWQJCW91dDgodW5zaWduZWQgaW50LCB1bnNpZ25lZCBjaGFyKTsKQEAgLTQ1NCwxMCArNDcyLDE5IEBACiB0eXBlZGVmIE1QQzg1eHhfU1lTX0lORk8gc3lzX2luZm9fdDsKIHZvaWQJZ2V0X3N5c19pbmZvICAoIHN5c19pbmZvX3QgKiApOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODZ4eCkKK3R5cGVkZWYgTVBDODZ4eF9TWVNfSU5GTyBzeXNfaW5mb190Owordm9pZCAgIGdldF9zeXNfaW5mbyAgKCBzeXNfaW5mb190ICogKTsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19JT1A0ODApCiAjICBpZiBkZWZpbmVkKENPTkZJR180NDApCiAgICAgdHlwZWRlZiBQUEM0NDBfU1lTX0lORk8gc3lzX2luZm9fdDsKKyMJaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKQorCSB1bnNpZ25lZCBsb25nIGRldGVybWluZV9zeXNwZXIodm9pZCk7CisJIHVuc2lnbmVkIGxvbmcgZGV0ZXJtaW5lX3BjaV9jbG9ja19wZXIodm9pZCk7CisJIGludCBwcGM0NDBzcGVfcmV2Qih2b2lkKTsKKyMJZW5kaWYKICMgIGVsc2UKICAgICB0eXBlZGVmIFBQQzQwNV9TWVNfSU5GTyBzeXNfaW5mb190OwogIyAgZW5kaWYKQEAgLTQ2OCw3ICs0OTUsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfODI2MCkKIHZvaWQJY3B1X2luaXRfZiAgICAodm9sYXRpbGUgaW1tYXBfdCAqaW1tcik7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX01QQzg1eHgpIHx8IGRlZmluZWQoQ09ORklHX01DRjUyeDIpCisjaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19NUEM4NXh4KSB8fCBkZWZpbmVkKENPTkZJR19NQ0Y1MngyKSB8fGRlZmluZWQoQ09ORklHX01QQzg2eHgpCiB2b2lkCWNwdV9pbml0X2YgICAgKHZvaWQpOwogI2VuZGlmCiAKQEAgLTU5NCw3ICs2MjEsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSU5JVF9DUklUSUNBTAotI2Vycm9yIENPTkZJR19JTklUX0NSSVRJQ0FMIGlzIGRlcHJhY3RlZCEKKyNlcnJvciBDT05GSUdfSU5JVF9DUklUSUNBTCBpcyBkZXByZWNhdGVkIQogI2Vycm9yIFJlYWQgc2VjdGlvbiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGluIFJFQURNRS4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1wcm9jLmggYi9pbmNsdWRlL2NvbW1wcm9jLmgKaW5kZXggMDYxNDY4ZS4uMTI0MDBlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tcHJvYy5oCisrKyBiL2luY2x1ZGUvY29tbXByb2MuaApAQCAtMTQwNSwxNSArMTQwNSwxNiBAQAogCiAjZW5kaWYJLyogQ09ORklHX1NYTkk4NTVUICovCiAKLS8qKiogIE1WUzEsIFRRTTgyM0wvTSwgVFFNODUwTC9NLCBFVFgwOTQsIFIzNjBNUEkgICoqKioqKioqKioqKioqKioqKiovCisvKioqICBNVlMxLCBUUU04MjNML00sIFRRTTg1MEwvTSwgVFFNODg1RCwgRVRYMDk0LCBSMzYwTVBJICAqKioqKioqKioqLwogCiAjaWYgKGRlZmluZWQoQ09ORklHX01WUykgJiYgQ09ORklHX01WUyA8IDIpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19SMzYwTVBJKSB8fCBkZWZpbmVkKENPTkZJR19SQkM4MjMpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfVFFNODIzTCkgfHwgZGVmaW5lZChDT05GSUdfVFFNODIzTSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX1RRTTg1MEwpIHx8IGRlZmluZWQoQ09ORklHX1RRTTg1ME0pIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19FVFgwOTQpICB8fCBkZWZpbmVkKENPTkZJR19SUlZJU0lPTil8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfVklSVExBQjIpfHwJCQkJICBcCisgICAgZGVmaW5lZChDT05GSUdfVFFNODg1RCkgfHwgZGVmaW5lZChDT05GSUdfRVRYMDk0KSAgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1JSVklTSU9OKXx8IGRlZmluZWQoQ09ORklHX1ZJUlRMQUIyKXx8IFwKICAgIChkZWZpbmVkKENPTkZJR19MQU5URUMpICYmIENPTkZJR19MQU5URUMgPCAyKQorCiAvKiBCaXRzIGluIHBhcmFsbGVsIEkvTyBwb3J0IHJlZ2lzdGVycyB0aGF0IGhhdmUgdG8gYmUgc2V0L2NsZWFyZWQKICAqIHRvIGNvbmZpZ3VyZSB0aGUgcGlucyBmb3IgU0NDMiB1c2UuCiAgKi8KQEAgLTE0MzgsNiArMTQzOSwxMSBAQAogICovCiAjZGVmaW5lIFNJQ1JfRU5FVF9NQVNLCSgodWludCkweDAwMDBmZjAwKQogI2RlZmluZSBTSUNSX0VORVRfQ0xLUlQJKCh1aW50KTB4MDAwMDI2MDApCisKKyMgaWZkZWYgQ09ORklHX0ZFQ19FTkVUCQkvKiBVc2UgRkVDIGZvciBGYXN0IEV0aGVybmV0ICovCisjZGVmaW5lIEZFQ19FTkVUCisjIGVuZGlmCS8qIENPTkZJR19GRUNfRU5FVCAqLworCiAjZW5kaWYJLyogQ09ORklHX01WUyB2MSwgQ09ORklHX1RRTTgyM0wvTSwgQ09ORklHX1RRTTg1MEwvTSwgZXRjLiAqLwogCiAvKioqICBUUU04NTVML00sIFRRTTg2MEwvTSwgVFFNODYyTC9NLCBUUU04NjZML00gICoqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9DUENJNDQwLmggYi9pbmNsdWRlL2NvbmZpZ3MvQ1BDSTQ0MC5oCmluZGV4IGE1YmM3NzMuLjkwZDNhOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9DUENJNDQwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0NQQ0k0NDAuaApAQCAtMzEsNyArMzEsOCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lIENPTkZJR19FQk9OWQkJMQkgICAgLyogQm9hcmQgaXMgZWJvbnkJCSovCisjZGVmaW5lIENPTkZJR19DUENJNDQwCQkxCSAgICAvKiBCb2FyZCBpcyBlYm9ueQkJKi8KKyNkZWZpbmUgQ09ORklHXzQ0MEdQCQkxCSAgICAvKiBTcGVjaWZjIEdQIHN1cHBvcnQJKi8KICNkZWZpbmUgQ09ORklHXzR4eAkJMQkgICAgLyogLi4uIFBQQzR4eCBmYW1pbHkJKi8KICNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRiAxCSAgICAvKiBDYWxsIGJvYXJkX2Vhcmx5X2luaXRfZgkqLwogI3VuZGVmCUNGR19EUkFNX1RFU1QJCQkgICAgLyogRGlzYWJsZS10YWtlcyBsb25nIHRpbWUhICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQ1BVODcuaCBiL2luY2x1ZGUvY29uZmlncy9DUFU4Ny5oCmluZGV4IDlhOThlNWMuLmNlOTY5ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9DUFU4Ny5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9DUFU4Ny5oCkBAIC00NTUsNyArNDU1LDcgQEAKICNkZWZpbmUgQ0ZHX01JTl9BTV9NQVNLIDB4QzAwMDAwMDAKIAogLyoKLSAqIHdlIHVzZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIDMyIE1CIGFuZCAxMjggTUIgU0RSQU0KKyAqIHdlIHVzZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIDMyIE1CLCAxMjggTUIgYW5kIDI1NiBNQiBTRFJBTQogICogcmVmcmVzaCByYXRlID0gNy42OCB1UyAoMTAwIE1IeiBCdXMgQ2xvY2spCiAgKi8KIApAQCAtNTEwLDYgKzUxMCwyNCBAQAogCQkJIFBTRE1SX1dSQ18xQwkJCXxcCiAJCQkgUFNETVJfQ0xfMikKIAorCS8qIFNEUkFNIGluaXRpYWxpemF0aW9uIHZhbHVlcyBmb3IgMTAtY29sdW1uIGNoaXBzCisJICovCisjZGVmaW5lIENGR19PUjJfMTBDT0wJKENGR19NSU5fQU1fTUFTSwkJfFwKKwkJCSBPUnhTX0JQRF80CQkJfFwKKwkJCSBPUnhTX1JPV1NUX1BCSTFfQTQJCXxcCisJCQkgT1J4U19OVU1SXzEzKQorCisjZGVmaW5lIENGR19QU0RNUl8xMENPTAkoUFNETVJfUEJJCQkJfFwKKwkJCSBQU0RNUl9TREFNX0ExN19JU19BNQkJfFwKKwkJCSBQU0RNUl9CU01BX0ExM19BMTUJCXxcCisJCQkgUFNETVJfU0RBMTBfUEJJMV9BNgkJfFwKKwkJCSBQU0RNUl9SRlJDXzdfQ0xLCQl8XAorCQkJIFBTRE1SX1BSRVRPQUNUXzJXCQl8XAorCQkJIFBTRE1SX0FDVFRPUldfMlcJCXxcCisJCQkgUFNETVJfTERPVE9QUkVfMUMJCXxcCisJCQkgUFNETVJfV1JDXzFDCQkJfFwKKwkJCSBQU0RNUl9DTF8yKQorCiAvKgogICogSW5pdCBNZW1vcnkgQ29udHJvbGxlcjoKICAqCkBAIC01ODgsOSArNjA2LDkgQEAKIAkJCSBCUnhfTVNfU0RSQU1fUAkJCXxcCiAJCQkgQlJ4X1YpCiAKLSNkZWZpbmUgQ0ZHX09SMl9QUkVMSU0JIENGR19PUjJfOUNPTAorI2RlZmluZSBDRkdfT1IyX1BSRUxJTQkgQ0ZHX09SMl84Q09MCiAKLSNkZWZpbmUgQ0ZHX1BTRE1SCSBDRkdfUFNETVJfOUNPTAorI2RlZmluZSBDRkdfUFNETVIJIENGR19QU0RNUl84Q09MCiAjZW5kaWYgLyogQ0ZHX1JBTUJPT1QgKi8KIAogLyogQmFuayAzIC0gRHVhbCBQb3J0ZWQgU1JBTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg2NDFIUENOLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzA0ZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg2NDFIUENOLmgKQEAgLTAsMCArMSw2NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KKyAqCisgKiBTcmlrYW50aCBTcmluaXZhc2FuIChzcmlrYW50aC5zcmluaXZhc2FuQGZyZWVzY2FsZS5jb20pCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIE1QQzg2NDFIUENOIGJvYXJkIGNvbmZpZ3VyYXRpb24gZmlsZQorICoKKyAqIE1ha2Ugc3VyZSB5b3UgY2hhbmdlIHRoZSBNQUMgYWRkcmVzcyBhbmQgb3RoZXIgbmV0d29yayBwYXJhbXMgZmlyc3QsCisgKiBzZWFyY2ggZm9yIENPTkZJR19FVEhBRERSLCBDT05GSUdfU0VSVkVSSVAsIGV0YyBpbiB0aGlzIGZpbGUuCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMgKi8KKyNkZWZpbmUgQ09ORklHX01QQzg2eHgJCTEJLyogTVBDODZ4eCAqLworI2RlZmluZSBDT05GSUdfTVBDODY0MQkJMQkvKiBNUEM4NjQxIHNwZWNpZmljICovCisjZGVmaW5lIENPTkZJR19NUEM4NjQxSFBDTgkxCS8qIE1QQzg2NDFIUENOIGJvYXJkIHNwZWNpZmljICovCisjZGVmaW5lIENPTkZJR19OVU1fQ1BVUyAgICAgICAgIDIgICAgICAgLyogTnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbSAqLworI2RlZmluZSBDT05GSUdfTElOVVhfUkVTRVRfVkVDICAweDEwMCAgIC8qIFJlc2V0IHZlY3RvciB1c2VkIGJ5IExpbnV4ICovCisjdW5kZWYgREVCVUcKKworI2lmZGVmIFJVTl9ESUFHCisjZGVmaW5lIENGR19ESUFHX0FERFIgICAgICAgIDB4ZmY4MDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIENGR19SRVNFVF9BRERSRVNTICAgIDB4ZmZmMDAxMDAKKworLyojdW5kZWYgQ09ORklHX1BDSSovCisjZGVmaW5lIENPTkZJR19QQ0kKKworI2RlZmluZSBDT05GSUdfVFNFQ19FTkVUIAkJLyogdHNlYyBldGhlcm5ldCBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKyNkZWZpbmUgQ09ORklHX1NQRF9FRVBST00JCS8qIFVzZSBTUEQgRUVQUk9NIGZvciBERFIgc2V0dXAqLworI3VuZGVmIENPTkZJR19ERFJfRExMCQkJLyogcG9zc2libGUgRExMIGZpeCBuZWVkZWQgKi8KKyNkZWZpbmUgQ09ORklHX0REUl8yVF9USU1JTkcJCS8qIFNldHMgdGhlIDJUIHRpbWluZyBiaXQgKi8KKyNkZWZpbmUgQ09ORklHX0REUl9FQ0MJCQkvKiBvbmx5IGZvciBFQ0MgRERSIG1vZHVsZSAqLworI2RlZmluZSBDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIJLyogRERSIGNvbnRyb2xsZXIgb3IgRE1BPyAqLworI2RlZmluZSBDT05GSUdfTUVNX0lOSVRfVkFMVUUJCTB4RGVhZEJlZWYKKyNkZWZpbmUgQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgICAgIDIKKy8qICNkZWZpbmUgQ09ORklHX0REUl9JTlRFUkxFQVZFICAgICAgICAgICAgICAgMSAqLworI2RlZmluZSBDQUNIRV9MSU5FX0lOVEVSTEVBVklORwkJMHgyMDAwMDAwMAorI2RlZmluZSBQQUdFX0lOVEVSTEVBVklORwkJMHgyMTAwMDAwMAorI2RlZmluZSBCQU5LX0lOVEVSTEVBVklORwkJMHgyMjAwMDAwMAorI2RlZmluZSBTVVBFUl9CQU5LX0lOVEVSTEVBVklORwkJMHgyMzAwMDAwMAorCisKKyNkZWZpbmUgQ09ORklHX0FMVElWRUMgICAgICAgICAgMQorCisvKgorICogTDJDUiBzZXR1cCAtLSBtYWtlIHN1cmUgdGhpcyBpcyByaWdodCBmb3IgeW91ciBib2FyZCEKKyAqLworI2RlZmluZSBDRkdfTDIKKyNkZWZpbmUgTDJfSU5JVAkJMAorI2RlZmluZSBMMl9FTkFCTEUJKEwyQ1JfTDJFKQorCisjaWZuZGVmIENPTkZJR19TWVNfQ0xLX0ZSRVEKKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUSAgICAgZ2V0X2JvYXJkX3N5c19jbGsoMCkKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YJMQkvKiBDYWxsIGJvYXJkX3ByZV9pbml0ICovCisKKyN1bmRlZglDRkdfRFJBTV9URVNUCQkJLyogbWVtb3J5IHRlc3QsIHRha2VzIHRpbWUgKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDIwMDAwMAkvKiBtZW10ZXN0IHJlZ2lvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDA0MDAwMDAKKworCisvKgorICogQmFzZSBhZGRyZXNzZXMgLS0gTm90ZSB0aGVzZSBhcmUgZWZmZWN0aXZlIGFkZHJlc3NlcyB3aGVyZSB0aGUKKyAqIGFjdHVhbCByZXNvdXJjZXMgZ2V0IG1hcHBlZCAobm90IHBoeXNpY2FsIGFkZHJlc3NlcykKKyAqLworI2RlZmluZSBDRkdfQ0NTUkJBUl9ERUZBVUxUIAkweGZmNzAwMDAwCS8qIENDU1JCQVIgRGVmYXVsdCAqLworI2RlZmluZSBDRkdfQ0NTUkJBUgkJMHhmODAwMDAwMAkvKiByZWxvY2F0ZWQgQ0NTUkJBUiAqLworI2RlZmluZSBDRkdfSU1NUgkJQ0ZHX0NDU1JCQVIJLyogUFFJSSB1c2VzIENGR19JTU1SICovCisKKworLyoKKyAqIEREUiBTZXR1cAorICovCisjZGVmaW5lIENGR19ERFJfU0RSQU1fQkFTRQkweDAwMDAwMDAwCS8qIEREUiBpcyBzeXN0ZW0gbWVtb3J5Ki8KKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCUNGR19ERFJfU0RSQU1fQkFTRQorI2RlZmluZSBDT05GSUdfVkVSWV9CSUdfUkFNCisKKyNkZWZpbmUgTVBDODZ4eF9ERFJfU0RSQU1fQ0xLX0NOVEwKKworI2lmIGRlZmluZWQoQ09ORklHX1NQRF9FRVBST00pCisgICAgLyoKKyAgICAgKiBEZXRlcm1pbmUgRERSIGNvbmZpZ3VyYXRpb24gZnJvbSBJMkMgaW50ZXJmYWNlLgorICAgICAqLworICAgICNkZWZpbmUgU1BEX0VFUFJPTV9BRERSRVNTMQkJMHg1MQkJLyogRERSIERJTU0gKi8KKyAgICAjZGVmaW5lIFNQRF9FRVBST01fQUREUkVTUzIJCTB4NTIJCS8qIEREUiBESU1NICovCisgICAgI2RlZmluZSBTUERfRUVQUk9NX0FERFJFU1MzCQkweDUzCQkvKiBERFIgRElNTSAqLworICAgICNkZWZpbmUgU1BEX0VFUFJPTV9BRERSRVNTNAkJMHg1NAkJLyogRERSIERJTU0gKi8KKworI2Vsc2UKKyAgICAvKgorICAgICAqIE1hbnVhbGx5IHNldCB1cCBERFIxIHBhcmFtZXRlcnMKKyAgICAgKi8KKworICAgICNkZWZpbmUgQ0ZHX1NEUkFNX1NJWkUJMjU2CQkvKiBERFIgaXMgMjU2TUIgKi8KKworICAgICNkZWZpbmUgQ0ZHX0REUl9DUzBfQk5EUwkweDAwMDAwMDBGCisgICAgI2RlZmluZSBDRkdfRERSX0NTMF9DT05GSUcJMHg4MDAxMDEwMiAgICAgIC8qIEVuYWJsZSwgbm8gaW50ZXJsZWF2aW5nICovCisgICAgI2RlZmluZSBDRkdfRERSX0VYVF9SRUZSRVNIIDB4MDAwMDAwMDAKKyAgICAjZGVmaW5lIENGR19ERFJfVElNSU5HXzAgICAgMHgwMDI2MDgwMgorICAgICNkZWZpbmUgQ0ZHX0REUl9USU1JTkdfMQkweDM5MzU3MzIyCisgICAgI2RlZmluZSBDRkdfRERSX1RJTUlOR18yCTB4MTQ5MDRjYzgKKyAgICAjZGVmaW5lIENGR19ERFJfTU9ERV8xCTB4MDA0ODA0MzIKKyAgICAjZGVmaW5lIENGR19ERFJfTU9ERV8yCTB4MDAwMDAwMDAKKyAgICAjZGVmaW5lIENGR19ERFJfSU5URVJWQUwJMHgwNjA5MDEwMAorICAgICNkZWZpbmUgQ0ZHX0REUl9EQVRBX0lOSVQgICAweGRlYWRiZWVmCisgICAgI2RlZmluZSBDRkdfRERSX0NMS19DVFJMICAgIDB4MDM4MDAwMDAKKyAgICAjZGVmaW5lIENGR19ERFJfT0NEX0NUUkwgICAgMHgwMDAwMDAwMAorICAgICNkZWZpbmUgQ0ZHX0REUl9PQ0RfU1RBVFVTICAweDAwMDAwMDAwCisgICAgI2RlZmluZSBDRkdfRERSX0NPTlRST0wJMHhlMzAwODAwMAkvKiBUeXBlID0gRERSMiAqLworICAgICNkZWZpbmUgQ0ZHX0REUl9DT05UUk9MMgkweDA0NDAwMDAwCisKKyAgICAvKiBOb3QgdXNlZCBpbiBmaXhlZF9zZHJhbSBmdW5jdGlvbiAqLworCisgICAgI2RlZmluZSBDRkdfRERSX01PREUJMHgwMDAwMDAyMgorICAgICNkZWZpbmUgQ0ZHX0REUl9DUzFfQk5EUwkweDAwMDAwMDAwCisgICAgI2RlZmluZSBDRkdfRERSX0NTMl9CTkRTCTB4MDAwMDBGRkYJLyogTm90IGRvbmUgKi8KKyAgICAjZGVmaW5lIENGR19ERFJfQ1MzX0JORFMJMHgwMDAwMEZGRgkvKiBOb3QgZG9uZSAqLworICAgICNkZWZpbmUgQ0ZHX0REUl9DUzRfQk5EUwkweDAwMDAwRkZGCS8qIE5vdCBkb25lICovCisgICAgI2RlZmluZSBDRkdfRERSX0NTNV9CTkRTCTB4MDAwMDBGRkYJLyogTm90IGRvbmUgKi8KKyNlbmRpZgorCisjZGVmaW5lIENGR19JRF9FRVBST00JMQorI2RlZmluZSBJRF9FRVBST01fQUREUiAweDU3CisKKy8qCisgKiBJbiBNUEM4NjQxSFBDTiwgYWxsb2NhdGUgMTZNQiBmbGFzaCBzcGFjZXMgYXQgZmUwMDAwMDAgYW5kIGZmMDAwMDAwLgorICogVGhlcmUgaXMgYW4gOE1CIGZsYXNoLiAgSW4gZWZmZWN0LCB0aGUgYWRkcmVzc2VzIGZyb20gZmUwMDAwMDAgdG8gZmU3ZmZmZmYKKyAqIG1hcCB0byBmZTgwMDAwMCB0byBmZmZmZmZmZiwgYW5kIGZmMDAwMDAwIHRvIGZmN2ZmZmZmIG1hcCB0byBmZmZmZmZmZi4KKyAqIEhvd2V2ZXIsIHdoZW4gdS1ib290IGNvbWVzIHVwLCB0aGUgZmxhc2hfaW5pdCBuZWVkcyBoYXJkIHN0YXJ0IGFkZHJlc3NlcworICogdG8gYnVpbGQgaXRzIGluZm8gdGFibGUuICBGb3IgdXNlciBjb252ZW5pZW5jZSwgdGhlIGZsYXNoIGFkZHJlc3NlcyBpcworICogZmU4MDAwMDAgYW5kIGZmODAwMDAwLiAgVGhhdCB3YXksIHUtYm9vdCBrbm93cyB3aGVyZSB0aGUgZmxhc2ggaXMKKyAqIGFuZCB0aGUgdXNlciBjYW4gZG93bmxvYWQgdS1ib290IGNvZGUgZnJvbSBwcm9tamV0IHRvIGZlZjAwMDAwLCBhCisgKiBtb3JlIGludHVpdGl2ZSBsb2NhdGlvbiB0aGFuIGZlNzAwMDAwLgorICoKKyAqIE5vdGUgdGhhdCwgb24gc3dpdGNoaW5nIHRoZSBib290IGxvY2F0aW9uLCBmZWYwMDAwMCBiZWNvbWVzIGZmZjAwMDAwLgorICovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFICAgICAgICAgIDB4ZmU4MDAwMDAgICAgIC8qIHN0YXJ0IG9mIEZMQVNIIDMyTSAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFTRTIJCTB4ZmY4MDAwMDAKKworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVCB7Q0ZHX0ZMQVNIX0JBU0UsIENGR19GTEFTSF9CQVNFMn0KKworI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkJMHhmZjAwMTAwMQkvKiBwb3J0IHNpemUgMTZiaXQgKi8KKyNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0JCTB4ZmYwMDZmZjcJLyogMTZNQiBCb290IEZsYXNoIGFyZWEqLworCisjZGVmaW5lIENGR19CUjFfUFJFTElNCQkweGZlMDAxMDAxCS8qIHBvcnQgc2l6ZSAxNmJpdCAqLworI2RlZmluZSBDRkdfT1IxX1BSRUxJTQkJMHhmZjAwNmZmNwkvKiAxNk1CIEFsdGVybmF0ZSBCb290IEZsYXNoIGFyZWEqLworCisjZGVmaW5lIENGR19CUjJfUFJFTElNCQkweGY4MjAxMDAxCS8qIHBvcnQgc2l6ZSAxNmJpdCAqLworI2RlZmluZSBDRkdfT1IyX1BSRUxJTQkJMHhmZmYwNmZmNwkvKiAxTUIgQ29tcGFjdCBGbGFzaCBhcmVhKi8KKworI2RlZmluZSBDRkdfQlIzX1BSRUxJTQkJMHhmODEwMDgwMQkvKiBwb3J0IHNpemUgOGJpdCAqLworI2RlZmluZSBDRkdfT1IzX1BSRUxJTQkJMHhmZmYwNmZmNwkvKiAxTUIgUElYSVMgYXJlYSovCisKKworI2RlZmluZSBQSVhJU19CQVNFCTB4ZjgxMDAwMDAgICAgICAvKiBQSVhJUyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUElYSVNfSUQJCTB4MAkvKiBCb2FyZCBJRCBhdCBvZmZzZXQgMCAqLworI2RlZmluZSBQSVhJU19WRVIJCTB4MQkvKiBCb2FyZCB2ZXJzaW9uIGF0IG9mZnNldCAxICovCisjZGVmaW5lIFBJWElTX1BWRVIJCTB4MgkvKiBQSVhJUyBGUEdBIHZlcnNpb24gYXQgb2Zmc2V0IDIgKi8KKyNkZWZpbmUgUElYSVNfUlNUCQkweDQJLyogUElYSVMgUmVzZXQgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBQSVhJU19BVVgJCTB4NgkvKiBQSVhJUyBBdXhpbGlhcnkgcmVnaXN0ZXI7IFNjcmF0Y2ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElYSVNfU1BECQkweDcJLyogUmVnaXN0ZXIgZm9yIFNZU0NMSyBzcGVlZCAqLworI2RlZmluZSBQSVhJU19WQ1RMCQkweDEwCS8qIFZFTEEgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQSVhJU19WQ0ZHRU4wCQkweDEyCS8qIFZFTEEgQ29uZmlnIEVuYWJsZSAwICovCisjZGVmaW5lIFBJWElTX1ZDRkdFTjEJCTB4MTMJLyogVkVMQSBDb25maWcgRW5hYmxlIDEgKi8KKyNkZWZpbmUgUElYSVNfVkJPT1QJCTB4MTYJLyogVkVMQSBWQk9PVCBSZWdpc3RlciAqLworI2RlZmluZSBQSVhJU19WU1BFRUQwCQkweDE3CS8qIFZFTEEgVlNwZWVkIDAgKi8KKyNkZWZpbmUgUElYSVNfVlNQRUVEMQkJMHgxOAkvKiBWRUxBIFZTcGVlZCAxICovCisjZGVmaW5lIFBJWElTX1ZDTEtICQkweDE5CS8qIFZFTEEgVkNMS0ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElYSVNfVkNMS0wJCTB4MUEJLyogVkVMQSBWQ0xLTCByZWdpc3RlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgkJLyogbnVtYmVyIG9mIGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkxMjgJCS8qIHNlY3RvcnMgcGVyIGRldmljZSAqLworCisjdW5kZWYJQ0ZHX0ZMQVNIX0NIRUNLU1VNCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTYwMDAwCS8qIEZsYXNoIEVyYXNlIFRpbWVvdXQgKG1zKSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogRmxhc2ggV3JpdGUgVGltZW91dCAobXMpICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgCVRFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTworCisjaWYgKENGR19NT05JVE9SX0JBU0UgPCBDRkdfRkxBU0hfQkFTRSkKKyNkZWZpbmUgQ0ZHX1JBTUJPT1QKKyNlbHNlCisjdW5kZWYgIENGR19SQU1CT09UCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX1JBTUJPT1QpCisjdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKKyN1bmRlZiBDT05GSUdfU1BEX0VFUFJPTQorI2RlZmluZSBDRkdfU0RSQU1fU0laRQkyNTYKKyNlbmRpZgorCisjdW5kZWYgQ09ORklHX0NMT0NLU19JTl9NSFoKKworI2RlZmluZSBDT05GSUdfTDFfSU5JVF9SQU0KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0xPQ0sJMQorI2lmbmRlZiBDRkdfSU5JVF9SQU1fTE9DSworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBmZDAwMDAwCS8qIEluaXRpYWwgUkFNIGFkZHJlc3MgKi8KKyNlbHNlCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4Zjg0MDAwMDAJLyogSW5pdGlhbCBSQU0gYWRkcmVzcyAqLworI2VuZGlmCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQgICAgCTB4NDAwMAkgICAgCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gUkFNICovCisKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUgIAkxMjgJCS8qIG51bSBieXRlcyBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAorCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkgICAgCSgyNTYgKiAxMDI0KSAgICAvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCSAgICAJKDEyOCAqIDEwMjQpICAgIC8qIFJlc2VydmVkIGZvciBtYWxsb2MgKi8KKworLyogU2VyaWFsIFBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVggICAgIDEKKyN1bmRlZglDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8KKyNkZWZpbmUgQ0ZHX05TMTY1NTAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFICAgIDEKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLCQlnZXRfYnVzX2ZyZXEoMCkKKworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUgIFwKKwl7MzAwLCA2MDAsIDEyMDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwxMTUyMDB9CisKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMSAgICAgICAgKENGR19DQ1NSQkFSKzB4NDUwMCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMiAgICAgICAgKENGR19DQ1NSQkFSKzB4NDYwMCkKKworLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLworI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIKKyNpZmRlZiAgQ0ZHX0hVU0hfUEFSU0VSCisjZGVmaW5lIENGR19QUk9NUFRfSFVTSF9QUzIgIj4gIgorI2VuZGlmCisKKy8qCisgKiBQYXNzIG9wZW4gZmlybXdhcmUgZmxhdCB0cmVlIHRvIGtlcm5lbAorICovCisjZGVmaW5lIENPTkZJR19PRl9GTEFUX1RSRUUJMQorI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAJMQorCisvKiBtYXhpbXVtIHNpemUgb2YgdGhlIGZsYXQgdHJlZSAoOEspICovCisjZGVmaW5lIE9GX0ZMQVRfVFJFRV9NQVhfU0laRQk4MTkyCisKKyNkZWZpbmUgT0ZfQ1BVCQkiUG93ZXJQQyw4NjQxQDAiCisjZGVmaW5lIE9GX1NPQwkJInNvYzg2NDFAZjgwMDAwMDAiCisjZGVmaW5lIE9GX1RCQ0xLCShiZC0+YmlfYnVzZnJlcSAvIDQpCisjZGVmaW5lIE9GX1NURE9VVF9QQVRICSIvc29jODY0MUBmODAwMDAwMC9zZXJpYWxANDUwMCIKKworI2RlZmluZSBDRkdfNjRCSVRfVlNQUklOVEYJMQorI2RlZmluZSBDRkdfNjRCSVRfU1RSVE9VTAkxCisKKy8qCisgKiBJMkMKKyAqLworI2RlZmluZSAgQ09ORklHX0hBUkRfSTJDCQkvKiBJMkMgd2l0aCBoYXJkd2FyZSBzdXBwb3J0Ki8KKyN1bmRlZglDT05GSUdfU09GVF9JMkMJCQkvKiBJMkMgYml0LWJhbmdlZCAqLworI2RlZmluZSBDRkdfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKyNkZWZpbmUgQ0ZHX0kyQ19OT1BST0JFUyAgICAgICAgezB4Njl9CS8qIERvbid0IHByb2JlIHRoZXNlIGFkZHJzICovCisKKy8qCisgKiBSYXBpZElPIE1NVQorICovCisjZGVmaW5lIENGR19SSU9fTUVNX0JBU0UJMHhjMDAwMDAwMAkvKiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX1JJT19NRU1fUEhZUwlDRkdfUklPX01FTV9CQVNFCisjZGVmaW5lIENGR19SSU9fTUVNX1NJWkUJMHgyMDAwMDAwMAkvKiAxMjhNICovCisKKy8qCisgKiBHZW5lcmFsIFBDSQorICogQWRkcmVzc2VzIGFyZSBtYXBwZWQgMS0xLgorICovCisjZGVmaW5lIENGR19QQ0kxX01FTV9CQVNFCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTFfTUVNX1BIWVMJQ0ZHX1BDSTFfTUVNX0JBU0UKKyNkZWZpbmUgQ0ZHX1BDSTFfTUVNX1NJWkUJMHgyMDAwMDAwMAkvKiA1MTJNICovCisjZGVmaW5lIENGR19QQ0kxX0lPX0JBU0UJMHhlMjAwMDAwMAorI2RlZmluZSBDRkdfUENJMV9JT19QSFlTCUNGR19QQ0kxX0lPX0JBU0UKKyNkZWZpbmUgQ0ZHX1BDSTFfSU9fU0laRQkweDEwMDAwMDAJLyogMTZNICovCisKKy8qIFBDSSB2aWV3IG9mIFN5c3RlbSBNZW1vcnkgKi8KKyNkZWZpbmUgQ0ZHX1BDSV9NRU1PUllfQlVTICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJX01FTU9SWV9QSFlTICAgICAweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lfTUVNT1JZX1NJWkUgICAgIDB4ODAwMDAwMDAKKworLyogRm9yIFJUTDgxMzkgKi8KKyNkZWZpbmUgS1NFRzFBRERSKHgpCQkoe3UzMiBfeD1sZTMyX3RvX2NwdSgqKHUzMiAqKSh4KSk7ICgmX3gpO30pCisjZGVmaW5lIF9JT19CQVNFICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBDRkdfUENJMl9NRU1fQkFTRQkweGEwMDAwMDAwCisjZGVmaW5lIENGR19QQ0kyX01FTV9QSFlTCUNGR19QQ0kyX01FTV9CQVNFCisjZGVmaW5lIENGR19QQ0kyX01FTV9TSVpFCTB4MTAwMDAwMDAJLyogMjU2TSAqLworI2RlZmluZSBDRkdfUENJMl9JT19CQVNFCTB4ZTMwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSTJfSU9fUEhZUwlDRkdfUENJMl9JT19CQVNFCisjZGVmaW5lIENGR19QQ0kyX0lPX1NJWkUJMHgxMDAwMDAwCS8qIDE2TSAqLworCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisKKyNkZWZpbmUgQ09ORklHX1BDSV9TQ0FOX1NIT1cgICAgICAgICAgICAvKiBzaG93IHBjaSBkZXZpY2VzIG9uIHN0YXJ0dXAgKi8KKworI3VuZGVmIENGR19TQ1NJX1NDQU5fQlVTX1JFVkVSU0UKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19QQ0lfUE5QCSAgICAgICAgICAgICAgIAkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAqLworCisjZGVmaW5lIENPTkZJR19SVEw4MTM5CisKKyN1bmRlZiBDT05GSUdfRUVQUk8xMDAKKyN1bmRlZiBDT05GSUdfVFVMSVAKKworI2lmICFkZWZpbmVkKENPTkZJR19QQ0lfUE5QKQorICAgICNkZWZpbmUgUENJX0VORVQwX0lPQUREUgkweGUwMDAwMDAwCisgICAgI2RlZmluZSBQQ0lfRU5FVDBfTUVNQUREUgkweGUwMDAwMDAwCisgICAgI2RlZmluZSBQQ0lfSURTRUxfTlVNQkVSCTB4MGMgCS8qIHNsb3QwLT4zKElEU0VMKT0xMi0+MTUgKi8KKyNlbmRpZgorCisjdW5kZWYgQ09ORklHX1BDSV9TQ0FOX1NIT1cJCS8qIHNob3cgcGNpIGRldmljZXMgb24gc3RhcnR1cCAqLworCisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCisjZGVmaW5lIENPTkZJR19TQ1NJX0FIQ0kKKworI2lmZGVmIENPTkZJR19TQ1NJX0FIQ0kKKyNkZWZpbmUgQ09ORklHX1NBVEFfVUxJNTI4OAorI2RlZmluZSBDRkdfU0NTSV9NQVhfU0NTSV9JRAk0CisjZGVmaW5lIENGR19TQ1NJX01BWF9MVU4JMQorI2RlZmluZSBDRkdfU0NTSV9NQVhfREVWSUNFIAkoQ0ZHX1NDU0lfTUFYX1NDU0lfSUQgKiBDRkdfU0NTSV9NQVhfTFVOKQorI2RlZmluZSBDRkdfU0NTSV9NQVhERVZJQ0UJQ0ZHX1NDU0lfTUFYX0RFVklDRQorI2VuZGlmCisKKyNlbmRpZgkvKiBDT05GSUdfUENJICovCisKKworI2lmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkKKworI2lmbmRlZiBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkgCTEKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50ICovCisKKyNkZWZpbmUgQ09ORklHX01QQzg2WFhfVFNFQzEgICAgMQorI2RlZmluZSBDT05GSUdfTVBDODZYWF9UU0VDMV9OQU1FICAgICAgICJlVFNFQzEiCisjZGVmaW5lIENPTkZJR19NUEM4NlhYX1RTRUMyICAgIDEKKyNkZWZpbmUgQ09ORklHX01QQzg2WFhfVFNFQzJfTkFNRSAgICAgICAiZVRTRUMyIgorI2RlZmluZSBDT05GSUdfTVBDODZYWF9UU0VDMyAgICAxCisjZGVmaW5lIENPTkZJR19NUEM4NlhYX1RTRUMzX05BTUUgICAgICAgImVUU0VDMyIKKyNkZWZpbmUgQ09ORklHX01QQzg2WFhfVFNFQzQgICAgMQorI2RlZmluZSBDT05GSUdfTVBDODZYWF9UU0VDNF9OQU1FICAgICAgICJlVFNFQzQiCisKKyNkZWZpbmUgVFNFQzFfUEhZX0FERFIJCTAKKyNkZWZpbmUgVFNFQzJfUEhZX0FERFIJCTEKKyNkZWZpbmUgVFNFQzNfUEhZX0FERFIJCTIKKyNkZWZpbmUgVFNFQzRfUEhZX0FERFIJCTMKKyNkZWZpbmUgVFNFQzFfUEhZSURYCQkwCisjZGVmaW5lIFRTRUMyX1BIWUlEWAkJMAorI2RlZmluZSBUU0VDM19QSFlJRFgJCTAKKyNkZWZpbmUgVFNFQzRfUEhZSURYCQkwCisKKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiZVRTRUMxIgorCisjZW5kaWYJLyogQ09ORklHX1RTRUNfRU5FVCAqLworCisKKy8qCisgKiBCQVQwICAgICAgICAgMkcgICAgIENhY2hlYWJsZSwgbm9uLWd1YXJkZWQKKyAqIDB4MDAwMF8wMDAwICAyRyAgICAgRERSCisgKi8KKyNkZWZpbmUgQ0ZHX0RCQVQwTCAgICAgIChCQVRMX1BQX1JXIHwgQkFUTF9NRU1DT0hFUkVOQ0UpCisjZGVmaW5lIENGR19EQkFUMFUgICAgICAoQkFUVV9CTF8yRyB8IEJBVFVfVlMgfCBCQVRVX1ZQKQorI2RlZmluZSBDRkdfSUJBVDBMICAgICAgKEJBVExfUFBfUlcgfCBCQVRMX01FTUNPSEVSRU5DRSApCisjZGVmaW5lIENGR19JQkFUMFUgICAgICBDRkdfREJBVDBVCisKKy8qCisgKiBCQVQxICAgICAgICAgMUcgICAgIENhY2hlLWluaGliaXRlZCwgZ3VhcmRlZAorICogMHg4MDAwXzAwMDAgIDUxMk0gICBQQ0ktRXhwcmVzcyAxIE1lbW9yeQorICogMHhhMDAwXzAwMDAgIDUxMk0gICBQQ0ktRXhwcmVzcyAyIE1lbW9yeQorICoJQ2hhbmdlZCBpdCBmb3Igb3BlcmF0aW5nIGZyb20gMHhkMDAwMDAwMAorICovCisjZGVmaW5lIENGR19EQkFUMUwgICAgICAoIENGR19QQ0kxX01FTV9CQVNFIHwgQkFUTF9QUF9SVyBcCisJCQl8IEJBVExfQ0FDSEVJTkhJQklUIHwgQkFUTF9HVUFSREVEU1RPUkFHRSkKKyNkZWZpbmUgQ0ZHX0RCQVQxVSAgICAgIChDRkdfUENJMV9NRU1fQkFTRSB8IEJBVFVfQkxfMjU2TSB8IEJBVFVfVlMgfCBCQVRVX1ZQKQorI2RlZmluZSBDRkdfSUJBVDFMICAgICAgKENGR19QQ0kxX01FTV9CQVNFIHwgQkFUTF9QUF9SVyB8IEJBVExfQ0FDSEVJTkhJQklUKQorI2RlZmluZSBDRkdfSUJBVDFVICAgICAgQ0ZHX0RCQVQxVQorCisvKgorICogQkFUMiAgICAgICAgIDUxMk0gICBDYWNoZS1pbmhpYml0ZWQsIGd1YXJkZWQKKyAqIDB4YzAwMF8wMDAwICA1MTJNICAgUmFwaWRJTyBNZW1vcnkKKyAqLworI2RlZmluZSBDRkdfREJBVDJMICAgICAgKENGR19SSU9fTUVNX0JBU0UgfCBCQVRMX1BQX1JXIFwKKwkJCXwgQkFUTF9DQUNIRUlOSElCSVQgfCBCQVRMX0dVQVJERURTVE9SQUdFKQorI2RlZmluZSBDRkdfREJBVDJVICAgICAgKENGR19SSU9fTUVNX0JBU0UgfCBCQVRVX0JMXzUxMk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKKyNkZWZpbmUgQ0ZHX0lCQVQyTCAgICAgIChDRkdfUklPX01FTV9CQVNFIHwgQkFUTF9QUF9SVyB8IEJBVExfQ0FDSEVJTkhJQklUKQorI2RlZmluZSBDRkdfSUJBVDJVICAgICAgQ0ZHX0RCQVQyVQorCisvKgorICogQkFUMyAgICAgICAgIDRNICAgICBDYWNoZS1pbmhpYml0ZWQsIGd1YXJkZWQKKyAqIDB4ZjgwMF8wMDAwICA0TSAgICAgQ0NTUgorICovCisjZGVmaW5lIENGR19EQkFUM0wgICAgICAoIENGR19DQ1NSQkFSIHwgQkFUTF9QUF9SVyBcCisJCQl8IEJBVExfQ0FDSEVJTkhJQklUIHwgQkFUTF9HVUFSREVEU1RPUkFHRSkKKyNkZWZpbmUgQ0ZHX0RCQVQzVSAgICAgIChDRkdfQ0NTUkJBUiB8IEJBVFVfQkxfNE0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKKyNkZWZpbmUgQ0ZHX0lCQVQzTCAgICAgIChDRkdfQ0NTUkJBUiB8IEJBVExfUFBfUlcgfCBCQVRMX0NBQ0hFSU5ISUJJVCkKKyNkZWZpbmUgQ0ZHX0lCQVQzVSAgICAgIENGR19EQkFUM1UKKworLyoKKyAqIEJBVDQgICAgICAgICAzMk0gICAgQ2FjaGUtaW5oaWJpdGVkLCBndWFyZGVkCisgKiAweGUyMDBfMDAwMCAgMTZNICAgIFBDSS1FeHByZXNzIDEgSS9PCisgKiAweGUzMDBfMDAwMCAgMTZNICAgIFBDSS1FeHByZXNzIDIgSS8wCisgKiAgICBOb3RlIHRoYXQgdGhpcyBpcyBhdCAweGUwMDAwMDAwCisgKi8KKyNkZWZpbmUgQ0ZHX0RCQVQ0TCAgICAgICggQ0ZHX1BDSTFfSU9fQkFTRSB8IEJBVExfUFBfUlcgXAorCQkJfCBCQVRMX0NBQ0hFSU5ISUJJVCB8IEJBVExfR1VBUkRFRFNUT1JBR0UpCisjZGVmaW5lIENGR19EQkFUNFUgICAgICAoQ0ZHX1BDSTFfSU9fQkFTRSB8IEJBVFVfQkxfMzJNIHwgQkFUVV9WUyB8IEJBVFVfVlApCisjZGVmaW5lIENGR19JQkFUNEwgICAgICAoQ0ZHX1BDSTFfSU9fQkFTRSB8IEJBVExfUFBfUlcgfCBCQVRMX0NBQ0hFSU5ISUJJVCkKKyNkZWZpbmUgQ0ZHX0lCQVQ0VSAgICAgIENGR19EQkFUNFUKKworLyoKKyAqIEJBVDUgICAgICAgICAxMjhLICAgQ2FjaGVhYmxlLCBub24tZ3VhcmRlZAorICogMHhlNDAxXzAwMDAgIDEyOEsgICBJbml0IFJBTSBmb3Igc3RhY2sgaW4gdGhlIENQVSBEQ2FjaGUgKG5vIGJhY2tpbmcgbWVtb3J5KQorICovCisjZGVmaW5lIENGR19EQkFUNUwgICAgICAoQ0ZHX0lOSVRfUkFNX0FERFIgfCBCQVRMX1BQX1JXIHwgQkFUTF9NRU1DT0hFUkVOQ0UpCisjZGVmaW5lIENGR19EQkFUNVUgICAgICAoQ0ZHX0lOSVRfUkFNX0FERFIgfCBCQVRVX0JMXzEyOEsgfCBCQVRVX1ZTIHwgQkFUVV9WUCkKKyNkZWZpbmUgQ0ZHX0lCQVQ1TCAgICAgIENGR19EQkFUNUwKKyNkZWZpbmUgQ0ZHX0lCQVQ1VSAgICAgIENGR19EQkFUNVUKKworLyoKKyAqIEJBVDYgICAgICAgICAzMk0gICAgQ2FjaGUtaW5oaWJpdGVkLCBndWFyZGVkCisgKiAweGZlMDBfMDAwMCAgMzJNICAgIEZMQVNICisgKi8KKyNkZWZpbmUgQ0ZHX0RCQVQ2TCAgICAgICgoQ0ZHX0ZMQVNIX0JBU0UgJiAweGZlMDAwMDAwKSB8IEJBVExfUFBfUlcgXAorCQkJfCBCQVRMX0NBQ0hFSU5ISUJJVCB8IEJBVExfR1VBUkRFRFNUT1JBR0UpCisjZGVmaW5lIENGR19EQkFUNlUgICAgICAoKENGR19GTEFTSF9CQVNFICYgMHhmZTAwMDAwMCkgfCBCQVRVX0JMXzMyTSB8IEJBVFVfVlMgfCBCQVRVX1ZQKQorI2RlZmluZSBDRkdfSUJBVDZMICAgICAgKChDRkdfRkxBU0hfQkFTRSAmIDB4ZmUwMDAwMDApIHwgQkFUTF9QUF9SVyB8IEJBVExfTUVNQ09IRVJFTkNFKQorI2RlZmluZSBDRkdfSUJBVDZVICAgICAgQ0ZHX0RCQVQ2VQorCisjZGVmaW5lIENGR19EQkFUN0wgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDdVIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0lCQVQ3TCAweDAwMDAwMDAwCisjZGVmaW5lIENGR19JQkFUN1UgMHgwMDAwMDAwMAorCisKKworCisvKgorICogRW52aXJvbm1lbnQKKyAqLworI2lmbmRlZiBDRkdfUkFNQk9PVAorICAgICNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisgICAgI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFICsgMHg0MDAwMCkKKyAgICAjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCQkweDQwMDAwCS8qIDI1Nksob25lIHNlY3RvcikgZm9yIGVudiAqLworICAgICNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAKKyNlbHNlCisgICAgI2RlZmluZSBDRkdfTk9fRkxBU0gJCTEJLyogRmxhc2ggaXMgbm90IHVzYWJsZSBub3cgKi8KKyAgICAjZGVmaW5lIENGR19FTlZfSVNfTk9XSEVSRQkxCS8qIFN0b3JlIEVOViBpbiBtZW1vcnkgb25seSAqLworICAgICNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX01PTklUT1JfQkFTRSAtIDB4MTAwMCkKKyAgICAjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxCS8qIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZCAqLworI2RlZmluZSBDRkdfTE9BRFNfQkFVRF9DSEFOR0UJMQkvKiBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UgKi8KKworI2lmIGRlZmluZWQoQ0ZHX1JBTUJPT1QpCisgICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisgICAgI2RlZmluZSAgQ09ORklHX0NPTU1BTkRTCSgoQ09ORklHX0NNRF9ERkwJXAorCQkJCSB8IENGR19DTURfUElORwkJXAorCQkJCSB8IENGR19DTURfUENJCQlcCisJCQkJIHwgQ0ZHX0NNRF9JMkMJCVwKKwkJCQkgfCBDRkdfQ01EX1NDU0kJCVwKKwkJCQkgfCBDRkdfQ01EX0VYVDIpCVwKKwkJCQkmCQkJXAorCQkJCSB+KENGR19DTURfRU5WCQlcCisJCQkJICB8IENGR19DTURfSU1MUwlcCisJCQkJICB8IENGR19DTURfRkxBU0gJXAorCQkJCSAgfCBDRkdfQ01EX0xPQURTKSkKKyAgI2Vsc2UKKyAgICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKChDT05GSUdfQ01EX0RGTAlcCisJCQkJIHwgQ0ZHX0NNRF9QSU5HCQlcCisJCQkJIHwgQ0ZHX0NNRF9JMkMJCVwKKwkJCQkgfCBDRkdfQ01EX1NDU0kJCVwKKwkJCQkgfCBDR0ZfQ01EX0VYVDIpCVwKKwkJCQkmCQkJXAorCQkJCSB+KENGR19DTURfRU5WCQlcCisJCQkJIHwgQ0ZHX0NNRF9JTUxTCQlcCisJCQkJIHwgQ0ZHX0NNRF9GTEFTSAlcCisJCQkJIHwgQ0ZHX0NNRF9MT0FEUykpCisgICNlbmRpZgorI2Vsc2UKKyAgI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKyAgICAjZGVmaW5lICBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMCQlcCisJCQkJfCBDRkdfQ01EX1BDSQkJXAorCQkJCXwgQ0ZHX0NNRF9QSU5HCQlcCisJCQkJfCBDRkdfQ01EX0kyQwkJXAorCQkJCXwgQ0ZHX0NNRF9TQ1NJCQlcCisJCQkJfCBDRkdfQ01EX0VYVDIpCisgICNlbHNlCisgICAgI2RlZmluZSAgQ09ORklHX0NPTU1BTkRTCShDT05GSUdfQ01EX0RGTAkJXAorCQkJCXwgQ0ZHX0NNRF9QSU5HCQlcCisJCQkJfCBDRkdfQ01EX0kyQykKKyAgI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjdW5kZWYgQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQgKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkqLworI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MjAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfUFJPTVBUCSI9PiAiCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorICAgICNkZWZpbmUgQ0ZHX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2Vsc2UKKyAgICAjZGVmaW5lIENGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19IWgkJMTAwMAkJLyogZGVjcmVtZW50ZXIgZnJlcTogMW1zIHRpY2tzICovCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworCisvKiBDYWNoZSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJMzI3NjgKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUqLworI2VuZGlmCisKKy8qCisgKiBJbnRlcm5hbCBEZWZpbml0aW9ucworICoKKyAqIEJvb3QgRmxhZ3MKKyAqLworI2RlZmluZSBCT09URkxBR19DT0xECTB4MDEJCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNIICovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkJLyogU29mdHdhcmUgcmVib290ICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkyMzA0MDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTIJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworCisvKgorICogRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvbgorICovCisKKy8qIFRoZSBtYWMgYWRkcmVzc2VzIGZvciBhbGwgZXRoZXJuZXQgaW50ZXJmYWNlICovCisjaWYgZGVmaW5lZChDT05GSUdfVFNFQ19FTkVUKQorI2RlZmluZSBDT05GSUdfRVRIQUREUiAgIDAwOkUwOjBDOjAwOjAwOjAxCisjZGVmaW5lIENPTkZJR19FVEgxQUREUiAgMDA6RTA6MEM6MDA6MDE6RkQKKyNkZWZpbmUgQ09ORklHX0VUSDJBRERSICAwMDpFMDowQzowMDowMjpGRAorI2RlZmluZSBDT05GSUdfRVRIM0FERFIgIDAwOkUwOjBDOjAwOjAzOkZECisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfSEFTX0VUSDEJCTEKKyNkZWZpbmUgQ09ORklHX0hBU19FVEgyCQkxCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMwkJMQorCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMS4xMDAKKworI2RlZmluZSBDT05GSUdfSE9TVE5BTUUJCXVua25vd24KKyNkZWZpbmUgQ09ORklHX1JPT1RQQVRICQkvb3B0L25mc3Jvb3QKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQl1SW1hZ2UKKworI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMS4xCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAJMTkyLjE2OC4xLjEKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4yNTUuMjU1LjAKKworLyogZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGZ0cCBhbmQgYm9vdG0gKi8KKyNkZWZpbmUgQ09ORklHX0xPQURBRERSCQkxMDAwMDAwCisKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWSAxMAkvKiAtMSBkaXNhYmxlcyBhdXRvLWJvb3QgKi8KKyN1bmRlZiAgQ09ORklHX0JPT1RBUkdTCQkvKiB0aGUgYm9vdCBjb21tYW5kIHdpbGwgc2V0IGJvb3RhcmdzICovCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCTExNTIwMAorCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJICAgICAgICBcCisgICAibmV0ZGV2PWV0aDBcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAiY29uc29sZWRldj10dHlTMFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAicmFtZGlza2FkZHI9MjAwMDAwMFwwIgkJCQkJCVwKKyAgICJyYW1kaXNrZmlsZT15b3VyLnJhbWRpc2sudS1ib290XDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICJkdGJhZGRyPTQwMDAwMFwwIgkJCQkJCVwKKyAgICJkdGJmaWxlPW1wYzg2NDFfaHBjbi5kdGJcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgImVuLXdkPW13LmIgZjgxMDAwMTAgMHgwODsgZWNobyAtZXhwZWN0Oi0gMDg7IG1kLmIgZjgxMDAwMTAgMVwwIiBcCisgICAiZGlzLXdkPW13LmIgZjgxMDAwMTAgMHgwMDsgZWNobyAtZXhwZWN0Oi0gMDA7IG1kLmIgZjgxMDAwMTAgMVwwIiBcCisgICAibWF4Y3B1cz0yIgorCisKKyNkZWZpbmUgQ09ORklHX05GU0JPT1RDT01NQU5ECSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAibmZzcm9vdD0kc2VydmVyaXA6JHJvb3RwYXRoICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAiaXA9JGlwYWRkcjokc2VydmVyaXA6JGdhdGV3YXlpcDokbmV0bWFzazokaG9zdG5hbWU6JG5ldGRldjpvZmYgIiBcCisgICAgICAiY29uc29sZT0kY29uc29sZWRldiwkYmF1ZHJhdGUgJG90aGJvb3RhcmdzOyIgICAgICAgICAgICAgICAgICAgICBcCisgICAidGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAidGZ0cCAkZHRiYWRkciAkZHRiZmlsZTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgImJvb3RtICRsb2FkYWRkciAtICRkdGJhZGRyIgorCisjZGVmaW5lIENPTkZJR19SQU1CT09UQ09NTUFORCBcCisgICAic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcncgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAiY29uc29sZT0kY29uc29sZWRldiwkYmF1ZHJhdGUgJG90aGJvb3RhcmdzOyIgICAgICAgICAgICAgICAgICAgICBcCisgICAidGZ0cCAkcmFtZGlza2FkZHIgJHJhbWRpc2tmaWxlOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAidGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAidGZ0cCAkZHRiYWRkciAkZHRiZmlsZTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgImJvb3RtICRsb2FkYWRkciAkcmFtZGlza2FkZHIgJGR0YmFkZHIiCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5EICBDT05GSUdfTkZTQk9PVENPTU1BTkQKKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UQjUyMDAuaCBiL2luY2x1ZGUvY29uZmlncy9UQjUyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTZlNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL1RCNTIwMC5oCkBAIC0wLDAgKzEsNTA3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA0LTIwMDYKKyAqIE1hcnRpbiBLcmF1c2UsIFRRLVN5c3RlbXMgR21iSCwgbWFydGluLmtyYXVzZUB0cXMuZGUKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqIChlYXN5IHRvIGNoYW5nZSkKKyAqLworCisjZGVmaW5lIENPTkZJR19NUEM1eHh4CQkxCS8qIFRoaXMgaXMgYW4gTVBDNXh4eCBDUFUgKi8KKyNkZWZpbmUgQ09ORklHX01QQzUyMDAJCTEJLyogKG1vcmUgcHJlY2lzZWx5IGFuIE1QQzUyMDAgQ1BVKSAqLworI2RlZmluZSBDT05GSUdfVFFNNTIwMAkJMQkvKiAuLi4gb24gVFFNNTIwMCBtb2R1bGUgKi8KKyNkZWZpbmUgQ09ORklHX1RCNTIwMAkJMQkvKiAuLi4gb24gYSBUQjUyMDAgYmFzZSBib2FyZCAqLworCisjZGVmaW5lIENGR19NUEM1WFhYX0NMS0lOCTMzMDAwMDAwIC8qIC4uLiBydW5uaW5nIGF0IDMzLjAwMDAwME1IeiAqLworCisjZGVmaW5lIEJPT1RGTEFHX0NPTEQJCTB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggICovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JCTB4MDIJLyogU29mdHdhcmUgcmVib290CSAgICAgKi8KKworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogRm9yIE1QQzV4eHggQ1BVcyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjICBkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlICovCisjZW5kaWYKKworLyoKKyAqIFNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfUFNDX0NPTlNPTEUJMQkvKiBkZWZhdWx0IGNvbnNvbGUgaXMgb24gUFNDMSAqLworI2RlZmluZSBDT05GSUdfU0VSSUFMX01VTFRJCTEJLyogc3VwcG9ydCBtdWx0aXBsZSBjb25zb2xlcyAqLworI2RlZmluZSBDT05GSUdfUFNDX0NPTlNPTEUyCTYJLyogc2Vjb25kIGNvbnNvbGUgaXMgb24gUFNDNiAqLworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAkvKiAuLi4gYXQgMTE1MjAwIGJwcyAqLworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCB9CisKKy8qCisgKiBWaWRlbyBjb25zb2xlCisgKi8KKyNpZiAxCisjZGVmaW5lIENPTkZJR19WSURFTworI2RlZmluZSBDT05GSUdfVklERU9fU001MDEKKyNkZWZpbmUgQ09ORklHX1ZJREVPX1NNNTAxXzMyQlBQCisjZGVmaW5lIENPTkZJR19DRkJfQ09OU09MRQorI2RlZmluZSBDT05GSUdfVklERU9fTE9HTworI2RlZmluZSBDT05GSUdfVkdBX0FTX1NJTkdMRV9ERVZJQ0UKKyNkZWZpbmUgQ09ORklHX0NPTlNPTEVfRVhUUkFfSU5GTworI2RlZmluZSBDT05GSUdfVklERU9fU1dfQ1VSU09SCisjZGVmaW5lIENPTkZJR19TUExBU0hfU0NSRUVOCisjZGVmaW5lIENGR19DT05TT0xFX0lTX0lOX0VOVgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVklERU8KKyNkZWZpbmUgQUREX0JNUF9DTUQJCUNGR19DTURfQk1QCisjZWxzZQorI2RlZmluZSBBRERfQk1QX0NNRAkJMAorI2VuZGlmCisKKy8qIFBhcnRpdGlvbnMgKi8KKyNkZWZpbmUgQ09ORklHX01BQ19QQVJUSVRJT04KKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KKyNkZWZpbmUgQ09ORklHX0lTT19QQVJUSVRJT04KKworLyogVVNCICovCisjZGVmaW5lIENPTkZJR19VU0JfT0hDSQorI2RlZmluZSBBRERfVVNCX0NNRAkJQ0ZHX0NNRF9VU0IgfCBDRkdfQ01EX0ZBVAorI2RlZmluZSBDT05GSUdfVVNCX1NUT1JBR0UKKworLyogUE9TVCBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19QT1NUCQkoQ0ZHX1BPU1RfTUVNT1JZICAgfCBcCisJCQkJIENGR19QT1NUX0NQVQkgICB8IFwKKwkJCQkgQ0ZHX1BPU1RfSTJDKQorCisjaWZkZWYgQ09ORklHX1BPU1QKKyNkZWZpbmUgQ0ZHX0NNRF9QT1NUX0RJQUcgQ0ZHX0NNRF9ESUFHCisvKiBwcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIHBvc3Rfd29yZCBhdCBlbmQgb2Ygb24tY2hpcCBTUkFNICovCisjZGVmaW5lIE1QQzVYWFhfU1JBTV9QT1NUX1NJWkUgTVBDNVhYWF9TUkFNX1NJWkUtNAorI2Vsc2UKKyNkZWZpbmUgQ0ZHX0NNRF9QT1NUX0RJQUcgMAorI2VuZGlmCisKKy8qIElERSAqLworI2RlZmluZSBBRERfSURFX0NNRAkJKENGR19DTURfSURFIHwgQ0ZHX0NNRF9GQVQgfCBDRkdfQ01EX0VYVDIpCisKKy8qCisgKiBTdXBwb3J0ZWQgY29tbWFuZHMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJICAgICAgIChDT05GSUdfQ01EX0RGTAl8IFwKKwkJCQlBRERfQk1QX0NNRAl8IFwKKwkJCQlBRERfSURFX0NNRAl8IFwKKwkJCQlBRERfUENJX0NNRAl8IFwKKwkJCQlBRERfVVNCX0NNRAl8IFwKKwkJCQlDRkdfQ01EX0FTS0VOVgl8IFwKKwkJCQlDRkdfQ01EX0RBVEUJfCBcCisJCQkJQ0ZHX0NNRF9ESENQCXwgXAorCQkJCUNGR19DTURfRUNITwl8IFwKKwkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKKwkJCQlDRkdfQ01EX0kyQwl8IFwKKwkJCQlDRkdfQ01EX0pGRlMyCXwgXAorCQkJCUNGR19DTURfTUlJCXwgXAorCQkJCUNGR19DTURfTkZTCXwgXAorCQkJCUNGR19DTURfUElORwl8IFwKKwkJCQlDRkdfQ01EX1BPU1RfRElBRyB8IFwKKwkJCQlDRkdfQ01EX1JFR0lORk8gfCBcCisJCQkJQ0ZHX0NNRF9TTlRQCXwgXAorCQkJCUNGR19DTURfQlNQKQorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUJQ09ORklHX1RJTUVTVEFNUAkJLyogZGlzcGxheSBpbWFnZSB0aW1lc3RhbXBzICovCisKKyNpZiAoVEVYVF9CQVNFID09IDB4RkMwMDAwMDApCQkvKiBCb290IGxvdyAqLworIyAgIGRlZmluZSBDRkdfTE9XQk9PVAkJMQorI2VuZGlmCisKKy8qCisgKiBBdXRvYm9vdGluZworICovCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMgKi8KKworI2RlZmluZSBDT05GSUdfUFJFQk9PVAkiZWNobzsiIFwKKwkiZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKKwkiZWNobyIKKworI3VuZGVmCUNPTkZJR19CT09UQVJHUworCisjaWYgZGVmaW5lZChDT05GSUdfVFFNNTIwMF9CKQorI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCVwKKwkicm9vdHBhdGg9L29wdC9lbGRrL3BwY182eHhcMCIJCQkJCVwKKwkicmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIgkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZiBwYW5pYz0xXDAiCQkJXAorCSJmbGFzaF9zZWxmPXJ1biByYW1hcmdzIGFkZGlwOyIJCQkJCVwKKwkJImJvb3RtICR7a2VybmVsX2FkZHJ9ICR7cmFtZGlza19hZGRyfVwwIgkJXAorCSJmbGFzaF9uZnM9cnVuIG5mc2FyZ3MgYWRkaXA7IgkJCQkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJuZXRfbmZzPXRmdHAgMjAwMDAwICR7Ym9vdGZpbGV9O3J1biBuZnNhcmdzIGFkZGlwO2Jvb3RtXDAiCVwKKwkiYm9vdGZpbGU9L3RmdHBib290L3RxbTUyMDAvdUltYWdlXDAiCQkJCVwKKwkibG9hZD10ZnRwIDIwMDAwMCAke3UtYm9vdH1cMCIJCQkJCVwKKwkidS1ib290PS90ZnRwYm9vdC90cW01MjAwL3UtYm9vdC5iaW5cMCIJCQkJXAorCSJ1cGRhdGU9cHJvdGVjdCBvZmYgRkMwMDAwMDAgRkMwN0ZGRkY7IgkJCQlcCisJCSJlcmFzZSBGQzAwMDAwMCBGQzA3RkZGRjsiCQkJCVwKKwkJImNwLmIgMjAwMDAwIEZDMDAwMDAwICR7ZmlsZXNpemV9OyIJCQlcCisJCSJwcm90ZWN0IG9uIEZDMDAwMDAwIEZDMDdGRkZGXDAiCQkJXAorCSIiCisjZWxzZQorI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCVwKKwkicm9vdHBhdGg9L29wdC9lbGRrL3BwY182eHhcMCIJCQkJCVwKKwkicmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIgkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZiBwYW5pYz0xXDAiCQkJXAorCSJmbGFzaF9zZWxmPXJ1biByYW1hcmdzIGFkZGlwOyIJCQkJCVwKKwkJImJvb3RtICR7a2VybmVsX2FkZHJ9ICR7cmFtZGlza19hZGRyfVwwIgkJXAorCSJmbGFzaF9uZnM9cnVuIG5mc2FyZ3MgYWRkaXA7IgkJCQkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJuZXRfbmZzPXRmdHAgMjAwMDAwICR7Ym9vdGZpbGV9O3J1biBuZnNhcmdzIGFkZGlwO2Jvb3RtXDAiCVwKKwkiYm9vdGZpbGU9L3RmdHBib290L3RxbTUyMDAvdUltYWdlXDAiCQkJCVwKKwkibG9hZD10ZnRwIDIwMDAwMCAkKHUtYm9vdClcMCIJCQkJCVwKKwkidS1ib290PS90ZnRwYm9vdC90cW01MjAwL3UtYm9vdC5iaW5cMCIJCQkJXAorCSJ1cGRhdGU9cHJvdGVjdCBvZmYgRkMwMDAwMDAgRkMwNUZGRkY7IgkJCQlcCisJCSJlcmFzZSBGQzAwMDAwMCBGQzA1RkZGRjsiCQkJCVwKKwkJImNwLmIgMjAwMDAwIEZDMDAwMDAwICR7ZmlsZXNpemV9OyIJCQlcCisJCSJwcm90ZWN0IG9uIEZDMDAwMDAwIEZDMDVGRkZGXDAiCQkJXAorCSIiCisjZW5kaWYgLyogQ09ORklHX1RRTTUyMDBfQiAqLworCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkicnVuIG5ldF9uZnMiCisKKy8qCisgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCisgKi8KKyNkZWZpbmUgQ0ZHX0lQQlNQRUVEXzEzMwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKworI2lmIGRlZmluZWQoQ0ZHX0lQQlNQRUVEXzEzMykKKy8qCisgKiBQQ0kgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBBY3R1YWxseSBhIFBDSSBDbG9jayBvZiA2NiBNSHogaXMgb25seSBzZXQgKGluIGNwdV9pbml0LmMpIGlmCisgKiBDRkdfSVBCU1BFRURfMTMzIGlzIGRlZmluZWQuIFRoaXMgaXMgYmVjYXVzZSBhIFBDSSBDbG9jayBvZiA2NiBNSHogeWV0IGhhc24ndAorICogYmVlbiB0ZXN0ZWQgd2l0aCBhIElQQiBCdXMgQ2xvY2sgb2YgNjYgTUh6LgorICovCisjZGVmaW5lIENGR19QQ0lTUEVFRF82NgkJCS8qIGRlZmluZSBmb3IgNjZNSHogc3BlZWQgKi8KKyNlbmRpZgorCisvKgorICogSTJDIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCTEJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydCAqLworI2RlZmluZSBDRkdfSTJDX01PRFVMRQkJMgkvKiBTZWxlY3QgSTJDIG1vZHVsZSAjMiAqLworCisvKgorICogSTJDIGNsb2NrIGZyZXF1ZW5jeQorICoKKyAqIFBsZWFzZSBub3RpY2UsIHRoYXQgdGhlIHJlc3VsdGluZyBjbG9jayBmcmVxdWVuY3kgY291bGQgZGlmZmVyIGZyb20gdGhlCisgKiBjb25maWd1cmVkIHZhbHVlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIEkyQyBjbG9jayBpcyBkZXJpdmVkIGZyb20gc3lzdGVtCisgKiBjbG9jayBvdmVyIGEgZnJlcXVlbmN5IGRpdmlkZXIgd2l0aCBvbmx5IGEgZmV3IGRpdmlkZXIgdmFsdWVzLiBVLWJvb3QKKyAqIGNhbGN1bGF0ZXMgdGhlIGJlc3QgYXBwcm94aW1hdGlvbiBmb3IgQ0ZHX0kyQ19TUEVFRC4gSG93ZXZlciB0aGUgY2FsY3VsYXRlZAorICogYXBwcm94aW1hdGlvbiBhbGx3YXlzIGxpZXMgYmVsb3cgdGhlIGNvbmZpZ3VyZWQgdmFsdWUsIG5ldmVyIGFib3ZlLgorICovCisjZGVmaW5lIENGR19JMkNfU1BFRUQJCTEwMDAwMCAvKiAxMDAga0h6ICovCisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKworLyoKKyAqIEVFUFJPTSBjb25maWd1cmF0aW9uIGZvciBvbmJvYXJkIEVFUFJPTSBNMjRDMzIgKE0yNEM2NCBzaG91bGQgd29yaworICogYWxzbykuIEZvciBvdGhlciBFRVBST01zIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHZlcmlmaWVkLiBPbiBNaW5pLUZBUCB0aGUKKyAqIEVFUFJPTSAoMjRDNjQpIGlzIG9uIHRoZSBzYW1lIEkyQyBhZGRyZXNzIChidXQgb24gb3RoZXIgSTJDIGJ1cyksIHNvIHRoZQorICogc2FtZSBjb25maWd1cmF0aW9uIGNvdWxkIGJlIHVzZWQuCisgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUgkJMHg1MAkvKiAxMDEwMDAweCAqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTgkJMgorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk1CS8qID0zMiBCeXRlcyBwZXIgd3JpdGUgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TCTIwCisKKy8qIExpc3Qgb2YgSTJDIGFkZHJlc3NlcyB0byBiZSB2ZXJpZmllZCBieSBQT1NUICovCisjdW5kZWYgSTJDX0FERFJfTElTVAorI2RlZmluZSBJMkNfQUREUl9MSVNUCXsJQ0ZHX0kyQ19FRVBST01fQUREUiwJXAorCQkJCUNGR19JMkNfUlRDX0FERFIsCVwKKwkJCQlDRkdfSTJDX1NMQVZFIH0KKworLyoKKyAqIEZsYXNoIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJVEVYVF9CQVNFIC8qIDB4RkMwMDAwMDAgKi8KKworLyogdXNlIENGSSBmbGFzaCBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJMQkvKiBGbGFzaCBpcyBDRkkgY29uZm9ybWFudCAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkxCS8qIFVzZSB0aGUgY29tbW9uIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IENGR19CT09UQ1NfU1RBUlQgfQorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTworI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJMHgwNDAwMDAwMCAvKiA2NCBNQnl0ZSAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNTEyCS8qIG1heCBudW0gb2Ygc2VjdHMgb24gb25lIGNoaXAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQorCisjaWYgIWRlZmluZWQoQ0ZHX0xPV0JPT1QpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgMHgwMDc2MDAwMCArIDB4MDA4MDAwMDApCisjZWxzZQkvKiBDRkdfTE9XQk9PVCAqLworI2lmIGRlZmluZWQoQ09ORklHX1RRTTUyMDBfQikKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwMDgwMDAwKQorI2Vsc2UKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwMDYwMDAwKQorI2VuZGlmIC8qIENPTkZJR19UUU01MjAwX0IgKi8KKyNlbmRpZgkvKiBDRkdfTE9XQk9PVCAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcworCQkJCQkgICAoPSBjaGlwIHNlbGVjdHMpICovCisKKy8qIER5bmFtaWMgTVREIHBhcnRpdGlvbiBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1UUU01MjAwLTAiCisjaWYgZGVmaW5lZChDT05GSUdfVFFNNTIwMF9CKQorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1UUU01MjAwLTA6NzY4ayhmaXJtd2FyZSksIglcCisJCQkJCQkiMTI4MGsoa2VybmVsKSwiCVwKKwkJCQkJCSIybShpbml0cmQpLCIJCVwKKwkJCQkJCSI0bShzbWFsbC1mcyksIgkJXAorCQkJCQkJIjE2bShiaWctZnMpLCIJCVwKKwkJCQkJCSI4bShtaXNjKSIKKyNlbHNlCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPVRRTTUyMDAtMDo2NDBrKGZpcm13YXJlKSwiCVwKKwkJCQkJCSIxNDA4ayhrZXJuZWwpLCIJXAorCQkJCQkJIjJtKGluaXRyZCksIgkJXAorCQkJCQkJIjRtKHNtYWxsLWZzKSwiCQlcCisJCQkJCQkiMTZtKGJpZy1mcyksIgkJXAorCQkJCQkJIjhtKG1pc2MpIgorI2VuZGlmIC8qIENPTkZJR19UUU01MjAwX0IgKi8KKworLyoKKyAqIEVudmlyb25tZW50IHNldHRpbmdzCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgxMDAwMAorI2lmIGRlZmluZWQoQ09ORklHX1RRTTUyMDBfQikKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHg0MDAwMAorI2Vsc2UKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHgyMDAwMAorI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFX1JFRFVORAkoQ0ZHX0VOVl9TSVpFKQorI2VuZGlmIC8qIENPTkZJR19UUU01MjAwX0IgKi8KKworLyoKKyAqIE1lbW9yeSBtYXAKKyAqLworI2RlZmluZSBDRkdfTUJBUgkJMHhGMDAwMDAwMAorI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREVGQVVMVF9NQkFSCTB4ODAwMDAwMDAKKworLyogVXNlIE9OLUNoaXAgU1JBTSB1bnRpbCBSQU0gd2lsbCBiZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJTVBDNVhYWF9TUkFNCisjaWZkZWYgQ09ORklHX1BPU1QKKy8qIHByZXNlcnZlIHNwYWNlIGZvciB0aGUgcG9zdF93b3JkIGF0IGVuZCBvZiBvbi1jaGlwIFNSQU0gKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAlNUEM1WFhYX1NSQU1fUE9TVF9TSVpFCisjZWxzZQorI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECU1QQzVYWFhfU1JBTV9TSVpFCisjZW5kaWYKKworCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAorCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCisjaWYgKENGR19NT05JVE9SX0JBU0UgPCBDRkdfRkxBU0hfQkFTRSkKKyMgICBkZWZpbmUgQ0ZHX1JBTUJPT1QJCTEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFFNNTIwMF9CKQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSg1MTIgPDwgMTApCS8qIFJlc2VydmUgNTEyIGtCIGZvciBNb25pdG9yCSovCisjZWxzZQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSgzODQgPDwgMTApCS8qIFJlc2VydmUgMzg0IGtCIGZvciBNb25pdG9yCSovCisjZW5kaWYgLyogQ09ORklHX1RRTTUyMDBfQiAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDI1NiA8PCAxMCkJLyogUmVzZXJ2ZSAyNTYga0IgZm9yIG1hbGxvYygpCSovCisjZGVmaW5lIENGR19CT09UTUFQU1oJCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisKKy8qCisgKiBFdGhlcm5ldCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX01QQzV4eHhfRkVDCTEKKy8qCisgKiBEZWZpbmUgQ09ORklHX0ZFQ18xME1CSVQgdG8gZm9yY2UgRkVDIGF0IDEwTWIKKyAqLworLyogI2RlZmluZSBDT05GSUdfRkVDXzEwTUJJVCAxICovCisjZGVmaW5lIENPTkZJR19QSFlfQUREUgkJMHgwMAorCisvKgorICogR1BJTyBjb25maWd1cmF0aW9uCisgKgorICogdXNlIHBpbiBncGlvX3drdXBfNiBhcyBzZWNvbmQgU0RSQU0gY2hpcCBzZWxlY3QgKG1lbV9jczEpOgorICoJQml0IDAgKG1hc2s6IDB4ODAwMDAwMDApOiAxCisgKiB1c2UgQUxUIENBTiBwb3NpdGlvbjogQml0cyAyLTMgKG1hc2s6IDB4MzAwMDAwMDApOgorICoJMDAgLT4gTm8gQWx0ZXJuYXRpdmVzLCBDQU4xLzIgb24gUFNDMiBhY2NvcmRpbmcgdG8gUFNDMiBzZXR0aW5nLgorICoJMDEgLT4gQ0FOMSBvbiBJMkMxLCBDQU4yIG9uIFRtcjAvMS4KKyAqCSAgICAgIFVzZSBmb3IgUkVWMjAwIFNUSzUyWFggYm9hcmRzLiBEbyBub3QgdXNlIHdpdGggUkVWMTAwIG1vZHVsZXMKKyAqCSAgICAgIChiZWNhdXNlLCB0aGVyZSBJMkMxIGlzIHVzZWQgYXMgSTJDIGJ1cykKKyAqIHVzZSBQU0MxIGFzIFVBUlQ6IEJpdHMgMjgtMzEgKG1hc2s6IDB4MDAwMDAwMDcpOiAwMTAwCisgKiB1c2UgUFNDMiBhcyBDQU46IEJpdHMgMjU6MjcgKG1hc2s6IDB4MDAwMDAwMzApCisgKgkwMDAgLT4gQWxsIFBTQzIgcGlucyBhcmUgR0lPUHMKKyAqCTAwMSAtPiBDQU4xLzIgb24gUFNDMiBwaW5zCisgKgkgICAgICAgVXNlIGZvciBSRVYxMDAgU1RLNTJ4eCBib2FyZHMKKyAqIHVzZSBQU0MzOiBCaXRzIDIwOjIzIChtYXNrOiAweDAwMDAwMzAwKToKKyAqICAgICAgMDAwMSAtPiBVU0IyCisgKiAgICAgIDAwMDAgLT4gR1BJTworICogdXNlIFBTQzY6CisgKiAgIG9uIFNUSzUyeHg6CisgKgl1c2UgYXMgVUFSVC4gUGlucyBQU0M2XzAgdG8gUFNDNl8zIGFyZSB1c2VkLgorICoJQml0cyA5OjExIChtYXNrOiAweDAwNzAwMDAwKToKKyAqCSAgIDEwMSAtPiBQU0M2IDogRXh0ZW5kZWQgUE9TVCB0ZXN0IGlzIG5vdCBhdmFpbGFibGUKKyAqICAgb24gTUlOSS1GQVAgYW5kIFRRTTUyMDBfSUI6CisgKgl1c2UgUFNDNl8wIHRvIFBTQzZfMyBhcyBHUElPOiBCaXRzIDk6MTEgKG1hc2s6IDB4MDA3MDAwMDApOgorICoJICAgMDAwIC0+IFBTQzYgY291bGQgbm90IGJlIHVzZWQgYXMgVUFSVCwgQ09ERUMgb3IgSXJEQQorICogICBHUElPIG9uIFBTQzZfMyBpcyB1c2VkIGluIHBvc3RfaG90a2V5c19wcmVzc2VkKCkgdG8gZW5hYmxlIGV4dGVuZGVkIFBPU1QKKyAqICAgdGVzdHMuCisgKi8KKyNkZWZpbmUgQ0ZHX0dQU19QT1JUX0NPTkZJRwkweDgxNTAwMTE0CisKKy8qCisgKiBSVEMgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19SVENfTTQxVDExCTEKKyNkZWZpbmUgQ0ZHX0kyQ19SVENfQUREUgkweDY4CisjZGVmaW5lIENGR19NNDFUMTFfQkFTRV9ZRUFSCTE5MDAgICAgLyogYmVjYXVzZSBMaW51eCB1c2VzIHRoZSBzYW1lIGJhc2UKKwkJCQkJICAgeWVhciAqLworCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CSAgICAqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiPT4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDRkdfQ0JTSVpFCQkxMDI0CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAqLworI2Vsc2UKKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAqLworI2VuZGlmCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KKworLyogRW5hYmxlIGFuIGFsdGVybmF0ZSwgbW9yZSBleHRlbnNpdmUgbWVtb3J5IHRlc3QgKi8KKyNkZWZpbmUgQ0ZHX0FMVF9NRU1URVNUCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDEwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwMGYwMDAwMAkvKiAxIC4uLiAxNSBNQiBpbiBEUkFNCSovCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MgKi8KKworLyoKKyAqIEVuYWJsZSBsb29wdyBjb21tYW5kby4gVGhpcyBoYXMgb25seSBhZmZlY3QsIGlmIENGR19DTURfTUVNIGlzIGRlZmluZWQsCisgKiB3aGljaCBpcyBub3JtYWxseSBwYXJ0IG9mIHRoZSBkZWZhdWx0IGNvbW1hbmRzIChDRlZfQ01EX0RGTCkKKyAqLworI2RlZmluZSBDT05GSUdfTE9PUFcKKworLyoKKyAqIFZhcmlvdXMgbG93LWxldmVsIHNldHRpbmdzCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NUEM1MjAwKQorI2RlZmluZSBDRkdfSElEMF9JTklUCQlISUQwX0lDRSB8IEhJRDBfSUNGSQorI2RlZmluZSBDRkdfSElEMF9GSU5BTAkJSElEMF9JQ0UKKyNlbHNlCisjZGVmaW5lIENGR19ISUQwX0lOSVQJCTAKKyNkZWZpbmUgQ0ZHX0hJRDBfRklOQUwJCTAKKyNlbmRpZgorCisjZGVmaW5lIENGR19CT09UQ1NfU1RBUlQJQ0ZHX0ZMQVNIX0JBU0UKKyNkZWZpbmUgQ0ZHX0JPT1RDU19TSVpFCQlDRkdfRkxBU0hfU0laRQorI2lmZGVmIENGR19QQ0lTUEVFRF82NgorI2RlZmluZSBDRkdfQk9PVENTX0NGRwkJMHgwMDA4REYzMCAvKiBmb3IgcGNpX2NsayAgPSA2NiBNSHogKi8KKyNlbHNlCisjZGVmaW5lIENGR19CT09UQ1NfQ0ZHCQkweDAwMDRERjMwIC8qIGZvciBwY2lfY2xrID0gMzMgTUh6ICovCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX0NTMF9TVEFSVAkJQ0ZHX0ZMQVNIX0JBU0UKKyNkZWZpbmUgQ0ZHX0NTMF9TSVpFCQlDRkdfRkxBU0hfU0laRQorCisjZGVmaW5lIENPTkZJR19MQVNUX1NUQUdFX0lOSVQKKworLyoKKyAqIFNSQU0gLSBEbyBub3QgbWFwIGJlbG93IDIgR0IgaW4gYWRkcmVzcyBzcGFjZSwgYmVjYXVzZSB0aGlzIGFyZWEgaXMgdXNlZAorICogZm9yIFNEUkFNIGF1dG9zaXppbmcuCisgKi8KKyNkZWZpbmUgQ0ZHX0NTMl9TVEFSVAkJMHhFNTAwMDAwMAorI2RlZmluZSBDRkdfQ1MyX1NJWkUJCTB4MTAwMDAwCS8qIDEgTUJ5dGUgKi8KKyNkZWZpbmUgQ0ZHX0NTMl9DRkcJCTB4MDAwNEQ5MzAKKworLyoKKyAqIEdyYWZpYyBjb250cm9sbGVyIC0gRG8gbm90IG1hcCBiZWxvdyAyIEdCIGluIGFkZHJlc3Mgc3BhY2UsIGJlY2F1c2UgdGhpcworICogYXJlYSBpcyB1c2VkIGZvciBTRFJBTSBhdXRvc2l6aW5nLgorICovCisjZGVmaW5lIFNNNTAxX0ZCX0JBU0UJCTB4RTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0NTMV9TVEFSVAkJKFNNNTAxX0ZCX0JBU0UpCisjZGVmaW5lIENGR19DUzFfU0laRQkJMHg0MDAwMDAwCS8qIDY0IE1CeXRlICovCisjZGVmaW5lIENGR19DUzFfQ0ZHCQkweDhGNDhGRjcwCisjZGVmaW5lIFNNNTAxX01NSU9fQkFTRQkJQ0ZHX0NTMV9TVEFSVCArIDB4MDNFMDAwMDAKKworI2RlZmluZSBDRkdfQ1NfQlVSU1QJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0NTX0RFQURDWUNMRQkweDMzMzMzMzExCS8qIDEgZGVhZCBjeWNsZSBmb3IgZmxhc2ggYW5kIFNNNTAxICovCisKKyNkZWZpbmUgQ0ZHX1JFU0VUX0FERFJFU1MJMHhmZjAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVU0Igc3R1ZmYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBDT05GSUdfVVNCX0NMT0NLCTB4MDAwMUJCQkIKKyNkZWZpbmUgQ09ORklHX1VTQl9DT05GSUcJMHgwMDAwMTAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJREUvQVRBIHN0dWZmIFN1cHBvcnRzIElERSBoYXJkZGlzaworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyN1bmRlZglDT05GSUdfSURFXzh4eF9QQ0NBUkQJCS8qIFVzZSBJREUgd2l0aCBQQyBDYXJkIEFkYXB0ZXIgKi8KKworI3VuZGVmCUNPTkZJR19JREVfOHh4X0RJUkVDVAkJLyogRGlyZWN0IElERQkgbm90IHN1cHBvcnRlZAkqLworI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogTEVECSBmb3IgaWRlIG5vdCBzdXBwb3J0ZWQJKi8KKworI2RlZmluZSBDT05GSUdfSURFX1JFU0VUCQkvKiByZXNldCBmb3IgaWRlIHN1cHBvcnRlZAkqLworI2RlZmluZSBDT05GSUdfSURFX1BSRUlOSVQKKworI2RlZmluZSBDRkdfSURFX01BWEJVUwkJMQkvKiBtYXguIDEgSURFIGJ1cwkJKi8KKyNkZWZpbmUgQ0ZHX0lERV9NQVhERVZJQ0UJMgkvKiBtYXguIDIgZHJpdmVzIHBlciBJREUgYnVzCSovCisKKyNkZWZpbmUgQ0ZHX0FUQV9JREUwX09GRlNFVAkweDAwMDAKKworI2RlZmluZSBDRkdfQVRBX0JBU0VfQUREUglNUEM1WFhYX0FUQQorCisvKiBPZmZzZXQgZm9yIGRhdGEgSS9PCQkJKi8KKyNkZWZpbmUgQ0ZHX0FUQV9EQVRBX09GRlNFVAkoMHgwMDYwKQorCisvKiBPZmZzZXQgZm9yIG5vcm1hbCByZWdpc3RlciBhY2Nlc3NlcwkqLworI2RlZmluZSBDRkdfQVRBX1JFR19PRkZTRVQJKENGR19BVEFfREFUQV9PRkZTRVQpCisKKy8qIE9mZnNldCBmb3IgYWx0ZXJuYXRlIHJlZ2lzdGVycwkqLworI2RlZmluZSBDRkdfQVRBX0FMVF9PRkZTRVQJKDB4MDA1QykKKworLyogSW50ZXJ2YWwgYmV0d2VlbiByZWdpc3RlcnMJCQkJCQkgICAgICovCisjZGVmaW5lIENGR19BVEFfU1RSSURFCQk0CisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAppbmRleCA2Yjg3NTlmLi5lMGRlNWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKQEAgLTIsNyArMiw3IEBACiAgKiAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNQogICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDQtMjAwNQorICogKEMpIENvcHlyaWdodCAyMDA0LTIwMDYKICAqIE1hcnRpbiBLcmF1c2UsIFRRLVN5c3RlbXMgR21iSCwgbWFydGluLmtyYXVzZUB0cXMuZGUKICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMzIsMjkgKzMyLDQ3IEBACiAgKiAoZWFzeSB0byBjaGFuZ2UpCiAgKi8KIAotI2RlZmluZSBDT05GSUdfTVBDNXh4eAkJMQkvKiBUaGlzIGlzIGFuIE1QQzV4eHggQ1BVICovCi0jZGVmaW5lIENPTkZJR19NUEM1MjAwCQkxCS8qIChtb3JlIHByZWNpc2VseSBhbiBNUEM1MjAwIENQVSkgKi8KLSNkZWZpbmUgQ09ORklHX1RRTTUyMDAJCTEJLyogLi4uIG9uIFRRTTUyMDAgbW9kdWxlICovCi0jdW5kZWYgQ09ORklHX1RRTTUyMDBfUkVWMTAwCQkvKiAgZGVmaW5lIGZvciByZXZpc2lvbiAxMDAgbW9kdWxlcyAqLwotI2RlZmluZSBDT05GSUdfU1RLNTJYWAkJMQkvKiAuLi4gb24gYSBTVEs1MlhYIGJhc2UgYm9hcmQgKi8KKyNkZWZpbmUgQ09ORklHX01QQzV4eHgJCTEJLyogVGhpcyBpcyBhbiBNUEM1eHh4IENQVQkJKi8KKyNkZWZpbmUgQ09ORklHX01QQzUyMDAJCTEJLyogKG1vcmUgcHJlY2lzZWx5IGFuIE1QQzUyMDAgQ1BVKQkqLworI2RlZmluZSBDT05GSUdfVFFNNTIwMAkJMQkvKiAuLi4gb24gVFFNNTIwMCBtb2R1bGUJCSovCisjdW5kZWYgQ09ORklHX1RRTTUyMDBfUkVWMTAwCQkvKiAgZGVmaW5lIGZvciByZXZpc2lvbiAxMDAgbW9kdWxlcwkqLwogCi0jZGVmaW5lIENGR19NUEM1WFhYX0NMS0lOCTMzMDAwMDAwIC8qIC4uLiBydW5uaW5nIGF0IDMzLjAwMDAwME1IeiAqLworLyogT24gYSBDYW1lcm9uIG9yIG9uIGEgRk8zMDAgYm9hcmQgb3IgLi4uCQkJCSovCisjaWYgIWRlZmluZWQoQ09ORklHX0NBTTUyMDApICYmICFkZWZpbmVkKENPTkZJR19GTzMwMCkKKyNkZWZpbmUgQ09ORklHX1NUSzUyWFgJCTEJLyogLi4uIG9uIGEgU1RLNTJYWCBib2FyZAkJKi8KKyNlbmRpZgogCi0jZGVmaW5lIEJPT1RGTEFHX0NPTEQJCTB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggICovCi0jZGVmaW5lIEJPT1RGTEFHX1dBUk0JCTB4MDIJLyogU29mdHdhcmUgcmVib290CSAgICAgKi8KKyNkZWZpbmUgQ0ZHX01QQzVYWFhfQ0xLSU4JMzMwMDAwMDAgLyogLi4uIHJ1bm5pbmcgYXQgMzMuMDAwMDAwTUh6CQkqLwogCi0jZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkzMgkvKiBGb3IgTVBDNXh4eCBDUFVzICovCisjZGVmaW5lIEJPT1RGTEFHX0NPTEQJCTB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggCSovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JCTB4MDIJLyogU29mdHdhcmUgcmVib290CQkJKi8KKworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogRm9yIE1QQzV4eHggQ1BVcwkJCSovCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKLSMgIGRlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUgKi8KKyMgIGRlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KICNlbmRpZgogCiAvKgogICogU2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgogICovCi0jZGVmaW5lIENPTkZJR19QU0NfQ09OU09MRQkxCS8qIGNvbnNvbGUgaXMgb24gUFNDMSAqLwotI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAkvKiAuLi4gYXQgMTE1MjAwIGJwcyAqLworI2RlZmluZSBDT05GSUdfUFNDX0NPTlNPTEUJMQkvKiBjb25zb2xlIGlzIG9uIFBTQzEJCQkqLworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAkvKiAuLi4gYXQgMTE1MjAwIGJwcwkJCSovCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMjMwNDAwIH0KIAorI2lmZGVmIENPTkZJR19GTzMwMAorI2RlZmluZSBDRkdfREVWSUNFX05VTExERVYJCTEJLyogZW5hYmxlIG51bGwgZGV2aWNlICovCisjZGVmaW5lIENPTkZJR19TSUxFTlRfQ09OU09MRQkJMQkvKiBlbmFibGUgc2lsZW50IHN0YXJ0dXAgKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgkxCS8qIHVzZWQgdG8gZGV0ZWN0IFMxIHN3aXRjaCBwb3NpdGlvbiAqLworI2RlZmluZSBDT05GSUdfVVNCX0JJTl9GSVhVUAkJMQkvKiBmb3IgYSBidWdneSBVU0IgZGV2aWNlICovCisjaWYgMAorI2RlZmluZSBGTzMwMF9TSUxFTlRfQ09OU09MRV9XSEVOX1MxX0NMT1NFRAkxCS8qIHNpbGVudCBjb25zb2xlIG9uIFBTQzEgd2hlbiBTMSAqLworCQkJCQkJCS8qIHN3aXRjaCBpcyBjbG9zZWQgKi8KKyNlbmRpZgorCisjdW5kZWYgRk8zMDBfU0lMRU5UX0NPTlNPTEVfV0hFTl9TMV9DTE9TRUQJCS8qIHNpbGVudCBjb25zb2xlIG9uIFBTQzEgd2hlbiBTMSAqLworCQkJCQkJCS8qIHN3aXRjaCBpcyBvcGVuICovCisjZW5kaWYJLyogQ09ORklHX0ZPMzAwICovCisKICNpZmRlZiBDT05GSUdfU1RLNTJYWAogI2RlZmluZSBDT05GSUdfUFMyS0JECQkJLyogQVQtUFMvMiBLZXlib2FyZAkJKi8KICNkZWZpbmUgQ09ORklHX1BTMk1VTFQJCQkvKiAuLiBvbiBQUy8yIE11bHRpcGxleGVyCSovCkBAIC05NiwxOCArMTE0LDI0IEBACiAvKgogICogVmlkZW8gY29uc29sZQogICovCi0jaWYgMQorI2lmbmRlZiBDT05GSUdfVFFNNTIwMFMJCS8qIE5vIGdyYXBoaWNzIGNvbnRyb2xsZXIgb24gVFFNNTIwMFMgKi8KICNkZWZpbmUgQ09ORklHX1ZJREVPCiAjZGVmaW5lIENPTkZJR19WSURFT19TTTUwMQogI2RlZmluZSBDT05GSUdfVklERU9fU001MDFfMzJCUFAKICNkZWZpbmUgQ09ORklHX0NGQl9DT05TT0xFCiAjZGVmaW5lIENPTkZJR19WSURFT19MT0dPCi0jZGVmaW5lIENPTkZJR19WR0FfQVNfU0lOR0xFX0RFVklDRQorCisjaWZuZGVmIENPTkZJR19GTzMwMAogI2RlZmluZSBDT05GSUdfQ09OU09MRV9FWFRSQV9JTkZPCisjZWxzZQorI2RlZmluZSBDT05GSUdfVklERU9fQk1QX0xPR08KKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19WR0FfQVNfU0lOR0xFX0RFVklDRQogI2RlZmluZSBDT05GSUdfVklERU9fU1dfQ1VSU09SCiAjZGVmaW5lIENPTkZJR19TUExBU0hfU0NSRUVOCiAjZGVmaW5lIENGR19DT05TT0xFX0lTX0lOX0VOVgotI2VuZGlmCisjZW5kaWYgLyogI2lmbmRlZiBDT05GSUdfVFFNNTIwMFMgKi8KIAogI2lmZGVmIENPTkZJR19WSURFTwogI2RlZmluZSBBRERfQk1QX0NNRAkJQ0ZHX0NNRF9CTVAKQEAgLTEyMSw3ICsxNDUsNyBAQAogI2RlZmluZSBDT05GSUdfSVNPX1BBUlRJVElPTgogCiAvKiBVU0IgKi8KLSNpZmRlZiBDT05GSUdfU1RLNTJYWAorI2lmIGRlZmluZWQoQ09ORklHX1NUSzUyWFgpIHx8IGRlZmluZWQoQ09ORklHX0ZPMzAwKQogI2RlZmluZSBDT05GSUdfVVNCX09IQ0kKICNkZWZpbmUgQUREX1VTQl9DTUQJCUNGR19DTURfVVNCIHwgQ0ZHX0NNRF9GQVQKICNkZWZpbmUgQ09ORklHX1VTQl9TVE9SQUdFCkBAIC0xMjksMTAgKzE1MywxMiBAQAogI2RlZmluZSBBRERfVVNCX0NNRAkJMAogI2VuZGlmCiAKKyNpZm5kZWYgQ09ORklHX0NBTTUyMDAKIC8qIFBPU1Qgc3VwcG9ydCAqLwogI2RlZmluZSBDT05GSUdfUE9TVAkJKENGR19QT1NUX01FTU9SWSAgIHwgXAogCQkJCSBDRkdfUE9TVF9DUFUJICAgfCBcCiAJCQkJIENGR19QT1NUX0kyQykKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BPU1QKICNkZWZpbmUgQ0ZHX0NNRF9QT1NUX0RJQUcgQ0ZHX0NNRF9ESUFHCkBAIC0xNDMsNyArMTY5LDcgQEAKICNlbmRpZgogCiAvKiBJREUgKi8KLSNpZiBkZWZpbmVkIChDT05GSUdfTUlOSUZBUCkgfHwgZGVmaW5lZCAoQ09ORklHX1NUSzUyWFgpCisjaWYgZGVmaW5lZCAoQ09ORklHX01JTklGQVApIHx8IGRlZmluZWQgKENPTkZJR19TVEs1MlhYKSB8fCBkZWZpbmVkKENPTkZJR19GTzMwMCkKICNkZWZpbmUgQUREX0lERV9DTUQJCShDRkdfQ01EX0lERSB8IENGR19DTURfRkFUIHwgQ0ZHX0NNRF9FWFQyKQogI2Vsc2UKICNkZWZpbmUgQUREX0lERV9DTUQJCTAKQEAgLTE3Niw4ICsyMDIsOCBAQAogCiAjZGVmaW5lCUNPTkZJR19USU1FU1RBTVAJCS8qIGRpc3BsYXkgaW1hZ2UgdGltZXN0YW1wcyAqLwogCi0jaWYgKFRFWFRfQkFTRSA9PSAweEZDMDAwMDAwKQkJLyogQm9vdCBsb3cgKi8KLSMgICBkZWZpbmUgQ0ZHX0xPV0JPT1QJCTEKKyNpZiAoVEVYVF9CQVNFICE9IDB4RkZGMDAwMDApCisjICAgZGVmaW5lIENGR19MT1dCT09UCQkxCS8qIEJvb3QgbG93ICovCiAjZW5kaWYKIAogLyoKQEAgLTE4NiwxMSArMjEyLDQ5IEBACiAjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMgKi8KIAogI2RlZmluZSBDT05GSUdfUFJFQk9PVAkiZWNobzsiIFwKLQkiZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKKwkiZWNobyBUeXBlIFxcXCJydW4gZmxhc2hfbmZzXFxcIiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlM7IiBcCiAJImVjaG8iCiAKICN1bmRlZglDT05GSUdfQk9PVEFSR1MKIAorI2lmZGVmIENPTkZJR19TVEs1MlhYCisjIGlmIGRlZmluZWQoQ09ORklHX1RRTTUyMDBfQikKKyMgIGlmIGRlZmluZWQoQ0ZHX0xPV0JPT1QpCisjICAgZGVmaW5lIEVOVl9VUERUCQkJCQkJCVwKKwkidXBkYXRlPXByb3RlY3Qgb2ZmIEZDMDAwMDAwIEZDMDdGRkZGOyIJCQkJXAorCQkiZXJhc2UgRkMwMDAwMDAgRkMwN0ZGRkY7IgkJCQlcCisJCSJjcC5iIDIwMDAwMCBGQzAwMDAwMCAke2ZpbGVzaXplfTsiCQkJXAorCQkicHJvdGVjdCBvbiBGQzAwMDAwMCBGQzA3RkZGRlwwIgorIyAgZWxzZQkvKiBoaWdoYm9vdCAqLworIyAgIGRlZmluZSBFTlZfVVBEVAkJCQkJCQlcCisJInVwZGF0ZT1wcm90ZWN0IG9mZiBGRkYwMDAwMCBGRkY3RkZGRjsiCQkJCVwKKwkJImVyYXNlIEZGRjAwMDAwIEZGRjdGRkZGOyIJCQkJXAorCQkiY3AuYiAyMDAwMDAgRkZGMDAwMDAgJHtmaWxlc2l6ZX07IgkJCVwKKwkJInByb3RlY3Qgb24gRkZGMDAwMDAgRkZGN0ZGRkZcMCIKKyMgIGVuZGlmIC8qIENGR19MT1dCT09UICovCisjIGVsc2UJLyogIUNPTkZJR19UUU01MjAwX0IgKi8KKyMgIGRlZmluZSBFTlZfVVBEVAkJCQkJCQlcCisJInVwZGF0ZT1wcm90ZWN0IG9mZiBGQzAwMDAwMCBGQzA1RkZGRjsiCQkJCVwKKwkJImVyYXNlIEZDMDAwMDAwIEZDMDVGRkZGOyIJCQkJXAorCQkiY3AuYiAyMDAwMDAgRkMwMDAwMDAgJHtmaWxlc2l6ZX07IgkJCVwKKwkJInByb3RlY3Qgb24gRkMwMDAwMDAgRkMwNUZGRkZcMCIKKyMgZW5kaWYgLyogQ09ORklHX1RRTTUyMDBfQiAqLworI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NBTTUyMDApCisjICAgZGVmaW5lIEVOVl9VUERUCQkJCQkJCVwKKwkidXBkYXRlPXByb3RlY3Qgb2ZmIEZDMDAwMDAwIEZDMDNGRkZGOyIJCQkJXAorCQkiZXJhc2UgRkMwMDAwMDAgRkMwM0ZGRkY7IgkJCQlcCisJCSJjcC5iIDIwMDAwMCBGQzAwMDAwMCAke2ZpbGVzaXplfTsiCQkJXAorCQkicHJvdGVjdCBvbiBGQzAwMDAwMCBGQzAzRkZGRlwwIgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0ZPMzAwKQorIyAgIGRlZmluZSBFTlZfVVBEVAkJCQkJCQlcCisJInVwZGF0ZT1wcm90ZWN0IG9mZiBGQzAwMDAwMCBGQzA1RkZGRjsiCQkJCVwKKwkJImVyYXNlIEZDMDAwMDAwIEZDMDVGRkZGOyIJCQkJXAorCQkiY3AuYiAyMDAwMDAgRkMwMDAwMDAgJHtmaWxlc2l6ZX07IgkJCVwKKwkJInByb3RlY3Qgb24gRkMwMDAwMDAgRkMwNUZGRkZcMCIKKyNlbHNlCisjIGVycm9yICJVbmtub3duIENhcnJpZXIgQm9hcmQiCisjZW5kaWYJLyogQ09ORklHX1NUSzUyWFggKi8KKwogI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCiAJIm5ldGRldj1ldGgwXDAiCQkJCQkJCVwKIAkicm9vdHBhdGg9L29wdC9lbGRrL3BwY182eHhcMCIJCQkJCVwKQEAgLTIwMCwxOCArMjY0LDE4IEBACiAJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKIAkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAogCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmYgcGFuaWM9MVwwIgkJCVwKLQkiZmxhc2hfc2VsZj1ydW4gcmFtYXJncyBhZGRpcDsiCQkJCQlcCisJImFkZGNvbnM9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiY29uc29sZT10dHlTMCwke2JhdWRyYXRlfVwwIgkJCQlcCisJImZsYXNoX3NlbGY9cnVuIHJhbWFyZ3MgYWRkaXAgYWRkY29uczsiCQkJCVwKIAkJImJvb3RtICR7a2VybmVsX2FkZHJ9ICR7cmFtZGlza19hZGRyfVwwIgkJXAotCSJmbGFzaF9uZnM9cnVuIG5mc2FyZ3MgYWRkaXA7IgkJCQkJXAorCSJmbGFzaF9uZnM9cnVuIG5mc2FyZ3MgYWRkaXAgYWRkY29uczsiCQkJCVwKIAkJImJvb3RtICR7a2VybmVsX2FkZHJ9XDAiCQkJCVwKLQkibmV0X25mcz10ZnRwIDIwMDAwMCAke2Jvb3RmaWxlfTtydW4gbmZzYXJncyBhZGRpcDtib290bVwwIglcCisJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXAgYWRkY29uczsiCVwKKwkJImJvb3RtXDAiCQkJCQkJXAogCSJib290ZmlsZT0vdGZ0cGJvb3QvdHFtNTIwMC91SW1hZ2VcMCIJCQkJXAotCSJsb2FkPXRmdHAgMjAwMDAwICR7dS1ib290fVwwIgkJCQkJXAogCSJ1LWJvb3Q9L3RmdHBib290L3RxbTUyMDAvdS1ib290LmJpblwwIgkJCQlcCi0JInVwZGF0ZT1wcm90ZWN0IG9mZiBGQzAwMDAwMCBGQzA1RkZGRjsiCQkJCVwKLQkJImVyYXNlIEZDMDAwMDAwIEZDMDVGRkZGOyIJCQkJXAotCQkiY3AuYiAyMDAwMDAgRkMwMDAwMDAgJHtmaWxlc2l6ZX07IgkJCVwKLQkJInByb3RlY3Qgb24gRkMwMDAwMDAgRkMwNUZGRkZcMCIJCQlcCisJImxvYWQ9dGZ0cCAyMDAwMDAgJHt1LWJvb3R9XDAiCQkJCQlcCisJRU5WX1VQRFQJCQkJCQkJXAogCSIiCiAKICNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJydW4gbmV0X25mcyIKQEAgLTI4Myw0NSArMzQ3LDg3IEBACiAvKgogICogRmxhc2ggY29uZmlndXJhdGlvbgogICovCi0jZGVmaW5lIENGR19GTEFTSF9CQVNFCQlURVhUX0JBU0UgLyogMHhGQzAwMDAwMCAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHhGQzAwMDAwMAogCi0vKiB1c2UgQ0ZJIGZsYXNoIGRyaXZlciBpZiBubyBtb2R1bGUgdmFyaWFudCBpcyBzcGV6aWZpZWQgKi8KKy8qIHVzZSBDRkkgZmxhc2ggZHJpdmVyICovCiAjZGVmaW5lIENGR19GTEFTSF9DRkkJCTEJLyogRmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgKi8KICNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJMQkvKiBVc2UgdGhlIGNvbW1vbiBkcml2ZXIgKi8KICNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfQk9PVENTX1NUQVJUIH0KICNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KICNkZWZpbmUgQ0ZHX0ZMQVNIX1NJWkUJCTB4MDQwMDAwMDAgLyogNjQgTUJ5dGUgKi8KICNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTUxMgkvKiBtYXggbnVtIG9mIHNlY3RzIG9uIG9uZSBjaGlwICovCi0jdW5kZWYgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJLyogbm90IHN1cHBvcnRlZCB5ZXQgZm9yIEFNRCAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCiAKLSNpZiAhZGVmaW5lZChDRkdfTE9XQk9PVCkKLSNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwNzYwMDAwICsgMHgwMDgwMDAwMCkKLSNlbHNlCS8qIENGR19MT1dCT09UICovCi0jZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgMHgwMDA2MDAwMCkKLSNlbmRpZgkvKiBDRkdfTE9XQk9PVCAqLworI2lmIGRlZmluZWQgKENPTkZJR19DQU01MjAwKQorIyBkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwMDQwMDAwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfVFFNNTIwMF9CKQorIyBkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwMDgwMDAwKQorI2Vsc2UKKyMgZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19GTEFTSF9CQVNFICsgMHgwMDA2MDAwMCkKKyNlbmRpZgorCiAjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzCiAJCQkJCSAgICg9IGNoaXAgc2VsZWN0cykgKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMjQwMDAwCS8qIEZsYXNoIEVyYXNlIFRpbWVvdXQgKGluIG1zKQkqLwotI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogRmxhc2ggV3JpdGUgVGltZW91dCAoaW4gbXMpCSovCiAKIC8qIER5bmFtaWMgTVREIHBhcnRpdGlvbiBzdXBwb3J0ICovCiAjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCiAjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1UUU01MjAwLTAiCi0jZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPVRRTTUyMDAtMDo2NDBrKGZpcm13YXJlKSwiCVwKKworI2lmZGVmIENPTkZJR19TVEs1MlhYCisjIGlmIGRlZmluZWQoQ09ORklHX1RRTTUyMDBfQikKKyMgIGlmIGRlZmluZWQoQ0ZHX0xPV0JPT1QpCisjICAgZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPVRRTTUyMDAtMDoxbShmaXJtd2FyZSksIglcCisJCQkJCQkiMTUzNmsoa2VybmVsKSwiCVwKKwkJCQkJCSIzNTg0ayhzbWFsbC1mcyksIglcCisJCQkJCQkiMm0oaW5pdHJkKSwiCQlcCisJCQkJCQkiOG0obWlzYyksIgkJXAorCQkJCQkJIjE2bShiaWctZnMpIgorIyAgZWxzZQkvKiBoaWdoYm9vdCAqLworIyAgIGRlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1UUU01MjAwLTA6MjU2MGsoa2VybmVsKSwiCVwKKwkJCQkJCSIzNTg0ayhzbWFsbC1mcyksIglcCisJCQkJCQkiMm0oaW5pdHJkKSwiCQlcCisJCQkJCQkiOG0obWlzYyksIgkJXAorCQkJCQkJIjE1bShiaWctZnMpLCIJCVwKKwkJCQkJCSIxbShmaXJtd2FyZSkiCisjICBlbmRpZiAvKiBDRkdfTE9XQk9PVCAqLworIyBlbHNlCS8qICFDT05GSUdfVFFNNTIwMF9CICovCisjICAgZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPVRRTTUyMDAtMDo2NDBrKGZpcm13YXJlKSwiCVwKIAkJCQkJCSIxNDA4ayhrZXJuZWwpLCIJXAogCQkJCQkJIjJtKGluaXRyZCksIgkJXAogCQkJCQkJIjRtKHNtYWxsLWZzKSwiCQlcCi0JCQkJCQkiMTZtKGJpZy1mcyksIgkJXAotCQkJCQkJIjhtKG1pc2MpIgorCQkJCQkJIjhtKG1pc2MpLCIJCVwKKwkJCQkJCSIxNm0oYmlnLWZzKSIKKyMgZW5kaWYgLyogQ09ORklHX1RRTTUyMDBfQiAqLworI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NBTTUyMDApCisjICAgZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPVRRTTUyMDAtMDo3NjhrKGZpcm13YXJlKSwiCVwKKwkJCQkJCSIxNzkyayhrZXJuZWwpLCIJXAorCQkJCQkJIjM1ODRrKHNtYWxsLWZzKSwiCVwKKwkJCQkJCSIybShpbml0cmQpLCIJCVwKKwkJCQkJCSI4bShtaXNjKSwiCQlcCisJCQkJCQkiMTZtKGJpZy1mcykiCisjZWxpZiBkZWZpbmVkIChDT05GSUdfRk8zMDApCisjICAgZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPVRRTTUyMDAtMDo2NDBrKGZpcm13YXJlKSwiCVwKKwkJCQkJCSIxNDA4ayhrZXJuZWwpLCIJXAorCQkJCQkJIjJtKGluaXRyZCksIgkJXAorCQkJCQkJIjRtKHNtYWxsLWZzKSwiCQlcCisJCQkJCQkiOG0obWlzYyksIgkJXAorCQkJCQkJIjE2bShiaWctZnMpIgorI2Vsc2UKKyMgZXJyb3IgIlVua25vd24gQ2FycmllciBCb2FyZCIKKyNlbmRpZgkvKiBDT05GSUdfU1RLNTJYWCAqLwogCiAvKgogICogRW52aXJvbm1lbnQgc2V0dGluZ3MKICAqLwogI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKLSNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDEwMDAwCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCS8qIDE2IGsgLSBrZWVwIHNtYWxsIGZvciBmYXN0IGJvb3RpbmcgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19UUU01MjAwX0IpCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4NDAwMDAKKyNlbHNlCiAjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAKKyNlbmRpZiAvKiBDT05GSUdfVFFNNTIwMF9CICovCiAjZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQotI2RlZmluZQlDRkdfRU5WX1NJWkVfUkVEVU5ECShDRkdfRU5WX1NJWkUpCisjZGVmaW5lIENGR19FTlZfU0laRV9SRURVTkQJKENGR19FTlZfU0laRSkKIAogLyoKICAqIE1lbW9yeSBtYXAKQEAgLTM0OSw4ICs0NTUsMTUgQEAKICMgICBkZWZpbmUgQ0ZHX1JBTUJPT1QJCTEKICNlbmRpZgogCi0jZGVmaW5lIENGR19NT05JVE9SX0xFTgkJKDM4NCA8PCAxMCkJLyogUmVzZXJ2ZSAzODQga0IgZm9yIE1vbml0b3IJKi8KLSNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBtYWxsb2MoKQkqLworI2lmIGRlZmluZWQgKENPTkZJR19DQU01MjAwKQorIyBkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCSgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBNb25pdG9yCSovCisjZWxpZiBkZWZpbmVkKENPTkZJR19UUU01MjAwX0IpCisjIGRlZmluZSBDRkdfTU9OSVRPUl9MRU4JKDUxMiA8PCAxMCkJLyogUmVzZXJ2ZSA1MTIga0IgZm9yIE1vbml0b3IJKi8KKyNlbHNlCisjIGRlZmluZSBDRkdfTU9OSVRPUl9MRU4JKDM4NCA8PCAxMCkJLyogUmVzZXJ2ZSAzODQga0IgZm9yIE1vbml0b3IJKi8KKyNlbmRpZgorCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMTAyNCA8PCAxMCkJLyogUmVzZXJ2ZSAxMDI0IGtCIGZvciBtYWxsb2MoKQkqLwogI2RlZmluZSBDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCAqLwogCiAvKgpAQCAtMzcxLDE1ICs0ODQsMTggQEAKICAqIHVzZSBBTFQgQ0FOIHBvc2l0aW9uOiBCaXRzIDItMyAobWFzazogMHgzMDAwMDAwMCk6CiAgKgkwMCAtPiBObyBBbHRlcm5hdGl2ZXMsIENBTjEvMiBvbiBQU0MyIGFjY29yZGluZyB0byBQU0MyIHNldHRpbmcuCiAgKgkwMSAtPiBDQU4xIG9uIEkyQzEsIENBTjIgb24gVG1yMC8xLgotICoJICAgICAgVXNlIGZvciBSRVYyMDAgU1RLNTJYWCBib2FyZHMuIERvIG5vdCB1c2Ugd2l0aCBSRVYxMDAgbW9kdWxlcwotICoJICAgICAgKGJlY2F1c2UsIHRoZXJlIEkyQzEgaXMgdXNlZCBhcyBJMkMgYnVzKQorICoJICAgICAgVXNlIGZvciBSRVYyMDAgU1RLNTJYWCBib2FyZHMgYW5kIEZPMzAwIGJvYXJkcy4gRG8gbm90IHVzZQorICoJICAgICAgd2l0aCBSRVYxMDAgbW9kdWxlcyAoYmVjYXVzZSwgdGhlcmUgSTJDMSBpcyB1c2VkIGFzIEkyQyBidXMpCiAgKiB1c2UgUFNDMSBhcyBVQVJUOiBCaXRzIDI4LTMxIChtYXNrOiAweDAwMDAwMDA3KTogMDEwMAogICogdXNlIFBTQzIgYXMgQ0FOOiBCaXRzIDI1OjI3IChtYXNrOiAweDAwMDAwMDMwKQogICoJMDAwIC0+IEFsbCBQU0MyIHBpbnMgYXJlIEdJT1BzCiAgKgkwMDEgLT4gQ0FOMS8yIG9uIFBTQzIgcGlucwogICoJICAgICAgIFVzZSBmb3IgUkVWMTAwIFNUSzUyeHggYm9hcmRzCisgKgkwMXggLT4gVXNlIEFDOTcKKyAqIHVzZSBQU0MzOiBCaXRzIDIwLTIzIChtYXNrOiAweDAwMDAwZjAwKQorICoJMTEwMCAtPiBVQVJUL1NQSSAob24gRk8zMDAgYm9hcmQpCiAgKiB1c2UgUFNDNjoKLSAqICAgb24gU1RLNTJ4eDoKKyAqICAgb24gU1RLNTJ4eCBhbmQgRk8zMDA6CiAgKgl1c2UgYXMgVUFSVC4gUGlucyBQU0M2XzAgdG8gUFNDNl8zIGFyZSB1c2VkLgogICoJQml0cyA5OjExIChtYXNrOiAweDAwNzAwMDAwKToKICAqCSAgIDEwMSAtPiBQU0M2IDogRXh0ZW5kZWQgUE9TVCB0ZXN0IGlzIG5vdCBhdmFpbGFibGUKQEAgLTQwMSw2ICs1MTcsOCBAQAogIyAgIGRlZmluZSBDRkdfR1BTX1BPUlRfQ09ORklHCTB4OTE1MDAwMDQKICMgIGVuZGlmCiAjIGVuZGlmCisjZWxpZiBkZWZpbmVkIChDT05GSUdfRk8zMDApCisjIGRlZmluZSBDRkdfR1BTX1BPUlRfQ09ORklHCTB4OTE1MDJjMjQKICNlbHNlICAvKiBUTVE1MjAwIEluYmV0cmllYm5haG1lLUJvYXJkICovCiAjIGRlZmluZSBDRkdfR1BTX1BPUlRfQ09ORklHCTB4ODEwMDAwMDQKICNlbmRpZgpAQCAtNDExLDYgKzUyOSw4IEBACiAjaWYgZGVmaW5lZCAoQ09ORklHX1NUSzUyWFgpICYmICFkZWZpbmVkIChDT05GSUdfU1RLNTJYWF9SRVYxMDApCiAjIGRlZmluZSBDT05GSUdfUlRDX000MVQxMSAxCiAjIGRlZmluZSBDRkdfSTJDX1JUQ19BRERSIDB4NjgKKyMgZGVmaW5lIENGR19NNDFUMTFfQkFTRV9ZRUFSCTE5MDAgICAgLyogYmVjYXVzZSBMaW51eCB1c2VzIHRoZSBzYW1lIGJhc2UKKwkJCQkJICAgeWVhciAqLwogI2Vsc2UKICMgZGVmaW5lIENPTkZJR19SVENfTVBDNTIwMAkxCS8qIHVzZSBpbnRlcm5hbCBNUEM1MjAwIFJUQyAqLwogI2VuZGlmCkBAIC00MjAsNiArNTQwLDEwIEBACiAgKi8KICNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJICAgICovCiAjZGVmaW5lIENGR19QUk9NUFQJCSI9PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAqLworCisjZGVmaW5lCUNGR19IVVNIX1BBUlNFUgkJMQkvKiB1c2UgImh1c2giIGNvbW1hbmQgcGFyc2VyCSovCisjZGVmaW5lCUNGR19QUk9NUFRfSFVTSF9QUzIJIj4gIgorCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKICNkZWZpbmUgQ0ZHX0NCU0laRQkJMTAyNAkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KICNlbHNlCkBAIC00NjYsMzIgKzU5MCwyNSBAQAogI2RlZmluZSBDRkdfQ1MwX1NUQVJUCQlDRkdfRkxBU0hfQkFTRQogI2RlZmluZSBDRkdfQ1MwX1NJWkUJCUNGR19GTEFTSF9TSVpFCiAKLS8qIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uIG9mIGNoaXAgc2VsZWN0cyAqLwotI2lmZGVmIENPTkZJR19DU19BVVRPQ09ORgogI2RlZmluZSBDT05GSUdfTEFTVF9TVEFHRV9JTklUCi0jZW5kaWYKIAogLyoKICAqIFNSQU0gLSBEbyBub3QgbWFwIGJlbG93IDIgR0IgaW4gYWRkcmVzcyBzcGFjZSwgYmVjYXVzZSB0aGlzIGFyZWEgaXMgdXNlZAogICogZm9yIFNEUkFNIGF1dG9zaXppbmcuCiAgKi8KLSNpZiBkZWZpbmVkIChDT05GSUdfQ1NfQVVUT0NPTkYpCiAjZGVmaW5lIENGR19DUzJfU1RBUlQJCTB4RTUwMDAwMDAKICNkZWZpbmUgQ0ZHX0NTMl9TSVpFCQkweDEwMDAwMAkvKiAxIE1CeXRlICovCiAjZGVmaW5lIENGR19DUzJfQ0ZHCQkweDAwMDREOTMwCi0jZW5kaWYKIAogLyoKICAqIEdyYWZpYyBjb250cm9sbGVyIC0gRG8gbm90IG1hcCBiZWxvdyAyIEdCIGluIGFkZHJlc3Mgc3BhY2UsIGJlY2F1c2UgdGhpcwogICogYXJlYSBpcyB1c2VkIGZvciBTRFJBTSBhdXRvc2l6aW5nLgogICovCi0jaWYgZGVmaW5lZCAoQ09ORklHX0NTX0FVVE9DT05GKQogI2RlZmluZSBTTTUwMV9GQl9CQVNFCQkweEUwMDAwMDAwCiAjZGVmaW5lIENGR19DUzFfU1RBUlQJCShTTTUwMV9GQl9CQVNFKQogI2RlZmluZSBDRkdfQ1MxX1NJWkUJCTB4NDAwMDAwMAkvKiA2NCBNQnl0ZSAqLwogI2RlZmluZSBDRkdfQ1MxX0NGRwkJMHg4RjQ4RkY3MAogI2RlZmluZSBTTTUwMV9NTUlPX0JBU0UJCUNGR19DUzFfU1RBUlQgKyAweDAzRTAwMDAwCi0jZW5kaWYKIAogI2RlZmluZSBDRkdfQ1NfQlVSU1QJCTB4MDAwMDAwMDAKICNkZWZpbmUgQ0ZHX0NTX0RFQURDWUNMRQkweDMzMzMzMzExCS8qIDEgZGVhZCBjeWNsZSBmb3IgZmxhc2ggYW5kIFNNNTAxICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODM0eC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTgzNHguaAppbmRleCBjZWM3ZTNlLi45MmM3MDE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODM0eC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04MzR4LmgKQEAgLTQyMiw5ICs0MjIsOSBAQAogI2RlZmluZSBDRkdfU0lDUkwJU0lDUkxfTERQX0EKIAogLyogaS1jYWNoZSBhbmQgZC1jYWNoZSBkaXNhYmxlZCAqLwotI2RlZmluZSBDRkdfSElEMF9JTklUCQkweDAwMDAwMDAwMAotI2RlZmluZSBDRkdfSElEMF9GSU5BTAkJQ0ZHX0hJRDBfSU5JVAotI2RlZmluZSBDRkdfSElEMgkJMHgwMDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0hJRDBfSU5JVAkweDAwMDAwMDAwMAorI2RlZmluZSBDRkdfSElEMF9GSU5BTAlDRkdfSElEMF9JTklUCisjZGVmaW5lIENGR19ISUQyCUhJRDJfSEJFCiAKIC8qIEREUiAwIC0gNTEyTSAqLwogI2RlZmluZSBDRkdfSUJBVDBMCShDRkdfU0RSQU1fQkFTRSB8IEJBVExfUFBfMTAgfCBCQVRMX01FTUNPSEVSRU5DRSkKQEAgLTQzNywxMiArNDM3LDIxIEBACiAjZGVmaW5lIENGR19JQkFUMlUJKENGR19JTklUX1JBTV9BRERSIHwgQkFUVV9CTF8xMjhLIHwgQkFUVV9WUyB8IEJBVFVfVlApCiAKIC8qIFBDSSAqLwotI2RlZmluZSBDRkdfSUJBVDNMCShDRkdfUENJMV9NRU1fQkFTRSB8IEJBVExfUFBfMTAgfCBCQVRMX0NBQ0hFSU5ISUJJVCB8IEJBVExfR1VBUkRFRFNUT1JBR0UpCisjaWZkZWYgQ09ORklHX1BDSQorI2RlZmluZSBDRkdfSUJBVDNMCShDRkdfUENJMV9NRU1fQkFTRSB8IEJBVExfUFBfMTAgfCBCQVRMX01FTUNPSEVSRU5DRSkKICNkZWZpbmUgQ0ZHX0lCQVQzVQkoQ0ZHX1BDSTFfTUVNX0JBU0UgfCBCQVRVX0JMXzI1Nk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKLSNkZWZpbmUgQ0ZHX0lCQVQ0TAkoQ0ZHX1BDSTFfTUVNX0JBU0UgKyAweDEwMDAwMDAwIHwgQkFUTF9QUF8xMCB8IEJBVExfQ0FDSEVJTkhJQklUIHwgQkFUTF9HVUFSREVEU1RPUkFHRSkKKyNkZWZpbmUgQ0ZHX0lCQVQ0TAkoQ0ZHX1BDSTFfTUVNX0JBU0UgKyAweDEwMDAwMDAwIHwgQkFUTF9QUF8xMCB8IEJBVExfTUVNQ09IRVJFTkNFKQogI2RlZmluZSBDRkdfSUJBVDRVCShDRkdfUENJMV9NRU1fQkFTRSArIDB4MTAwMDAwMDAgfCBCQVRVX0JMXzI1Nk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKICNkZWZpbmUgQ0ZHX0lCQVQ1TAkoQ0ZHX1BDSTFfSU9fQkFTRSB8IEJBVExfUFBfMTAgfCBCQVRMX0NBQ0hFSU5ISUJJVCB8IEJBVExfR1VBUkRFRFNUT1JBR0UpCiAjZGVmaW5lIENGR19JQkFUNVUJKENGR19QQ0kxX0lPX0JBU0UgKyAweDEwMDAwMDAwIHwgQkFUVV9CTF8xNk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKKyNlbHNlCisjZGVmaW5lIENGR19JQkFUM0wJKDApCisjZGVmaW5lIENGR19JQkFUM1UJKDApCisjZGVmaW5lIENGR19JQkFUNEwJKDApCisjZGVmaW5lIENGR19JQkFUNFUJKDApCisjZGVmaW5lIENGR19JQkFUNUwJKDApCisjZGVmaW5lIENGR19JQkFUNVUJKDApCisjZW5kaWYKIAogLyogSU1NUkJBUiAqLwogI2RlZmluZSBDRkdfSUJBVDZMCShDRkdfSU1NUkJBUiB8IEJBVExfUFBfMTAgfCBCQVRMX0NBQ0hFSU5ISUJJVCB8IEJBVExfR1VBUkRFRFNUT1JBR0UpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODV4eC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTg1eHguaAppbmRleCBkYTY5NDZiLi5iYzNiOWFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODV4eC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04NXh4LmgKQEAgLTE1OCw3ICsxNTgsNyBAQAogI3VuZGVmICBDT05GSUdfQ09OU19OT05FICAgICAgICAvKiBkZWZpbmUgaWYgY29uc29sZSBvbiBzb21ldGhpbmcgZWxzZSAqLwogI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgICAxICAvKiB3aGljaCBzZXJpYWwgY2hhbm5lbCBmb3IgY29uc29sZSAqLwogCi0jZWxzZQorI2Vsc2UJLyogISBUUU04NTYwICovCiAKICNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVggICAgIDEKICN1bmRlZglDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8KQEAgLTE3MCw2ICsxNzAsMTUgQEAKICNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMQkoQ0ZHX0NDU1JCQVIrMHg0NTAwKQogI2RlZmluZSBDRkdfTlMxNjU1MF9DT00yCShDRkdfQ0NTUkJBUisweDQ2MDApCiAKKy8qIFBTLzIgS2V5Ym9hcmQgKi8KKyNpZiAhZGVmaW5lZChDT05GSUdfVFFNODU2MCkKKyNkZWZpbmUgQ09ORklHX1BTMktCRAkJCS8qIEFULVBTLzIgS2V5Ym9hcmQJCSovCisjZGVmaW5lIENPTkZJR19QUzJNVUxUCQkJLyogLi4gb24gUFMvMiBNdWx0aXBsZXhlcgkqLworI2RlZmluZSBDT05GSUdfUFMyU0VSSUFMCTIJLyogLi4gb24gRFVBUlQyCQkJKi8KKyNkZWZpbmUgQ09ORklHX1BTMk1VTFRfREVMQVkJKENGR19IWi8yKQkvKiBJbml0aWFsIGRlbGF5CSovCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX1IJMQorI2VuZGlmIC8qICFDT05GSUdfVFFNODU2MCAqLworCiAjZW5kaWYgLyogQ09ORklHX1RRTTg1NjAgKi8KIAogI2RlZmluZSBDT05GSUdfQkFVRFJBVEUgICAgICAgICAxMTUyMDAKQEAgLTE3NywxMyArMTg2LDYgQEAKICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICBcCiAJezMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsMTE1MjAwfQogCi0vKiBQUy8yIEtleWJvYXJkICovCi0jZGVmaW5lIENPTkZJR19QUzJLQkQJCQkvKiBBVC1QUy8yIEtleWJvYXJkCQkqLwotI2RlZmluZSBDT05GSUdfUFMyTVVMVAkJCS8qIC4uIG9uIFBTLzIgTXVsdGlwbGV4ZXIJKi8KLSNkZWZpbmUgQ09ORklHX1BTMlNFUklBTAkyCS8qIC4uIG9uIERVQVJUMgkJCSovCi0jZGVmaW5lIENPTkZJR19QUzJNVUxUX0RFTEFZCShDRkdfSFovMikJLyogSW5pdGlhbCBkZWxheQkqLwotI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9SCTEKLQogLyogVXNlIHRoZSBIVVNIIHBhcnNlciAqLwogI2RlZmluZSBDRkdfSFVTSF9QQVJTRVIKICNpZmRlZglDRkdfSFVTSF9QQVJTRVIKQEAgLTQyMiw3ICs0MjQsNyBAQAogI2RlZmluZSBDT05GSUdfQk9PVERFTEFZIDUJCS8qIC0xIGRpc2FibGVzIGF1dG8tYm9vdAkqLwogCiAjZGVmaW5lIENPTkZJR19QUkVCT09UCSJlY2hvOyIJXAotCSJlY2hvIFR5cGUgXCJydW4gZmxhc2hfbmZzXCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTOyIgXAorCSJlY2hvIFR5cGUgXFxcInJ1biBmbGFzaF9uZnNcXFwiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKIAkiZWNobyIKIAogI3VuZGVmCUNPTkZJR19CT09UQVJHUwkJLyogdGhlIGJvb3QgY29tbWFuZCB3aWxsIHNldCBib290YXJncwkqLwpAQCAtNDQ3LDcgKzQ0OSw3IEBACiAJCSJydW4gbmZzYXJncyBhZGRpcCBhZGRjb25zO2Jvb3RtXDAiCQkJXAogCSJyb290cGF0aD0vb3B0L2VsZGsvcHBjXzg1eHhcMCIJCQkJCVwKIAkia2VybmVsX2FkZHI9RkUwMDAwMDBcMCIJCQkJCVwKLQkicmFtZGlza19hZGRyPUZFMTAwMDAwXDAiCQkJCQlcCisJInJhbWRpc2tfYWRkcj1GRTE4MDAwMFwwIgkJCQkJXAogCSJsb2FkPXRmdHAgMTAwMDAwIC90ZnRwYm9vdC8kaG9zdG5hbWUvdS1ib290LmJpblwwIgkJXAogCSJ1cGRhdGU9cHJvdGVjdCBvZmYgZmZmYzAwMDAgZmZmZmZmZmY7ZXJhIGZmZmMwMDAwIGZmZmZmZmZmOyIJXAogCQkiY3AuYiAxMDAwMDAgZmZmYzAwMDAgNDAwMDA7IgkJCSAgICAgICAgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1RRTTg4NUQuaCBiL2luY2x1ZGUvY29uZmlncy9UUU04ODVELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlNGUzYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04ODVELmgKQEAgLTAsMCArMSw0OTIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNQorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1hcnRpbiBLcmF1c2UsIFRRLVN5c3RlbXMgR21CSCwgbWFydGluLmtyYXVzZUB0cXMuZGUKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogYm9hcmQvY29uZmlnLmggLSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJvYXJkIHNwZWNpZmljCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKiAoZWFzeSB0byBjaGFuZ2UpCisgKi8KKworI2RlZmluZSBDT05GSUdfTVBDODg1CQkxCS8qIFRoaXMgaXMgYSBNUEM4ODUgQ1BVCQkqLworI2RlZmluZSBDT05GSUdfVFFNODg1RAkJMQkvKiAuLi5vbiBhIFRRTTg4RCBtb2R1bGUJKi8KKworI2RlZmluZSBDT05GSUdfOHh4X09TQ0xLCQkxMDAwMDAwMAkvKiAgMTAgTUh6IC0gUExMIGlucHV0IGNsb2NrCSovCisjZGVmaW5lIENGR184eHhfQ1BVQ0xLX01JTgkJMTUwMDAwMDAJLyogIDE1IE1IeiAtIENQVSBtaW5pbXVtIGNsb2NrCSovCisjZGVmaW5lIENGR184eHhfQ1BVQ0xLX01BWAkJMTMzMDAwMDAwCS8qIDEzMyBNSHogLSBDUFUgbWF4aW11bSBjbG9jawkqLworI2RlZmluZSBDT05GSUdfOHh4X0NQVUNMS19ERUZBVUxUCTY2MDAwMDAwCS8qICA1MCBNSHogLSBDUFUgZGVmYXVsdCBjbG9jawkqLworCQkJCQkJLyogKGl0IHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubwkqLworCQkJCQkJLyogJ2NwdWNsaycgdmFyaWFibGUgd2l0aCB2YWxpZCB2YWx1ZSkJKi8KKworI2RlZmluZSBDRkdfTUVBU1VSRV9DUFVDTEsJCQkvKiBNZWFzdXJlIHJlYWwgY3B1IGNsb2NrCSovCisJCQkJCQkvKiAoZnVuY3Rpb24gbWVhc3VyZV9nY2xrKCkJKi8KKwkJCQkJCS8qIHdpbGwgYmUgY2FsbGVkKQkJKi8KKyNpZmRlZiBDRkdfTUVBU1VSRV9DUFVDTEsKKyNkZWZpbmUgQ0ZHXzhYWF9YSU4JCTEwMDAwMDAwCS8qIG1lYXN1cmVfZ2NsaygpIG5lZWRzIHRoaXMJKi8KKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR184eHhfQ09OU19TTUMxCTEJLyogQ29uc29sZSBpcyBvbiBTTUMxCQkqLworCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCS8qIGNvbnNvbGUgYmF1ZHJhdGUgPSAxMTVrYnBzCSovCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT1VOVF9MSU1JVAorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KKworI2RlZmluZSBDT05GSUdfQk9BUkRfVFlQRVMJMQkvKiBzdXBwb3J0IGJvYXJkIHR5cGVzCQkqLworCisjZGVmaW5lIENPTkZJR19QUkVCT09UCSJlY2hvOyIgXAorCSJlY2hvIFR5cGUgXCJydW4gZmxhc2hfbmZzXCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTOyIgXAorCSJlY2hvIgorCisjdW5kZWYJQ09ORklHX0JPT1RBUkdTCisKKyNkZWZpbmUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQlcCisJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIgkJCVwKKwkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQlcCisJInJhbWFyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcndcMCIJCQlcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKKwkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAorCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmYgcGFuaWM9MVwwIgkJCVwKKwkiZmxhc2hfbmZzPXJ1biBuZnNhcmdzIGFkZGlwOyIJCQkJCVwKKwkJImJvb3RtICR7a2VybmVsX2FkZHJ9XDAiCQkJCVwKKwkiZmxhc2hfc2VsZj1ydW4gcmFtYXJncyBhZGRpcDsiCQkJCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfSAke3JhbWRpc2tfYWRkcn1cMCIJCVwKKwkibmV0X25mcz10ZnRwIDIwMDAwMCAke2Jvb3RmaWxlfTtydW4gbmZzYXJncyBhZGRpcDtib290bVwwIglcCisJInJvb3RwYXRoPS9vcHQvZWxkay9wcGNfOHh4XDAiCQkJCQlcCisJImJvb3RmaWxlPS90ZnRwYm9vdC9UUU04NjZNL3VJbWFnZVwwIgkJCQlcCisJImtlcm5lbF9hZGRyPTQwMDgwMDAwXDAiCQkJCQlcCisJInJhbWRpc2tfYWRkcj00MDE4MDAwMFwwIgkJCQkJXAorCSIiCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkicnVuIGZsYXNoX3NlbGYiCisKKyNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQJKi8KKyN1bmRlZglDRkdfTE9BRFNfQkFVRF9DSEFOR0UJCS8qIGRvbid0IGFsbG93IGJhdWRyYXRlIGNoYW5nZQkqLworCisjdW5kZWYJQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQJCSovCisKKyNkZWZpbmUgQ09ORklHX1NUQVRVU19MRUQJMQkvKiBTdGF0dXMgTEVEIGVuYWJsZWQJCSovCisKKyN1bmRlZglDT05GSUdfQ0FOX0RSSVZFUgkJLyogQ0FOIERyaXZlciBzdXBwb3J0IGRpc2FibGVkCSovCisKKy8qIGVuYWJsZSBJMkMgYW5kIHNlbGVjdCB0aGUgaGFyZHdhcmUvc29mdHdhcmUgZHJpdmVyICovCisjdW5kZWYJQ09ORklHX0hBUkRfSTJDCQkJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydAkqLworI2RlZmluZSBDT05GSUdfU09GVF9JMkMJCTEJLyogSTJDIGJpdC1iYW5nZWQJCSovCisKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJOTMwMDAJLyogOTMga0h6IGlzIHN1cHBvc2VkIHRvIHdvcmsJKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHhGRQorCisjaWZkZWYgQ09ORklHX1NPRlRfSTJDCisvKgorICogU29mdHdhcmUgKGJpdC1iYW5nKSBJMkMgZHJpdmVyIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBQQl9TQ0wJCTB4MDAwMDAwMjAJLyogUEIgMjYgKi8KKyNkZWZpbmUgUEJfU0RBCQkweDAwMDAwMDEwCS8qIFBCIDI3ICovCisKKyNkZWZpbmUgSTJDX0lOSVQJKGltbXItPmltX2NwbS5jcF9wYmRpciB8PSAgUEJfU0NMKQorI2RlZmluZSBJMkNfQUNUSVZFCShpbW1yLT5pbV9jcG0uY3BfcGJkaXIgfD0gIFBCX1NEQSkKKyNkZWZpbmUgSTJDX1RSSVNUQVRFCShpbW1yLT5pbV9jcG0uY3BfcGJkaXIgJj0gflBCX1NEQSkKKyNkZWZpbmUgSTJDX1JFQUQJKChpbW1yLT5pbV9jcG0uY3BfcGJkYXQgJiBQQl9TREEpICE9IDApCisjZGVmaW5lIEkyQ19TREEoYml0KQlpZihiaXQpIGltbXItPmltX2NwbS5jcF9wYmRhdCB8PSAgUEJfU0RBOyBcCisJCQllbHNlCWltbXItPmltX2NwbS5jcF9wYmRhdCAmPSB+UEJfU0RBCisjZGVmaW5lIEkyQ19TQ0woYml0KQlpZihiaXQpIGltbXItPmltX2NwbS5jcF9wYmRhdCB8PSAgUEJfU0NMOyBcCisJCQllbHNlCWltbXItPmltX2NwbS5jcF9wYmRhdCAmPSB+UEJfU0NMCisjZGVmaW5lIEkyQ19ERUxBWQl1ZGVsYXkoMikJLyogMS80IEkyQyBjbG9jayBkdXJhdGlvbiAqLworI2VuZGlmCS8qIENPTkZJR19TT0ZUX0kyQyAqLworCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIJMHg1MAkJLyogRUVQUk9NIEFUMjRDPz8JKi8KKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gMgkJLyogdHdvIGJ5dGUgYWRkcmVzcwkqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk0CisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUwkxMAkvKiBhbmQgdGFrZXMgdXAgdG8gMTAgbXNlYyAqLworCisjIGRlZmluZSBDT05GSUdfUlRDX0RTMTMzNyAxCisjIGRlZmluZSBDRkdfSTJDX1JUQ19BRERSIDB4NjgKKworI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSwkoQ09ORklHX0JPT1RQX0RFRkFVTFQgfCBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFKQorCisjZGVmaW5lIENPTkZJR19NQUNfUEFSVElUSU9OCisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCisKKyN1bmRlZiBDT05GSUdfUlRDX01QQzh4eAkJLyogTVBDODY2IGRvZXMgbm90IHN1cHBvcnQgUlRDCSovCisKKyNkZWZpbmUJQ09ORklHX1RJTUVTVEFNUAkJLyogYnV0IHByaW50IGltYWdlIHRpbWVzdG1wcwkqLworCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkgICAgICAoIENPTkZJR19DTURfREZMCXwgXAorCQkJCUNGR19DTURfQVNLRU5WCXwgXAorCQkJCUNGR19DTURfREFURQl8IFwKKwkJCQlDRkdfQ01EX0RIQ1AJfCBcCisJCQkJQ0ZHX0NNRF9FRVBST00JfCBcCisJCQkJQ0ZHX0NNRF9JMkMJfCBcCisJCQkJQ0ZHX0NNRF9JREUJfCBcCisJCQkJQ0ZHX0NNRF9NSUkJfCBcCisJCQkJQ0ZHX0NNRF9ORlMJfCBcCisJCQkJQ0ZHX0NNRF9QSU5HICkKKworLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiPT4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCisKKyNpZiAwCisjZGVmaW5lIENGR19IVVNIX1BBUlNFUgkJMQkvKiB1c2UgImh1c2giIGNvbW1hbmQgcGFyc2VyCSovCisjZW5kaWYKKyNpZmRlZglDRkdfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMgkiPiAiCisjZW5kaWYKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQlNJWkUJCTEwMjQJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbHNlCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2VuZGlmCisjZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MDEwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwMzAwMDAwCS8qIDEgLi4uIDMgTUIgaW4gRFJBTQkqLworI2RlZmluZSBDRkdfQUxUX01FTVRFU1QJCQkJLyogYWx0ZXJuYXRlLCBtb3JlIGV4dGVuc2l2ZQorCQkJCQkJICAgbWVtb3J5IHRlc3QuKi8KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcyAqLworCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKy8qCisgKiBFbmFibGUgbG9vcHcgY29tbWFuZG8uIFRoaXMgaGFzIG9ubHkgZWZmZWN0LCBpZiBDRkdfQ01EX01FTSBpcyBkZWZpbmVkLAorICogd2hpY2ggaXMgbm9ybWFsbHkgcGFydCBvZiB0aGUgZGVmYXVsdCBjb21tYW5kcyAoQ0ZWX0NNRF9ERkwpCisgKi8KKyNkZWZpbmUgQ09ORklHX0xPT1BXCisKKy8qCisgKiBMb3cgTGV2ZWwgQ29uZmlndXJhdGlvbiBTZXR0aW5ncworICogKGFkZHJlc3MgbWFwcGluZ3MsIHJlZ2lzdGVyIGluaXRpYWwgdmFsdWVzLCBldGMuKQorICogWW91IHNob3VsZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBpZiB5b3UgbWFrZSBjaGFuZ2VzIGhlcmUuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEludGVybmFsIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBDRkdfSU1NUgkJMHhGRkYwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCUNGR19JTU1SCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgyRjAwCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gRFBSQU0JKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJNjQgIC8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCisgKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCisgKiBQbGVhc2Ugbm90ZSB0aGF0IENGR19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCisgKi8KKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvcgkqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCUNGR19GTEFTSF9CQVNFCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMTI4IDw8IDEwKQkvKiBSZXNlcnZlIDEyOCBrQiBmb3IgbWFsbG9jKCkJKi8KKworLyoKKyAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCisgKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgKi8KKyNkZWZpbmUgQ0ZHX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXggKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggb3JnYW5pemF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMjU2CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLworCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisKKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDQwMDAwIC8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgwODAwMCAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDIwMDAwIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCisKKy8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUmVkdW5kYW50IEVudmlyb25tZW50IFNlY3RvcgkqLworI2RlZmluZSBDRkdfRU5WX09GRlNFVF9SRURVTkQJKENGR19FTlZfT0ZGU0VUK0NGR19FTlZfU0VDVF9TSVpFKQorI2RlZmluZSBDRkdfRU5WX1NJWkVfUkVEVU5ECShDRkdfRU5WX1NJWkUpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEhhcmR3YXJlIEluZm9ybWF0aW9uIEJsb2NrCisgKi8KKyNkZWZpbmUgQ0ZHX0hXSU5GT19PRkZTRVQJMHgwMDAzRkZDMAkvKiBvZmZzZXQgb2YgSFcgSW5mbyBibG9jayAqLworI2RlZmluZSBDRkdfSFdJTkZPX1NJWkUJCTB4MDAwMDAwNDAJLyogc2l6ZQkgIG9mIEhXIEluZm8gYmxvY2sgKi8KKyNkZWZpbmUgQ0ZHX0hXSU5GT19NQUdJQwkweDU0NTE0RDM4CS8qICdUUU04JyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDYWNoZSBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTE2CS8qIEZvciBhbGwgTVBDOHh4IENQVXMJCQkqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNAkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZQkqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNZUENSIC0gU3lzdGVtIFByb3RlY3Rpb24gQ29udHJvbAkJCQkxMS05CisgKiBTWVBDUiBjYW4gb25seSBiZSB3cml0dGVuIG9uY2UgYWZ0ZXIgcmVzZXQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTb2Z0d2FyZSAmIEJ1cyBNb25pdG9yIFRpbWVyIG1heCwgQnVzIE1vbml0b3IgZW5hYmxlLCBTVyBXYXRjaGRvZyBmcmVlemUKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQorI2RlZmluZSBDRkdfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBcCisJCQkgU1lQQ1JfU1dFICB8IFNZUENSX1NXUkl8IFNZUENSX1NXUCkKKyNlbHNlCisjZGVmaW5lIENGR19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFNZUENSX1NXUCkKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTSVVNQ1IgLSBTSVUgTW9kdWxlIENvbmZpZ3VyYXRpb24JCQkJMTEtNgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUENNQ0lBIGNvbmZpZy4sIG11bHRpLWZ1bmN0aW9uIHBpbiB0cmktc3RhdGUKKyAqLworI2lmbmRlZiBDT05GSUdfQ0FOX0RSSVZFUgorI2RlZmluZSBDRkdfU0lVTUNSCShTSVVNQ1JfREJHQzAwIHwgU0lVTUNSX0RCUEMwMCB8IFNJVU1DUl9NTFJDMDEpCisjZWxzZQkvKiB3ZSBtdXN0IGFjdGl2YXRlIEdQTDUgaW4gdGhlIFNJVU1DUiBmb3IgQ0FOICovCisjZGVmaW5lIENGR19TSVVNQ1IJKFNJVU1DUl9EQkdDMTEgfCBTSVVNQ1JfREJQQzAwIHwgU0lVTUNSX01MUkMwMSkKKyNlbmRpZgkvKiBDT05GSUdfQ0FOX0RSSVZFUiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUQlNDUiAtIFRpbWUgQmFzZSBTdGF0dXMgYW5kIENvbnRyb2wJCQkJMTEtMjYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCisgKi8KKyNkZWZpbmUgQ0ZHX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKKyAqLworI2RlZmluZSBDRkdfUElTQ1IJKFBJU0NSX1BTIHwgUElTQ1JfUElURikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMjcKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNldCBjbG9jayBvdXRwdXQsIHRpbWViYXNlIGFuZCBSVEMgc291cmNlIGFuZCBkaXZpZGVyLAorICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc29tZSBvdGhlciBpbnRlcm5hbCBjbG9ja3MKKyAqLworI2RlZmluZSBTQ0NSX01BU0sJU0NDUl9FQkRGMTEKKyNkZWZpbmUgQ0ZHX1NDQ1IJKFNDQ1JfQ09NMDAgICB8IFNDQ1JfREZTWU5DMDAgfCBTQ0NSX0RGQlJHMDAgIHwgXAorCQkJIFNDQ1JfREZOTDAwMCB8IFNDQ1JfREZOSDAwMCAgfCBTQ0NSX0RGTENEMDAwIHwgXAorCQkJIFNDQ1JfREZBTENEMDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBDTUNJQSBzdHVmZgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLworI2RlZmluZSBDRkdfUENNQ0lBX01FTV9BRERSCSgweEUwMDAwMDAwKQorI2RlZmluZSBDRkdfUENNQ0lBX01FTV9TSVpFCSggNjQgPDwgMjAgKQorI2RlZmluZSBDRkdfUENNQ0lBX0RNQV9BRERSCSgweEU0MDAwMDAwKQorI2RlZmluZSBDRkdfUENNQ0lBX0RNQV9TSVpFCSggNjQgPDwgMjAgKQorI2RlZmluZSBDRkdfUENNQ0lBX0FUVFJCX0FERFIJKDB4RTgwMDAwMDApCisjZGVmaW5lIENGR19QQ01DSUFfQVRUUkJfU0laRQkoIDY0IDw8IDIwICkKKyNkZWZpbmUgQ0ZHX1BDTUNJQV9JT19BRERSCSgweEVDMDAwMDAwKQorI2RlZmluZSBDRkdfUENNQ0lBX0lPX1NJWkUJKCA2NCA8PCAyMCApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElERS9BVEEgc3R1ZmYgKFN1cHBvcnRzIElERSBoYXJkZGlzayBvbiBQQ01DSUEgQWRhcHRlcikKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjZGVmaW5lIENPTkZJR19JREVfOHh4X1BDQ0FSRAkxCS8qIFVzZSBJREUgd2l0aCBQQyBDYXJkIEFkYXB0ZXIgKi8KKworI3VuZGVmCUNPTkZJR19JREVfOHh4X0RJUkVDVAkJLyogRGlyZWN0IElERQkgbm90IHN1cHBvcnRlZAkqLworI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogTEVECSBmb3IgaWRlIG5vdCBzdXBwb3J0ZWQJKi8KKyN1bmRlZglDT05GSUdfSURFX1JFU0VUCQkvKiByZXNldCBmb3IgaWRlIG5vdCBzdXBwb3J0ZWQJKi8KKworI2RlZmluZSBDRkdfSURFX01BWEJVUwkJMQkvKiBtYXguIDEgSURFIGJ1cwkJKi8KKyNkZWZpbmUgQ0ZHX0lERV9NQVhERVZJQ0UJMQkvKiBtYXguIDEgZHJpdmUgcGVyIElERSBidXMJKi8KKworI2RlZmluZSBDRkdfQVRBX0lERTBfT0ZGU0VUCTB4MDAwMAorCisjZGVmaW5lIENGR19BVEFfQkFTRV9BRERSCUNGR19QQ01DSUFfTUVNX0FERFIKKworLyogT2Zmc2V0IGZvciBkYXRhIEkvTwkJCSovCisjZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQJKENGR19QQ01DSUFfTUVNX1NJWkUgKyAweDMyMCkKKworLyogT2Zmc2V0IGZvciBub3JtYWwgcmVnaXN0ZXIgYWNjZXNzZXMJKi8KKyNkZWZpbmUgQ0ZHX0FUQV9SRUdfT0ZGU0VUCSgyICogQ0ZHX1BDTUNJQV9NRU1fU0laRSArIDB4MzIwKQorCisvKiBPZmZzZXQgZm9yIGFsdGVybmF0ZSByZWdpc3RlcnMJKi8KKyNkZWZpbmUgQ0ZHX0FUQV9BTFRfT0ZGU0VUCTB4MDEwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLworI2RlZmluZSBDRkdfREVSIDAKKworLyoKKyAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6CisgKgorICogQlIwLzEgYW5kIE9SMC8xIChGTEFTSCkKKyAqLworCisjZGVmaW5lIEZMQVNIX0JBU0UwX1BSRUxJTQkweDQwMDAwMDAwCS8qIEZMQVNIIGJhbmsgIzAJKi8KKyNkZWZpbmUgRkxBU0hfQkFTRTFfUFJFTElNCTB4NjAwMDAwMDAJLyogRkxBU0ggYmFuayAjMAkqLworCisvKiB1c2VkIHRvIHJlLW1hcCBGTEFTSCBib3RoIHdoZW4gc3RhcnRpbmcgZnJvbSBTUkFNIG9yIEZMQVNIOgorICogcmVzdHJpY3QgYWNjZXNzIGVub3VnaCB0byBrZWVwIFNSQU0gd29ya2luZyAoaWYgYW55KQorICogYnV0IG5vdCB0b28gbXVjaCB0byBtZWRkbGUgd2l0aCBGTEFTSCBhY2Nlc3NlcworICovCisjZGVmaW5lIENGR19SRU1BUF9PUl9BTQkJMHg4MDAwMDAwMAkvKiBPUiBhZGRyIG1hc2sgKi8KKyNkZWZpbmUgQ0ZHX1BSRUxJTV9PUl9BTQkweEUwMDAwMDAwCS8qIE9SIGFkZHIgbWFzayAqLworCisvKgorICogRkxBU0ggdGltaW5nOiBEZWZhdWx0IHZhbHVlIG9mIE9SMCBhZnRlciByZXNldAorICovCisjZGVmaW5lIENGR19PUl9USU1JTkdfRkxBU0gJKE9SX0NTTlRfU0FNIHwgT1JfQUNTX01TSyB8IE9SX0JJIHwgXAorCQkJCSBPUl9TQ1lfNl9DTEsgfCBPUl9UUkxYKQorCisjZGVmaW5lIENGR19PUjBfUkVNQVAJKENGR19SRU1BUF9PUl9BTSAgfCBDRkdfT1JfVElNSU5HX0ZMQVNIKQorI2RlZmluZSBDRkdfT1IwX1BSRUxJTQkoQ0ZHX1BSRUxJTV9PUl9BTSB8IENGR19PUl9USU1JTkdfRkxBU0gpCisjZGVmaW5lIENGR19CUjBfUFJFTElNCSgoRkxBU0hfQkFTRTBfUFJFTElNICYgQlJfQkFfTVNLKSB8IEJSX1YgKQorCisjZGVmaW5lIENGR19PUjFfUkVNQVAJQ0ZHX09SMF9SRU1BUAorI2RlZmluZSBDRkdfT1IxX1BSRUxJTQlDRkdfT1IwX1BSRUxJTQorI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkoKEZMQVNIX0JBU0UxX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9WICkKKworLyoKKyAqIEJSMi8zIGFuZCBPUjIvMyAoU0RSQU0pCisgKgorICovCisjZGVmaW5lIFNEUkFNX0JBU0UyX1BSRUxJTQkweDAwMDAwMDAwCS8qIFNEUkFNIGJhbmsgIzAJKi8KKyNkZWZpbmUgU0RSQU1fQkFTRTNfUFJFTElNCTB4MjAwMDAwMDAJLyogU0RSQU0gYmFuayAjMQkqLworI2RlZmluZSBTRFJBTV9NQVhfU0laRQkJKDI1NiA8PCAyMCkJLyogbWF4IDI1NiBNQiBwZXIgYmFuawkqLworCisvKiBTRFJBTSB0aW1pbmc6IE11bHRpcGxleGVkIGFkZHJlc3NlcywgR1BMNSBvdXRwdXQgdG8gR1BMNV9BIChkb24ndCBjYXJlKQkqLworI2RlZmluZSBDRkdfT1JfVElNSU5HX1NEUkFNCTB4MDAwMDBBMDAKKworI2RlZmluZSBDRkdfT1IyX1BSRUxJTQkoQ0ZHX1BSRUxJTV9PUl9BTSB8IENGR19PUl9USU1JTkdfU0RSQU0gKQorI2RlZmluZSBDRkdfQlIyX1BSRUxJTQkoKFNEUkFNX0JBU0UyX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1BIHwgQlJfViApCisKKyNpZm5kZWYgQ09ORklHX0NBTl9EUklWRVIKKyNkZWZpbmUgQ0ZHX09SM19QUkVMSU0JQ0ZHX09SMl9QUkVMSU0KKyNkZWZpbmUgQ0ZHX0JSM19QUkVMSU0JKChTRFJBTV9CQVNFM19QUkVMSU0gJiBCUl9CQV9NU0spIHwgQlJfTVNfVVBNQSB8IEJSX1YgKQorI2Vsc2UJLyogQ0FOIHVzZXMgQ1MzIywgc28gd2UgY2FuIGhhdmUgb25seSBvbmUgU0RSQU0gYmFuayBhbnl3YXkgKi8KKyNkZWZpbmUgQ0ZHX0NBTl9CQVNFCQkweEMwMDAwMDAwCS8qIENBTiBtYXBwZWQgYXQgMHhDMDAwMDAwMAkqLworI2RlZmluZSBDRkdfQ0FOX09SX0FNCQkweEZGRkY4MDAwCS8qIDMyIGtCIGFkZHJlc3MgbWFzawkJKi8KKyNkZWZpbmUgQ0ZHX09SM19DQU4JCShDRkdfQ0FOX09SX0FNIHwgT1JfRzVMQSB8IE9SX0JJKQorI2RlZmluZSBDRkdfQlIzX0NBTgkJKChDRkdfQ0FOX0JBU0UgJiBCUl9CQV9NU0spIHwgXAorCQkJCQlCUl9QU184IHwgQlJfTVNfVVBNQiB8IEJSX1YgKQorI2VuZGlmCS8qIENPTkZJR19DQU5fRFJJVkVSICovCisKKy8qCisgKiA0MDk2CVJvd3MgZnJvbSBTRFJBTSBleGFtcGxlIGNvbmZpZ3VyYXRpb24KKyAqIDEwMDAJZmFjdG9yIHMgLT4gbXMKKyAqIDY0CVBUUCAocHJlLWRpdmlkZXIgZnJvbSBNUFRQUikgZnJvbSBTRFJBTSBleGFtcGxlIGNvbmZpZ3VyYXRpb24KKyAqIDQJTnVtYmVyIG9mIHJlZnJlc2ggY3ljbGVzIHBlciBwZXJpb2QKKyAqIDY0CVJlZnJlc2ggY3ljbGUgaW4gbXMgcGVyIG51bWJlciBvZiByb3dzCisgKi8KKyNkZWZpbmUgQ0ZHX1BUQV9QRVJfQ0xLCSgoNDA5NiAqIDY0ICogMTAwMCkgLyAoNCAqIDY0KSkKKworLyoKKyAqIE1lbW9yeSBQZXJpb2RpYyBUaW1lciBQcmVzY2FsZXIKKyAqIFBlcmlvZGljIHRpbWVyIGZvciByZWZyZXNoLCBzdGFydCB3aXRoIHJlZnJlc2ggcmF0ZSBmb3IgNDAgTUh6IGNsb2NrCisgKiAoQ0ZHXzh4eF9DUFVDTEtfTUlOIC8gQ0ZHX1BUQV9QRVJfQ0xLKQorICovCisjZGVmaW5lIENGR19NQU1SX1BUQQkJMzkKKworLyoKKyAqIEZvciAxNiBNQml0LCByZWZyZXNoIHJhdGVzIGNvdWxkIGJlIDMxLjMgdXMKKyAqICg9IDY0IG1zIC8gMksgPSAxMjUgLyBxdWFkIGJ1cnN0cykuCisgKiBGb3IgYSBzaW1wbGVyIGluaXRpYWxpemF0aW9uLCAxNS42IHVzIGlzIHVzZWQgaW5zdGVhZC4KKyAqCisgKiAjZGVmaW5lIENGR19NUFRQUl8yQktfMksJTVBUUFJfUFRQX0RJVjMyCQlmb3IgMiBiYW5rcworICogI2RlZmluZSBDRkdfTVBUUFJfMUJLXzJLCU1QVFBSX1BUUF9ESVY2NAkJZm9yIDEgYmFuaworICovCisjZGVmaW5lIENGR19NUFRQUl8yQktfNEsJTVBUUFJfUFRQX0RJVjE2CQkvKiBzZXR0aW5nIGZvciAyIGJhbmtzCSovCisjZGVmaW5lIENGR19NUFRQUl8xQktfNEsJTVBUUFJfUFRQX0RJVjMyCQkvKiBzZXR0aW5nIGZvciAxIGJhbmsJKi8KKworLyogcmVmcmVzaCByYXRlIDcuOCB1cyAoPSA2NCBtcyAvIDhLID0gMzEuMiAvIHF1YWQgYnVyc3RzKSBmb3IgMjU2IE1CaXQJCSovCisjZGVmaW5lIENGR19NUFRQUl8yQktfOEsJTVBUUFJfUFRQX0RJVjgJCS8qIHNldHRpbmcgZm9yIDIgYmFua3MJKi8KKyNkZWZpbmUgQ0ZHX01QVFBSXzFCS184SwlNUFRQUl9QVFBfRElWMTYJCS8qIHNldHRpbmcgZm9yIDEgYmFuawkqLworCisvKgorICogTUFNUiBzZXR0aW5ncyBmb3IgU0RSQU0KKyAqLworCisvKiA4IGNvbHVtbiBTRFJBTSAqLworI2RlZmluZSBDRkdfTUFNUl84Q09MCSgoQ0ZHX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwJXAorCQkJIE1BTVJfQU1BX1RZUEVfMCB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTExIHwJXAorCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCisvKiA5IGNvbHVtbiBTRFJBTSAqLworI2RlZmluZSBDRkdfTUFNUl85Q09MCSgoQ0ZHX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwJXAorCQkJIE1BTVJfQU1BX1RZUEVfMSB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTEwIHwJXAorCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCisvKiAxMCBjb2x1bW4gU0RSQU0gKi8KKyNkZWZpbmUgQ0ZHX01BTVJfMTBDT0wJKChDRkdfTUFNUl9QVEEgPDwgTUFNUl9QVEFfU0hJRlQpICB8IE1BTVJfUFRBRQkgICAgfAlcCisJCQkgTUFNUl9BTUFfVFlQRV8yIHwgTUFNUl9EU0FfMV9DWUNMIHwgTUFNUl9HMENMQV9BOSAgfAlcCisJCQkgTUFNUl9STEZBXzFYCSB8IE1BTVJfV0xGQV8xWAkgICB8IE1BTVJfVExGQV80WCkKKworLyoKKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKgorICogQm9vdCBGbGFncworICovCisjZGVmaW5lIEJPT1RGTEFHX0NPTEQJMHgwMQkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCQkvKiBTb2Z0d2FyZSByZWJvb3QJCQkqLworCisvKgorICogTmV0d29yayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1NDQzJfRU5FVAkJLyogZW5hYmxlIGV0aGVybmV0IG9uIFNDQzIgKi8KKyNkZWZpbmUgQ09ORklHX0ZFQ19FTkVUCQkJLyogZW5hYmxlIGV0aGVybmV0IG9uIEZFQyAqLworI2RlZmluZSBDT05GSUdfRVRIRVJfT05fRkVDMQkJLyogLi4uIGZvciBGRUMxICovCisjZGVmaW5lIENPTkZJR19FVEhFUl9PTl9GRUMyCQkvKiAuLi4gZm9yIEZFQzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01JSSkKKyNkZWZpbmUgQ0ZHX0RJU0NPVkVSX1BIWQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVCAxCS8qIHJlZHVjZSBtYXguIHRpbWVvdXQgYmVmb3JlCisJCQkJCSAgIHN3aXRjaGluZyB0byBhbm90aGVyIG5ldHdvayAoaWYgdGhlCisJCQkJCSAgIHRyaWVkIG5ldHdvcmsgaXMgdW5yZWFjaGFibGUpICovCisKKyNkZWZpbmUgQ09ORklHX0VUSFBSSU1FCQkiU0NDIEVUSEVSTkVUIgorCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2Fldi5oIGIvaW5jbHVkZS9jb25maWdzL2Fldi5oCmluZGV4IGFhNmJjOTEuLjhkOWYwYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hZXYuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYWV2LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDAzLTIwMDUKKyAqIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA2CiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKICAqIChDKSBDb3B5cmlnaHQgMjAwNC0yMDA1CkBAIC0zNzAsMTAgKzM3MCw3IEBACiAjZGVmaW5lIENGR19DUzBfU1RBUlQJCUNGR19GTEFTSF9CQVNFCiAjZGVmaW5lIENGR19DUzBfU0laRQkJQ0ZHX0ZMQVNIX1NJWkUKIAotLyogYXV0b21hdGljIGNvbmZpZ3VyYXRpb24gb2YgY2hpcCBzZWxlY3RzICovCi0jaWZkZWYgQ09ORklHX0NTX0FVVE9DT05GCiAjZGVmaW5lIENPTkZJR19MQVNUX1NUQUdFX0lOSVQKLSNlbmRpZgogCiAvKgogICogU1JBTSAtIERvIG5vdCBtYXAgYmVsb3cgMiBHQiBpbiBhZGRyZXNzIHNwYWNlLCBiZWNhdXNlIHRoaXMgYXJlYSBpcyB1c2VkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYmFtYm9vLmggYi9pbmNsdWRlL2NvbmZpZ3MvYmFtYm9vLmgKaW5kZXggNmQzMjgyMS4uNDk2MTAxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2JhbWJvby5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9iYW1ib28uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDUKKyAqIChDKSBDb3B5cmlnaHQgMjAwNS0yMDA2CiAgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTQ5LDcgKzQ5LDcgQEAKICAqIEJhc2UgYWRkcmVzc2VzIC0tIE5vdGUgdGhlc2UgYXJlIGVmZmVjdGl2ZSBhZGRyZXNzZXMgd2hlcmUgdGhlCiAgKiBhY3R1YWwgcmVzb3VyY2VzIGdldCBtYXBwZWQgKG5vdCBwaHlzaWNhbCBhZGRyZXNzZXMpCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSg1MTIgKiAxMDI0KQkvKiBSZXNlcnZlIDUxMiBrQiBmb3IgTW9uaXRvcgkqLworI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCSgzODQgKiAxMDI0KQkvKiBSZXNlcnZlIDM4NCBrQiBmb3IgTW9uaXRvcgkqLwogI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDI1NiAqIDEwMjQpCS8qIFJlc2VydmUgMjU2IGtCIGZvciBtYWxsb2MoKQkqLwogI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCSgtQ0ZHX01PTklUT1JfTEVOKQogI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkgICAgICAgIDB4MDAwMDAwMDAJICAgIC8qIF9tdXN0XyBiZSAwCSovCkBAIC03Myw2ICs3Myw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbml0aWFsIFJBTSAmIHN0YWNrIHBvaW50ZXIgKHBsYWNlZCBpbiBTRFJBTSkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19JTklUX1JBTV9EQ0FDSEUJMQkJLyogZC1jYWNoZSBhcyBpbml0IHJhbQkqLwogI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDcwMDAwMDAwCQkvKiBEQ2FjaGUgICAgICAgKi8KICNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkoNCA8PCAxMCkKICNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMjU2CQkgICAgCS8qIG51bSBieXRlcyBpbml0aWFsIGRhdGEJKi8KQEAgLTI1Nyw4ICsyNTgsOCBAQAogCSJrZXJuZWxfYWRkcj1mZmYwMDAwMFwwIgkJCQkJXAogCSJyYW1kaXNrX2FkZHI9ZmZmMTAwMDBcMCIJCQkJCVwKIAkibG9hZD10ZnRwIDEwMDAwMCAvdGZ0cGJvb3QvYmFtYm9vL3UtYm9vdC5iaW5cMCIJCVwKLQkidXBkYXRlPXByb3RlY3Qgb2ZmIGZmZjgwMDAwIGZmZmZmZmZmO2VyYSBmZmY4MDAwMCBmZmZmZmZmZjsiCVwKLQkJImNwLmIgMTAwMDAwIGZmZjgwMDAwIDgwMDAwOyIJCQkgICAgICAgIFwKKwkidXBkYXRlPXByb3RlY3Qgb2ZmIGZmZmEwMDAwIGZmZmZmZmZmO2VyYSBmZmZhMDAwMCBmZmZmZmZmZjsiCVwKKwkJImNwLmIgMTAwMDAwIGZmZmEwMDAwIDYwMDAwOyIJCQkgICAgICAgIFwKIAkJInNldGVudiBmaWxlc2l6ZTtzYXZlZW52XDAiCQkJCVwKIAkidXBkPXJ1biBsb2FkO3J1biB1cGRhdGVcMCIJCQkJCVwKIAkiIgpAQCAtMzEwLDExICszMTEsMTEgQEAKIAogI2RlZmluZSBDT05GSUdfQ09NTUFORFMJICAgICAgIChDT05GSUdfQ01EX0RGTAl8IFwKIAkJCQlDRkdfQ01EX0FTS0VOVgl8IFwKLQkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKIAkJCQlDRkdfQ01EX0RBVEUJfCBcCiAJCQkJQ0ZHX0NNRF9ESENQCXwgXAogCQkJCUNGR19DTURfRElBRwl8IFwKIAkJCQlDRkdfQ01EX0VMRgl8IFwKKwkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKIAkJCQlDRkdfQ01EX0kyQwl8IFwKIAkJCQlDRkdfQ01EX0lSUQl8IFwKIAkJCQlDRkdfQ01EX01JSQl8IFwKQEAgLTM1OCw2ICszNTksMTIgQEAKIAogI2RlZmluZSBDRkdfSFoJCSAgICAgICAgMTAwMAkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzICovCiAKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCS8qIGFkZCBjb21tYW5kIGxpbmUgaGlzdG9yeQkqLworI2RlZmluZSBDT05GSUdfTE9PUFcgICAgICAgICAgICAxICAgICAgIC8qIGVuYWJsZSBsb29wdyBjb21tYW5kICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX01YX0NZQ0xJQyAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbWRjL213YyBjb21tYW5kcyAgICAgICovCisjZGVmaW5lIENPTkZJR19aRVJPX0JPT1RERUxBWV9DSEVDSwkvKiBjaGVjayBmb3Iga2V5cHJlc3Mgb24gYm9vdGRlbGF5PT0wICovCisjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIDEJLyogaW5jbHVkZSB2ZXJzaW9uIGVudiB2YXJpYWJsZSAqLworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQQ0kgc3R1ZmYKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9idWJpbmdhLmggYi9pbmNsdWRlL2NvbmZpZ3MvYnViaW5nYS5oCmluZGV4IDRhNzk4MzUuLmE2NmNkYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9idWJpbmdhLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2J1YmluZ2EuaApAQCAtMjAwLDggKzIwMCw5IEBACiAKICNkZWZpbmUJQ0ZHX0haCQkxMDAwCQkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzCSovCiAKLSNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUJMSAgICAgICAvKiBhZGQgYXV0b2NvbXBsZXRpb24gc3VwcG9ydCAgICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJMQkvKiBhZGQgY29tbWFuZCBsaW5lIGhpc3RvcnkJKi8KICNkZWZpbmUgQ09ORklHX0xPT1BXICAgICAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbG9vcHcgY29tbWFuZCAgICAgICAgICovCisjZGVmaW5lIENPTkZJR19NWF9DWUNMSUMgICAgICAgIDEgICAgICAgLyogZW5hYmxlIG1kYy9td2MgY29tbWFuZHMgICAgICAqLwogI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sJLyogY2hlY2sgZm9yIGtleXByZXNzIG9uIGJvb3RkZWxheT09MCAqLwogI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSAxCS8qIGluY2x1ZGUgdmVyc2lvbiBlbnYgdmFyaWFibGUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2Vib255LmggYi9pbmNsdWRlL2NvbmZpZ3MvZWJvbnkuaAppbmRleCBhMjZhZjY5Li5kODg4MmVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZWJvbnkuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZWJvbnkuaApAQCAtMTQzLDcgKzE0MywxMyBAQAogI3VuZGVmCUNPTkZJR19TT0ZUX0kyQwkJCSAgICAvKiBJMkMgYml0LWJhbmdlZAkJKi8KICNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJNDAwMDAwCS8qIEkyQyBzcGVlZCBhbmQgc2xhdmUgYWRkcmVzcwkqLwogI2RlZmluZSBDRkdfSTJDX1NMQVZFCQkweDdGCi0jZGVmaW5lIENGR19JMkNfTk9QUk9CRVMgICAgezB4Njl9ICAvKiBEb24ndCBwcm9iZSB0aGVzZSBhZGRycyAqLworCisjZGVmaW5lIENGR19JMkNfTVVMVElfRUVQUk9NUworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCSgweGE4Pj4xKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAxCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgMworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKIAogI2RlZmluZSBDT05GSUdfUFJFQk9PVAkiZWNobzsiCVwKIAkiZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKQEAgLTIwNSw2ICsyMTEsNyBAQAogCQkJCUNGR19DTURfREhDUAl8IFwKIAkJCQlDRkdfQ01EX0RJQUcJfCBcCiAJCQkJQ0ZHX0NNRF9FTEYJfCBcCisJCQkJQ0ZHX0NNRF9FRVBST00JfCBcCiAJCQkJQ0ZHX0NNRF9JMkMJfCBcCiAJCQkJQ0ZHX0NNRF9JUlEJfCBcCiAJCQkJQ0ZHX0NNRF9NSUkJfCBcCkBAIC0yNDMsOCArMjUwLDkgQEAKIAogI2RlZmluZSBDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MgKi8KIAotI2RlZmluZSBDT05GSUdfQVVUT19DT01QTEVURQkxICAgICAgIC8qIGFkZCBhdXRvY29tcGxldGlvbiBzdXBwb3J0ICAgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCS8qIGFkZCBjb21tYW5kIGxpbmUgaGlzdG9yeQkqLwogI2RlZmluZSBDT05GSUdfTE9PUFcgICAgICAgICAgICAxICAgICAgIC8qIGVuYWJsZSBsb29wdyBjb21tYW5kICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX01YX0NZQ0xJQyAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbWRjL213YyBjb21tYW5kcyAgICAgICovCiAjZGVmaW5lIENPTkZJR19aRVJPX0JPT1RERUxBWV9DSEVDSwkvKiBjaGVjayBmb3Iga2V5cHJlc3Mgb24gYm9vdGRlbGF5PT0wICovCiAjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIDEJLyogaW5jbHVkZSB2ZXJzaW9uIGVudiB2YXJpYWJsZSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvZ3RoMi5oIGIvaW5jbHVkZS9jb25maWdzL2d0aDIuaAppbmRleCA3N2QyZDU2Li5hNDllZDNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZ3RoMi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9ndGgyLmgKQEAgLTEyLDcgKzEyLDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zNCw3ICszNCw3IEBACiAKICNkZWZpbmUgQ09ORklHX0FVMTAwMAkJMQogCi0jZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUiAgICAgIDEKKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCTEKIAogI2RlZmluZSBDT05GSUdfRVRIQUREUgkJREU6QUQ6QkU6RUY6MDE6MDIgICAgLyogRXRoZXJuZXQgYWRkcmVzcyAqLwogCkBAIC01OSwyMSArNTksMjEgQEAKICNkZWZpbmUgQ09ORklHX0FVVE9CT09UX0RFTEFZX1NUUiAiZCIKICNkZWZpbmUgQ09ORklHX0FVVE9CT09UX1NUT1BfU1RSICIgIgogCi0jZGVmaW5lCUNPTkZJR19USU1FU1RBTVAJCS8qIFByaW50IGltYWdlIGluZm8gd2l0aCB0aW1lc3RhbXAgKi8KLSNkZWZpbmUJQ09ORklHX0JPT1RBUkdTICJwYW5pYz0xIgorI2RlZmluZSBDT05GSUdfVElNRVNUQU1QCQkvKiBQcmludCBpbWFnZSBpbmZvIHdpdGggdGltZXN0YW1wICovCisjZGVmaW5lIENPTkZJR19CT09UQVJHUyAicGFuaWM9MSIKIAotI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCisjZGVmaW5lIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJCVwKIAkiYWRkbWlzYz1zZXRlbnYgYm9vdGFyZ3MgJChib290YXJncykgIgkJCQlcCi0JICAgICAgICAiZXRoYWRkcj0kKGV0aGFkZHIpIFwwIgkJCQkJXAotICAgICAgICAibmV0Ym9vdD1ib290cDtydW4gYWRkbWlzYztib290bVwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICIiCisJCSJldGhhZGRyPSQoZXRoYWRkcikgXDAiCQkJCQlcCisJIm5ldGJvb3Q9Ym9vdHA7cnVuIGFkZG1pc2M7Ym9vdG1cMCIJCQkJXAorCQkiIgogCiAvKiBCb290IGZyb20gQ29tcGFjdCBmbGFzaCBwYXJ0aXRpb24gMiBhcyBkZWZhdWx0ICovCiAjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiaWRlIHJlc2V0O2Rpc2sgMHg4MTAwMDAwMCAwOjI7cnVuIGFkZG1pc2M7Ym9vdG0iCiAKLSNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSgoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX0lERSB8IENGR19DTURfREhDUCApICYgXAorI2RlZmluZSBDT05GSUdfQ09NTUFORFMgKChDT05GSUdfQ01EX0RGTCB8IENGR19DTURfSURFIHwgQ0ZHX0NNRF9ESENQICkgJiBcCiAgfihDRkdfQ01EX0VOViB8IENGR19DTURfRkFUIHwgQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRlBHQSB8IFwKLSAgIENGR19DTURfTUlJIHwgQ0ZHX0NNRF9MT0FEUyAgfCBDRkdfQ01EX0xPQURCIHwgQ0ZHX0NNRF9FTEYgfCBcCisgICBDRkdfQ01EX01JSSB8IENGR19DTURfTE9BRFMJfCBDRkdfQ01EX0xPQURCIHwgQ0ZHX0NNRF9FTEYgfCBcCiAgICBDRkdfQ01EX0JESSB8IENGR19DTURfQkVEQlVHIHwgQ0ZHX0NNRF9ORlMgfCBDRkdfQ01EX0FVVE9TQ1JJUFQgKSkKIAogI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgpAQCAtODEsMTEgKzgxLDExIEBACiAvKgogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCi0jZGVmaW5lCUNGR19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAgICAgICovCi0jZGVmaW5lCUNGR19QUk9NUFQJCSJHVEgyICMgIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgICovCi0jZGVmaW5lCUNGR19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICAqLwotI2RlZmluZQlDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikgIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lCUNGR19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJICAgICAqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiR1RIMiAjICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAgICAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpICAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzKi8KIAogI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJMTI4KjEwMjQKIApAQCAtOTMsMTYgKzkzLDE2IEBACiAKICNkZWZpbmUgQ0ZHX01IWgkJCTUwMAogCi0jZGVmaW5lIENGR19IWiAgICAgICAgICAgICAgICAgIChDRkdfTUhaICogMTAwMDAwMCkgLyogRklYTUUgY2F1c2VzIG92ZXJmbG93IGluIG5ldC5jICovCisjZGVmaW5lIENGR19IWgkJCShDRkdfTUhaICogMTAwMDAwMCkgLyogRklYTUUgY2F1c2VzIG92ZXJmbG93IGluIG5ldC5jICovCiAKICNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCTB4ODAwMDAwMDAgICAgIC8qIENhY2hlZCBhZGRyICovCiAKLSNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHg4MTAwMDAwMCAgICAgLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJMHg4MTAwMDAwMCAgICAgLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KIAogI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDgwMTAwMDAwCiAjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHg4MzAwMDAwMAogCi0jZGVmaW5lIENPTkZJR19IV19XQVRDSERPRyAgICAgIDEKKyNkZWZpbmUgQ09ORklHX0hXX1dBVENIRE9HCTEKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgpAQCAtMTEzLDggKzExMyw4IEBACiAjZGVmaW5lIFBIWVNfRkxBU0gJCTB4YmZjMDAwMDAgLyogRmxhc2ggQmFuayAjMSAqLwogCiAvKiBUaGUgZm9sbG93aW5nICNkZWZpbmVzIGFyZSBuZWVkZWQgdG8gZ2V0IGZsYXNoIGVudmlyb25tZW50IHJpZ2h0ICovCi0jZGVmaW5lCUNGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCi0jZGVmaW5lCUNGR19NT05JVE9SX0xFTgkJKDE5MiA8PCAxMCkKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQlURVhUX0JBU0UKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkoMTkyIDw8IDEwKQogCiAjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAkweDQwMDAwMAogCkBAIC0xMjUsNyArMTI1LDcgQEAKICNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJKDIgKiBDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCiAjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCSgyICogQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLwogCi0jZGVmaW5lCUNGR19FTlZfSVNfTk9XSEVSRQkxCisjZGVmaW5lIENGR19FTlZfSVNfTk9XSEVSRQkxCiAKIC8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUHJpbWFyeSBFbnZpcm9ubWVudCBTZWN0b3IJKi8KICNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkweEIwMDMwMDAwCkBAIC0xNTgsMjEgKzE1OCwyMSBAQAogI2RlZmluZSBDRkdfSURFX01BWEJVUwkJMQkvKiBtYXguIDEgSURFIGJ1cwkJKi8KICNkZWZpbmUgQ0ZHX0lERV9NQVhERVZJQ0UJMQkvKiBtYXguIDEgZHJpdmUgcGVyIElERSBidXMJKi8KIAotI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogTEVEICAgZm9yIGlkZSBub3Qgc3VwcG9ydGVkCSovCisjdW5kZWYJQ09ORklHX0lERV9MRUQJCQkvKiBMRUQJIGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLwogI3VuZGVmCUNPTkZJR19JREVfUkVTRVQJCS8qIHJlc2V0IGZvciBpZGUgbm90IHN1cHBvcnRlZAkqLwogCiAjZGVmaW5lIENGR19BVEFfSURFMF9PRkZTRVQJMAogCi0jZGVmaW5lIENGR19BVEFfQkFTRV9BRERSICAgICAgIENGR19QQ01DSUFfSU9fQkFTRQorI2RlZmluZSBDRkdfQVRBX0JBU0VfQUREUglDRkdfUENNQ0lBX0lPX0JBU0UKIAogLyogT2Zmc2V0IGZvciBkYXRhIEkvTwkJCSovCi0jZGVmaW5lIENGR19BVEFfREFUQV9PRkZTRVQgICAgIDAKKyNkZWZpbmUgQ0ZHX0FUQV9EQVRBX09GRlNFVAkwCiAKLS8qIE9mZnNldCBmb3Igbm9ybWFsIHJlZ2lzdGVyIGFjY2Vzc2VzICAqLwotI2RlZmluZSBDRkdfQVRBX1JFR19PRkZTRVQgICAgICAwCisvKiBPZmZzZXQgZm9yIG5vcm1hbCByZWdpc3RlciBhY2Nlc3NlcwkqLworI2RlZmluZSBDRkdfQVRBX1JFR19PRkZTRVQJMAogCi0vKiBPZmZzZXQgZm9yIGFsdGVybmF0ZSByZWdpc3RlcnMgICAgICAgKi8KLSNkZWZpbmUgQ0ZHX0FUQV9BTFRfT0ZGU0VUICAgICAgMHgwMjAwCisvKiBPZmZzZXQgZm9yIGFsdGVybmF0ZSByZWdpc3RlcnMJKi8KKyNkZWZpbmUgQ0ZHX0FUQV9BTFRfT0ZGU0VUCTB4MDIwMAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDYWNoZSBDb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mva3ZtZTA4MC5oIGIvaW5jbHVkZS9jb25maWdzL2t2bWUwODAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWNmNzA1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2t2bWUwODAuaApAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNQorICogU2FuZ21vb24gS2ltLCBkb2dvaWxAZXRpbnN5cy5jb20uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworI2RlZmluZSBDT05GSUdfTVBDODI0WAkJMQorI2RlZmluZSBDT05GSUdfTVBDODI0NQkJMQorI2RlZmluZSBDT05GSUdfS1ZNRTA4MAkJMQorCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCTEKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQorCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjEKKworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgXAorCSJjb25zb2xlPXR0eVMwLDExNTIwMCAiIFwKKwkicm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMC4xOi9vcHQvZWxkay9wcGNfODJ4eCAiIFwKKwkiaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDoiIFwKKwkia3ZtZTA4MDpldGgwOm5vbmUgIiBcCisJIm10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjEybShyb290KSwtKGtlcm5lbCkiCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5EIFwKKwkidGZ0cCA4MDAwMDAga3ZtZTA4MC91SW1hZ2U7ICIgXAorCSJib290bSA4MDAwMDAiCisKKyNkZWZpbmUgQ09ORklHX0xPQURBRERSCQk4MDAwMDAKKworI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX1IKKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCisKKyNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQorI3VuZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQorCisjdW5kZWYJQ09ORklHX1dBVENIRE9HCisKKyNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sJKENPTkZJR19CT09UUF9ERUZBVUxUIHwgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRSkKKworI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTgorI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgorCisjZGVmaW5lIENPTkZJR19SVENfRFMxNjR4CisKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoIENPTkZJR19DTURfREZMCXwgXAorCQkJCSAgQ0ZHX0NNRF9BU0tFTlYJfCBcCisJCQkJICBDRkdfQ01EX0NBQ0hFCQl8IFwKKwkJCQkgIENGR19DTURfREFURQkJfCBcCisJCQkJICBDRkdfQ01EX0RIQ1AJCXwgXAorCQkJCSAgQ0ZHX0NNRF9ESUFHCQl8IFwKKwkJCQkgIENGR19DTURfRUVQUk9NCXwgXAorCQkJCSAgQ0ZHX0NNRF9FTEYJCXwgXAorCQkJCSAgQ0ZHX0NNRF9JMkMJCXwgXAorCQkJCSAgQ0ZHX0NNRF9KRkZTMgkJfCBcCisJCQkJICBDRkdfQ01EX05GUwkJfCBcCisJCQkJICBDRkdfQ01EX1BDSQkJfCBcCisJCQkJICBDRkdfQ01EX1BJTkcJCXwgXAorCQkJCSAgQ0ZHX0NNRF9TRFJBTQkJfCBcCisJCQkJICBDRkdfQ01EX1NOVFApCisKKyNkZWZpbmUgQ09ORklHX05FVENPTlNPTEUKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT05HSEVMUAorI2RlZmluZSBDRkdfUFJPTVBUCQkiPT4gIgorI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYKKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KQorI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYKKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDQwMDAwMAorI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDdDMDAwMDAKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkweDAwMTAwMDAwCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDEwMDAKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJMHg3QzAwMDAwMAorI2RlZmluZSBDRkdfRVVNQl9BRERSCQkweEZDMDAwMDAwCisjZGVmaW5lIENGR19OVlJBTV9CQVNFX0FERFIJMHhGRjAwMDAwMAorI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xCTB4RkYwODAwMDAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ09NMgkweEZGMDgwMDEwCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTMJMHhGRjA4MDAyMAorI2RlZmluZSBDRkdfTlMxNjU1MF9DT000CTB4RkYwODAwMzAKKyNkZWZpbmUgQ0ZHX1JFU0VUX0FERFJFU1MJMHhGRkYwMDEwMAorCisjZGVmaW5lIENGR19NQVhfUkFNX1NJWkUJMHgyMDAwMDAwMAorI2RlZmluZSBDRkdfRkxBU0hfU0laRQkJKDE2ICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIENGR19OVlJBTV9TSVpFCQkweDdGRkY4CisKKyNkZWZpbmUgQ09ORklHX1ZFUllfQklHX1JBTQorCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJMHgwMDA0MDAwMAorI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCVRFWFRfQkFTRQorI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDUxMiA8PCAxMCkKKworI2RlZmluZSBDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkKKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCisjZGVmaW5lIENGR19GTEFTSF9QUk9URUNUSU9OCisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisjZGVmaW5lIENGR19GTEFTSF9QUk9URUNUX0NMRUFSCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYKKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCisKKyNkZWZpbmUgQ0ZHX0pGRlMyX0ZJUlNUX0JBTksJMAorI2RlZmluZSBDRkdfSkZGUzJfTlVNX0JBTktTCTEKKworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05WUkFNCTEKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorI2RlZmluZSBDRkdfTlZSQU1fQUNDRVNTX1JPVVRJTkUKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQlDRkdfTlZSQU1fQkFTRV9BRERSCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTAKKworI2RlZmluZSBDRkdfTlMxNjU1MAorI2RlZmluZSBDRkdfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUJMQorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCTE0NzQ1NjAwCisKKyNkZWZpbmUgQ09ORklHX1BDSQorI2RlZmluZSBDT05GSUdfUENJX1BOUAorCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkKKyNkZWZpbmUgQ09ORklHX0VFUFJPMTAwCisjZGVmaW5lIENPTkZJR19FRVBSTzEwMF9TUk9NX1dSSVRFCisKKyNkZWZpbmUgQ0ZHX1JYX0VUSF9CVUZGRVIJOAorCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJMQorI2RlZmluZSBDRkdfSTJDX1NQRUVECQk0MDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgorCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIJCTB4NTcKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4JCTEKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMJMworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMJMTAKKworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTMzMzMzMzMzCisKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCisjaWYgQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCCisjICBkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CisjZW5kaWYKKworI2RlZmluZSBDRkdfRExMX0VYVEVORAkJMHgwMAorI2RlZmluZSBDRkdfUENJX0hPTERfREVMCTB4MjAKKworI2RlZmluZSBDRkdfUk9NTkFMCQkxNQorI2RlZmluZSBDRkdfUk9NRkFMCQkzMQorCisjZGVmaW5lIENGR19SRUZJTlQJCTQzMAorCisjZGVmaW5lIENGR19EQlVTX1NJWkUyCQkxCisKKyNkZWZpbmUgQ0ZHX0JTVE9QUkUJCTEyMQorI2RlZmluZSBDRkdfUkVGUkVDCQk4CisjZGVmaW5lIENGR19SRExBVAkJNAorI2RlZmluZSBDRkdfUFJFVE9BQ1QJCTMKKyNkZWZpbmUgQ0ZHX0FDVFRPUFJFCQk1CisjZGVmaW5lIENGR19BQ1RPUlcJCTMKKyNkZWZpbmUgQ0ZHX1NETU9ERV9DQVNfTEFUCTMKKyNkZWZpbmUgQ0ZHX1NETU9ERV9XUkFQCQkwCisKKyNkZWZpbmUgQ0ZHX1JFR0lTVEVSRF9UWVBFX0JVRkZFUgkxCisjZGVmaW5lIENGR19FWFRST00JCQkxCisjZGVmaW5lIENGR19SRUdESU1NCQkJMAorCisjZGVmaW5lIENGR19CQU5LMF9TVEFSVAkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfQkFOSzBfRU5ECQkoMHg0MDAwMDAwIC0gMSkKKyNkZWZpbmUgQ0ZHX0JBTkswX0VOQUJMRQkxCisjZGVmaW5lIENGR19CQU5LMV9TVEFSVAkJMHgwNDAwMDAwMAorI2RlZmluZSBDRkdfQkFOSzFfRU5ECQkoMHg4MDAwMDAwIC0gMSkKKyNkZWZpbmUgQ0ZHX0JBTksxX0VOQUJMRQkxCisjZGVmaW5lIENGR19CQU5LMl9TVEFSVAkJMHgzZmYwMDAwMAorI2RlZmluZSBDRkdfQkFOSzJfRU5ECQkweDNmZmZmZmZmCisjZGVmaW5lIENGR19CQU5LMl9FTkFCTEUJMAorI2RlZmluZSBDRkdfQkFOSzNfU1RBUlQJCTB4M2ZmMDAwMDAKKyNkZWZpbmUgQ0ZHX0JBTkszX0VORAkJMHgzZmZmZmZmZgorI2RlZmluZSBDRkdfQkFOSzNfRU5BQkxFCTAKKyNkZWZpbmUgQ0ZHX0JBTks0X1NUQVJUCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19CQU5LNF9FTkQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0JBTks0X0VOQUJMRQkwCisjZGVmaW5lIENGR19CQU5LNV9TVEFSVAkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfQkFOSzVfRU5ECQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19CQU5LNV9FTkFCTEUJMAorI2RlZmluZSBDRkdfQkFOSzZfU1RBUlQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0JBTks2X0VORAkJMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfQkFOSzZfRU5BQkxFCTAKKyNkZWZpbmUgQ0ZHX0JBTks3X1NUQVJUCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19CQU5LN19FTkQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0JBTks3X0VOQUJMRQkwCisKKyNkZWZpbmUgQ0ZHX0JBTktfRU5BQkxFCQkweDAzCisKKyNkZWZpbmUgQ0ZHX09EQ1IJCTB4NzUKKyNkZWZpbmUgQ0ZHX1BHTUFYCQkweDMyCisKKyNkZWZpbmUgQ0ZHX0lCQVQwTAkoQ0ZHX1NEUkFNX0JBU0UgfCBCQVRMX1BQXzEwIHwgQkFUTF9NRU1DT0hFUkVOQ0UpCisjZGVmaW5lIENGR19JQkFUMFUJKENGR19TRFJBTV9CQVNFIHwgQkFUVV9CTF8yNTZNIHwgQkFUVV9WUyB8IEJBVFVfVlApCisKKyNkZWZpbmUgQ0ZHX0lCQVQxTAkoQ0ZHX0lOSVRfUkFNX0FERFIgfCBCQVRMX1BQXzEwIHwgQkFUTF9NRU1DT0hFUkVOQ0UpCisjZGVmaW5lIENGR19JQkFUMVUJKENGR19JTklUX1JBTV9BRERSIHwgQkFUVV9CTF8xMjhLIHwgQkFUVV9WUyB8IEJBVFVfVlApCisKKyNkZWZpbmUgQ0ZHX0lCQVQyTAkoMHg4MDAwMDAwMCB8IEJBVExfUFBfMTAgfCBCQVRMX0NBQ0hFSU5ISUJJVCkKKyNkZWZpbmUgQ0ZHX0lCQVQyVQkoMHg4MDAwMDAwMCB8IEJBVFVfQkxfMjU2TSB8IEJBVFVfVlMgfCBCQVRVX1ZQKQorCisjZGVmaW5lIENGR19JQkFUM0wJKDB4RjAwMDAwMDAgfCBCQVRMX1BQXzEwIHwgQkFUTF9DQUNIRUlOSElCSVQpCisjZGVmaW5lIENGR19JQkFUM1UJKDB4RjAwMDAwMDAgfCBCQVRVX0JMXzI1Nk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKKworI2RlZmluZSBDRkdfREJBVDBMCUNGR19JQkFUMEwKKyNkZWZpbmUgQ0ZHX0RCQVQwVQlDRkdfSUJBVDBVCisjZGVmaW5lIENGR19EQkFUMUwJQ0ZHX0lCQVQxTAorI2RlZmluZSBDRkdfREJBVDFVCUNGR19JQkFUMVUKKyNkZWZpbmUgQ0ZHX0RCQVQyTAlDRkdfSUJBVDJMCisjZGVmaW5lIENGR19EQkFUMlUJQ0ZHX0lCQVQyVQorI2RlZmluZSBDRkdfREJBVDNMCUNGR19JQkFUM0wKKyNkZWZpbmUgQ0ZHX0RCQVQzVQlDRkdfSUJBVDNVCisKKyNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgorCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2x1YW4uaCBiL2luY2x1ZGUvY29uZmlncy9sdWFuLmgKaW5kZXggMDMzNWEwMC4uMDM1MGU5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2x1YW4uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbHVhbi5oCkBAIC0xNDUsNiArMTQ1LDEzIEBACiAjZGVmaW5lIENGR19JMkNfU1BFRUQJCTQwMDAwMAkvKiBJMkMgc3BlZWQgYW5kIHNsYXZlIGFkZHJlc3MJKi8KICNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgogCisjZGVmaW5lIENGR19JMkNfTVVMVElfRUVQUk9NUworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCSgweGE4Pj4xKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAxCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgMworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKwogI2RlZmluZSBDT05GSUdfUFJFQk9PVAkiZWNobzsiCVwKIAkiZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKIAkiZWNobyIKQEAgLTIxNSw2ICsyMjIsNyBAQAogCQkJCUNGR19DTURfREhDUAkJfAlcCiAJCQkJQ0ZHX0NNRF9ESUFHCQl8CVwKIAkJCQlDRkdfQ01EX0VMRgkJfAlcCisJCQkJQ0ZHX0NNRF9FRVBST00JCXwJXAogCQkJCUNGR19DTURfSTJDCQl8CVwKIAkJCQlDRkdfQ01EX0lSUQkJfAlcCiAJCQkJQ0ZHX0NNRF9NSUkJCXwJXApAQCAtMjUzLDYgKzI2MSwxMiBAQAogCiAjZGVmaW5lIENGR19IWgkJICAgICAgICAxMDAwCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MgKi8KIAorI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCTEJLyogYWRkIGNvbW1hbmQgbGluZSBoaXN0b3J5CSovCisjZGVmaW5lIENPTkZJR19MT09QVyAgICAgICAgICAgIDEgICAgICAgLyogZW5hYmxlIGxvb3B3IGNvbW1hbmQgICAgICAgICAqLworI2RlZmluZSBDT05GSUdfTVhfQ1lDTElDICAgICAgICAxICAgICAgIC8qIGVuYWJsZSBtZGMvbXdjIGNvbW1hbmRzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1pFUk9fQk9PVERFTEFZX0NIRUNLCS8qIGNoZWNrIGZvciBrZXlwcmVzcyBvbiBib290ZGVsYXk9PTAgKi8KKyNkZWZpbmUgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUgMQkvKiBpbmNsdWRlIHZlcnNpb24gZW52IHZhcmlhYmxlICovCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFBDSSBzdHVmZgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL21jYzIwMC5oIGIvaW5jbHVkZS9jb25maWdzL21jYzIwMC5oCmluZGV4IGQ4ZDYzYTEuLjBjOTM1YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9tY2MyMDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbWNjMjAwLmgKQEAgLTM3LDE4ICszNyw1MiBAQAogCiAjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgogCi0jZGVmaW5lIEJPT1RGTEFHX0NPTEQJCTB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggCSovCi0jZGVmaW5lIEJPT1RGTEFHX1dBUk0JCTB4MDIJLyogU29mdHdhcmUgcmVib290CSAgICAgCQkqLworI2RlZmluZSBCT09URkxBR19DT0xECQkweDAxCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNICSovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JCTB4MDIJLyogU29mdHdhcmUgcmVib290CQkJKi8KIAotI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogRm9yIE1QQzV4eHggQ1BVcyAJCQkqLworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogRm9yIE1QQzV4eHggQ1BVcwkJCSovCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKLSMgIGRlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUgCSovCisjICBkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlCSovCiAjZW5kaWYKIAogLyoKICAqIFNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqCisgKiAgVG8gc2VsZWN0IGNvbnNvbGUgb24gdGhlIG9uZSBvZiA4IGV4dGVybmFsIFVBUlRzLAorICogZGVmaW5lIENPTkZJR19RVUFSVF9DT05TT0xFIGFzIDEsIDIsIDMsIG9yIDQgZm9yIHRoZSBmaXJzdCBRdWFkIFVBUlQsCisgKiBvciBhcyA1LCA2LCA3LCBvciA4IGZvciB0aGUgc2Vjb25kIFF1YWQgVUFSVC4KKyAqIENPTTExLCBDT00xMiwgQ09NMTMsIENPTTE0IGFyZSBsb2NhdGVkIG9uIHRoZSBzZWNvbmQgUXVhZCBVQVJULgorICoKKyAqICBDT05GSUdfUFNDX0NPTlNPTEUgbXVzdCBiZSB1bmRlZmluZWQgaW4gdGhpcyBjYXNlLgogICovCi0jZGVmaW5lIENPTkZJR19QU0NfQ09OU09MRQkxCS8qIGNvbnNvbGUgaXMgb24gUFNDMQkJCSovCisjaWYgIWRlZmluZWQoQ09ORklHX1BSUzIwMCkKKy8qIE1DQzIwMCBjb25maWd1cmF0aW9uOiAqLworI2lmZGVmIENPTkZJR19DT05TT0xFX0NPTTEyCisjZGVmaW5lIENPTkZJR19RVUFSVF9DT05TT0xFCTYJLyogY29uc29sZSBpcyBvbiBVQVJURiBvZiBRVUFSVDIJKi8KKyNlbHNlCisjZGVmaW5lIENPTkZJR19RVUFSVF9DT05TT0xFCTgJLyogY29uc29sZSBpcyBvbiBVQVJUSCBvZiBRVUFSVDIJKi8KKyNlbmRpZgorI2Vsc2UKKy8qIFBSUzIwMCBjb25maWd1cmF0aW9uOiAqLworI3VuZGVmIENPTkZJR19RVUFSVF9DT05TT0xFCisjZW5kaWYgLyogQ09ORklHX1BSUzIwMCAqLworLyoKKyAqICBUbyBzZWxlY3QgY29uc29sZSBvbiBQU0MxLCBkZWZpbmUgQ09ORklHX1BTQ19DT05TT0xFIGFzIDEKKyAqIGFuZCB1bmRlZmluZSBDT05GSUdfUVVBUlRfQ09OU09MRS4KKyAqLworI2lmICFkZWZpbmVkKENPTkZJR19QUlMyMDApCisvKiBNQ0MyMDAgY29uZmlndXJhdGlvbjogKi8KKyNkZWZpbmUgQ09ORklHX1NFUklBTF9NVUxUSQkxCisjZGVmaW5lIENPTkZJR19QU0NfQ09OU09MRQkxCS8qIFBTQzEgbWF5IGJlIENPTSAqLworI2RlZmluZSBDT05GSUdfUFNDX0NPTlNPTEUyCTIJLyogUFNDMiBpcyBQU29DICovCisjZWxzZQorLyogUFJTMjAwIGNvbmZpZ3VyYXRpb246ICovCisjZGVmaW5lIENPTkZJR19QU0NfQ09OU09MRQkxCS8qIGNvbnNvbGUgaXMgb24gUFNDMQkJKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1FVQVJUX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX1BTQ19DT05TT0xFKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX1NFUklBTF9NVUxUSSkKKyNlcnJvciAiU2VsZWN0IG9ubHkgb25lIGNvbnNvbGUgZGV2aWNlISIKKyNlbmRpZgogI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAogI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCB9CiAKQEAgLTU4LDcgKzkyLDcgQEAKIAogLyogVVNCICovCiAjZGVmaW5lIENPTkZJR19VU0JfT0hDSQotI2RlZmluZSBBRERfVVNCX0NNRCAgICAgICAgICAgICBDRkdfQ01EX1VTQiB8IENGR19DTURfRkFUCisjZGVmaW5lIEFERF9VU0JfQ01ECQlDRkdfQ01EX1VTQiB8IENGR19DTURfRkFUCiAjZGVmaW5lIENPTkZJR19VU0JfU1RPUkFHRQogCiAvKgpAQCAtODQsMzMgKzExOCw0NiBAQAogCiAjdW5kZWYJQ09ORklHX0JPT1RBUkdTCiAKLSNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQkJXAorI2RlZmluZSBYTUtfU1RSKHgpCQkjeAorI2RlZmluZSBNS19TVFIoeCkJCVhNS19TVFIoeCkKKworI2lmZGVmIENPTkZJR19QUlMyMDAKKyMgZGVmaW5lIENGR19fQk9BUkROQU1FCQkicHJzMjAwIgorIyBkZWZpbmUgQ0ZHX19MSU5VWF9DT05TT0xFCSJ0dHlTMCIKKyNlbHNlCisjIGRlZmluZSBDRkdfX0JPQVJETkFNRQkJIm1jYzIwMCIKKyMgZGVmaW5lIENGR19fTElOVVhfQ09OU09MRQkidHR5RVU3IgorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQkJXAogCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQlcCi0JImhvc3RuYW1lPW1jYzIwMFwwIgkJCQkJCVwKKwkiaG9zdG5hbWU9IiBDRkdfX0JPQVJETkFNRSAiXDAiCQkJCQlcCiAJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIgkJCVwKIAkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQlcCiAJInJhbWFyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcndcMCIJCQlcCiAJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKIAkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAogCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmYgcGFuaWM9MVwwIgkJCVwKLQkiZmxhc2hfbmZzPXJ1biBuZnNhcmdzIGFkZGlwOyIJCQkJCVwKKwkiYWRkY29ucz1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJjb25zb2xlPSR7Y29uc29sZX0sJHtiYXVkcmF0ZX1cMCIJCQlcCisJImZsYXNoX25mcz1ydW4gbmZzYXJncyBhZGRpcCBhZGRjb25zOyIJCQkJXAogCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAotCSJmbGFzaF9zZWxmPXJ1biByYW1hcmdzIGFkZGlwOyIJCQkJCVwKKwkiZmxhc2hfc2VsZj1ydW4gcmFtYXJncyBhZGRpcCBhZGRjb25zOyIJCQkJXAogCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn0gJHtyYW1kaXNrX2FkZHJ9XDAiCQlcCi0JIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXA7Ym9vdG1cMCIJXAorCSJuZXRfbmZzPXRmdHAgMjAwMDAwICR7Ym9vdGZpbGV9OyIJCQkJXAorCQkicnVuIG5mc2FyZ3MgYWRkaXAgYWRkY29ucztib290bVwwIgkJCVwKKwkiY29uc29sZT0iIENGR19fTElOVVhfQ09OU09MRSAiXDAiCQkJCVwKIAkicm9vdHBhdGg9L29wdC9lbGRrL3BwY182eHhcMCIJCQkJCVwKLQkiYm9vdGZpbGU9L3RmdHBib290L21jYzIwMC91SW1hZ2VcMCIJCQkJXAotCSJiYXVkcmF0ZT0xMTUyMDBcMCIJCQkJCQlcCi0JImxvYWQ9dGZ0cCAyMDAwMDAgL3RmdHBib290L21jYzIwMC91LWJvb3QuYmluXDAiCQlcCi0JInVwZGF0ZT1wcm90ZWN0IG9mZiBGRkYwMDAwMCArJHtmaWxlc2l6ZX07IgkJCVwKLQkJImVyYSBGRkYwMDAwMCArJHtmaWxlc2l6ZX07IgkJCQlcCi0JCSJjcC5iIDIwMDAwMCBGRkYwMDAwMCAke2ZpbGVzaXplfVwwIgkJICAgICAgICBcCi0JInNlcnZlcmlwPTE5Mi4xNjguMS4xXDAiCQkJCQlcCi0JImlwYWRkcj0xOTIuMTY4LjEzMy4xNDRcMCIJCQkJCVwKLQkibmV0bWFzaz0yNTUuMjU1LjAuMFwwIgkJCQkJCVwKKwkiYm9vdGZpbGU9L3RmdHBib290LyIgQ0ZHX19CT0FSRE5BTUUgIi91SW1hZ2VcMCIJCVwKKwkibG9hZD10ZnRwIDIwMDAwMCAvdGZ0cGJvb3QvIiBDRkdfX0JPQVJETkFNRSAiL3UtYm9vdC5iaW5cMCIJXAorCSJ0ZXh0X2Jhc2U9IiBNS19TVFIoVEVYVF9CQVNFKSAiXDAiCQkJCVwKKwkidXBkYXRlPXByb3RlY3Qgb2ZmICR7dGV4dF9iYXNlfSArJHtmaWxlc2l6ZX07IgkJCVwKKwkJImVyYSAke3RleHRfYmFzZX0gKyR7ZmlsZXNpemV9OyIJCQlcCisJCSJjcC5iIDIwMDAwMCAke3RleHRfYmFzZX0gJHtmaWxlc2l6ZX1cMCIJCVwKIAkidW5sb2NrPXllc1wwIgkJCQkJCQlcCi0JImV0aGFkZHI9MDA6MDI6NDQ6N0Q6NzM6M0JcMCIJCQkJCVwKIAkiIgorI3VuZGVmIE1LX1NUUgorI3VuZGVmIFhNS19TVFIKIAogI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJInJ1biBmbGFzaF9zZWxmIgogCkBAIC0xMjAsNyArMTY3LDcgQEAKIC8qCiAgKiBJUEIgQnVzIGNsb2NraW5nIGNvbmZpZ3VyYXRpb24uCiAgKi8KLSNkZWZpbmUgQ0ZHX0lQQlNQRUVEXzEzMyAgIAkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KKyNkZWZpbmUgQ0ZHX0lQQlNQRUVEXzEzMwkJLyogZGVmaW5lIGZvciAxMzNNSHogc3BlZWQgKi8KIAogLyoKICAqIEkyQyBjb25maWd1cmF0aW9uCkBAIC0xMzYsOSArMTgzLDkgQEAKICAqIFRFWFQgYmFzZSBhbHdheXMgYXQgMHhGRkYwMDAwMAogICogRU5WX0FERFIgYWx3YXlzIGF0ICAweEZGRjQwMDAwCiAgKiBGTEFTSF9CQVNFIGF0IDB4RkMwMDAwMDAgZm9yIDY0IE1CIChvbmx5IDMyTUIgYXJlIHN1cHBvcnRlZCwgbm90IGVub3VnaCBhZGRyIGxpbmVzISEhKQotICogICAgICAgICAgICAgICAweEZFMDAwMDAwIGZvciAzMiBNQgotICogICAgICAgICAgICAgICAweEZGMDAwMDAwIGZvciAxNiBNQgotICogICAgICAgICAgICAgICAweEZGODAwMDAwIGZvciAgOCBNQgorICoJCSAweEZFMDAwMDAwIGZvciAzMiBNQgorICoJCSAweEZGMDAwMDAwIGZvciAxNiBNQgorICoJCSAweEZGODAwMDAwIGZvciAgOCBNQgogICovCiAjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweGZjMDAwMDAwCiAjZGVmaW5lIENGR19GTEFTSF9TSVpFCQkweDA0MDAwMDAwCkBAIC0xNjAsOSArMjA3LDkgQEAKICNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8JCS8qIHByaW50ICdFJyBmb3IgZW1wdHkgc2VjdG9yIG9uIGZsaW5mbyAqLwogI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAkxCS8qIGRvbid0IHdhcm4gdXBvbiB1bmtub3duIGZsYXNoCSovCiAKLSNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSCAgICAgMQkvKiB1c2UgRkxBU0ggZm9yIGVudmlyb25tZW50IHZhcnMJKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCS8qIHVzZSBGTEFTSCBmb3IgZW52aXJvbm1lbnQgdmFycwkqLwogCi0jZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4NDAwMDAgCS8qIHNpemUgb2Ygb25lIGNvbXBsZXRlIHNlY3RvcgkqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDQwMDAwCS8qIHNpemUgb2Ygb25lIGNvbXBsZXRlIHNlY3RvcgkqLwogI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFICsgQ0ZHX01PTklUT1JfTEVOKQogI2RlZmluZQlDRkdfRU5WX1NJWkUJCTB4MjAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLwogCkBAIC0xOTIsNyArMjM5LDcgQEAKICNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQogI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAogCi0jZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgVEVYVF9CQVNFCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCiAjaWYgKENGR19NT05JVE9SX0JBU0UgPCBDRkdfRkxBU0hfQkFTRSkKICMgICBkZWZpbmUgQ0ZHX1JBTUJPT1QJCTEKICNlbmRpZgpAQCAtMjEyLDI3ICsyNTksNDUgQEAKICNkZWZpbmUgQ09ORklHX1BIWV9BRERSCQkxCiAKIC8qCisgKiBMQ0QgU3BsYXNoIFNjcmVlbgorICovCisjaWYgIWRlZmluZWQoQ09ORklHX1BSUzIwMCkKKyNkZWZpbmUgQ09ORklHX0xDRAkJMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19MQ0QpCisjZGVmaW5lIENPTkZJR19TUExBU0hfU0NSRUVOCTEKKyNkZWZpbmUgQ0ZHX0NPTlNPTEVfSVNfSU5fRU5WCTEKKyNkZWZpbmUgTENEX0JQUAkJCUxDRF9NT05PQ0hST01FCisjZW5kaWYKKworLyoKICAqIEdQSU8gY29uZmlndXJhdGlvbgogICovCiAvKiAweDEwMDAwMDA0ID0gMzJNQiBTRFJBTSAqLwogLyogMHg5MDAwMDAwNCA9IDY0TUIgU0RSQU0gKi8KKyNpZiBkZWZpbmVkKENPTkZJR19MQ0QpCisvKiBzZXQgUFNDMiBpbiBVQVJUIG1vZGUgKi8KKyNkZWZpbmUgQ0ZHX0dQU19QT1JUX0NPTkZJRwkweDAwMDAwMDQ0CisjZWxzZQogI2RlZmluZSBDRkdfR1BTX1BPUlRfQ09ORklHCTB4MDAwMDAwMDQKKyNlbmRpZgogCiAvKgogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCi0jZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CSAgICAqLwotI2RlZmluZSBDRkdfUFJPTVBUCQkiPT4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSI9PiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQotI2RlZmluZSBDRkdfQ0JTSVpFCQkxMDI0CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkxMDI0CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCiAjZWxzZQotI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLwogI2VuZGlmCi0jZGVmaW5lIENGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfUEJTSVpFIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikJLyogUHJpbnQgQnVmZmVyIFNpemUJKi8KICNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLwogI2RlZmluZSBDRkdfQkFSR1NJWkUJCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLwogCi0jZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MDAxMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDAwMTAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KICNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDAwZjAwMDAwCS8qIDEgLi4uIDE1IE1CIGluIERSQU0JKi8KIAogI2RlZmluZSBDRkdfTE9BRF9BRERSCQkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLwpAQCAtMjU2LDExICszMjEsNTkgQEAKICNkZWZpbmUgQ0ZHX0NTMl9TSVpFCQkweDAwMDAxMDAwCiAjZGVmaW5lIENGR19DUzJfQ0ZHCQkweDFkMzAwCiAKKy8qIFNlY29uZCBRdWFkIFVBUlQgQDB4ODAwMTAwMDAgKi8KKyNkZWZpbmUgQ0ZHX0NTMV9TVEFSVAkJMHg4MDAxMDAwMAorI2RlZmluZSBDRkdfQ1MxX1NJWkUJCTB4MDAwMDEwMDAKKyNkZWZpbmUgQ0ZHX0NTMV9DRkcJCTB4MWQzMDAKKworLyoKKyAqICBTZWxlY3Qgb25lIG9mIHF1YXJ0cyBhcyBhIGRlZmF1bHQKKyAqIGNvbnNvbGUuIElmIHVuZGVmaW5lZCAtIFBTQyBjb25zb2xlCisgKiB3aWwgYmUgZGVmYXVsdAorICovCiAjZGVmaW5lIENGR19DU19CVVJTVAkJMHgwMDAwMDAwMAogI2RlZmluZSBDRkdfQ1NfREVBRENZQ0xFCTB4MzMzMzMzMzMKIAogI2RlZmluZSBDRkdfUkVTRVRfQUREUkVTUwkweGZmMDAwMDAwCiAKKy8qCisgKiBRVUFSVCBFeHBhbmRlcnMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDT05GSUdfUVVBUlRfQ09OU09MRSkKKy8qCisgKiBXZSdsbCB1c2UgTlMxNjU1MCBjaGlwIHJvdXRpbmVzLAorICovCisjZGVmaW5lIENGR19OUzE2NTUwCQkxCisjZGVmaW5lIENGR19OUzE2NTUwX1NFUklBTAkxCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCTEKKy8qCisgKiAgVG8gYWNoaWV2ZSBuZWNlc3Nhcnkgb2Zmc2V0IG9uIFNDMTZDNTU0CisgKiBBMC1BMiAocmVnaXN0ZXIgc2VsZWN0KSBwaW5zIHdpdGggTlMxNjU1MAorICogZnVuY3Rpb25zIChpbiBzdHJ1Y3QgTlMxNjU1MCksIFJFR19TSVpFCisgKiBzaG91bGQgYmUgNCwgYmVjYXVzZSBBMC1BMiBwaW5zIGFyZSBjb25uZWN0ZWQKKyAqIHRvIERBMi1EQTQgYWRkcmVzcyBidXMgbGluZXMuCisgKi8KKyNkZWZpbmUgQ0ZHX05TMTY1NTBfUkVHX1NJWkUJNAorLyoKKyAqIExvY2FsUGx1cyBCdXMgYWxyZWFkeSBpbml0ZWQgaW4gY3B1X2luaXRfZigpLAorICogc28gY2FuIHdvcmsgd2l0aCBRVUFSVCdzIGNoaXAgc2VsZWN0cy4KKyAqIE9uZSBvZiBmb3VyIFNDMTZDNTU0IFVBUlRzIGlzIHNlbGVjdGVkIHdpdGgKKyAqIEEzLUE0IChEQTUtREE2KSBsaW5lcy4KKyAqLworI2lmIChDT05GSUdfUVVBUlRfQ09OU09MRSA+IDApICYmIChDT05GSUdfUVVBUlRfQ09OU09MRSA8IDUpICYmICFkZWZpbmVkKENPTkZJR19QUlMyMDApCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTEJKENGR19DUzJfU1RBUlQgfCAoQ09ORklHX1FVQVJUX0NPTlNPTEUgLSAxKTw8NSkKKyNlbGlmIChDT05GSUdfUVVBUlRfQ09OU09MRSA+IDQpICYmIChDT05GSUdfUVVBUlRfQ09OU09MRSA8IDkpCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTEJKENGR19DUzFfU1RBUlQgfCAoQ09ORklHX1FVQVJUX0NPTlNPTEUgLSA1KTw8NSkKKyNlbGlmCisjZXJyb3IgIldyb25nIFFVQVJUIGV4cGFuZGVyIG51bWJlci4iCisjZW5kaWYKKworLyoKKyAqIFNDMTZDNTU0IGNoaXAncyBleHRlcm5hbCBjcnlzdGFsIG9zY2lsbGF0b3IgZnJlcXVlbmN5CisgKiBpcyA3LjM3MjggTUh6CisgKi8KKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLCQk3MzcyODAwCisjZW5kaWYgLyogQ09ORklHX1FVQVJUX0NPTlNPTEUgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFVTQiBzdHVmZgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29jb3RlYS5oIGIvaW5jbHVkZS9jb25maWdzL29jb3RlYS5oCmluZGV4IGExM2Q2YTguLjg5ZTkxNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9vY290ZWEuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb2NvdGVhLmgKQEAgLTE1OCw3ICsxNTgsMTMgQEAKICN1bmRlZglDT05GSUdfU09GVF9JMkMJCQkgICAgLyogSTJDIGJpdC1iYW5nZWQJCSovCiAjZGVmaW5lIENGR19JMkNfU1BFRUQJCTQwMDAwMAkvKiBJMkMgc3BlZWQgYW5kIHNsYXZlIGFkZHJlc3MJKi8KICNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgotI2RlZmluZSBDRkdfSTJDX05PUFJPQkVTICAgIHsweDY5fSAgLyogRG9uJ3QgcHJvYmUgdGhlc2UgYWRkcnMgKi8KKworI2RlZmluZSBDRkdfSTJDX01VTFRJX0VFUFJPTVMKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUgkoMHhhOD4+MSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gMQorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTIDMKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TIDEwCiAKICNkZWZpbmUgQ09ORklHX1BSRUJPT1QJImVjaG87IglcCiAJImVjaG8gVHlwZSBcInJ1biBmbGFzaF9uZnNcIiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlM7IiBcCkBAIC0yMTksNiArMjI1LDkgQEAKICNkZWZpbmUgQ09ORklHX1BIWV9HSUdFCQkxCS8qIEluY2x1ZGUgR2JFIHNwZWVkL2R1cGxleCBkZXRlY3Rpb24gKi8KICNkZWZpbmUgQ09ORklHX1BIWV9SRVNFVCAgICAgICAgMSAgICAgICAvKiByZXNldCBwaHkgdXBvbiBzdGFydHVwICAgICAgICAgKi8KICNkZWZpbmUgQ09ORklHX1BIWV9SRVNFVF9ERUxBWQkxMDAwCisjZGVmaW5lIENGR19SWF9FVEhfQlVGRkVSCTMyCS8qIE51bWJlciBvZiBldGhlcm5ldCByeCBidWZmZXJzICYgZGVzY3JpcHRvcnMgKi8KKworI2RlZmluZSBDT05GSUdfTkVUQ09OU09MRQkJLyogaW5jbHVkZSBOZXRDb25zb2xlIHN1cHBvcnQJKi8KIAogI2RlZmluZSBDT05GSUdfQ09NTUFORFMJICAgICAgIChDT05GSUdfQ01EX0RGTAl8IFwKIAkJCQlDRkdfQ01EX0FTS0VOVgl8IFwKQEAgLTIyNiw2ICsyMzUsNyBAQAogCQkJCUNGR19DTURfREhDUAl8IFwKIAkJCQlDRkdfQ01EX0RJQUcJfCBcCiAJCQkJQ0ZHX0NNRF9FTEYJfCBcCisJCQkJQ0ZHX0NNRF9FRVBST00JfCBcCiAJCQkJQ0ZHX0NNRF9JMkMJfCBcCiAJCQkJQ0ZHX0NNRF9JUlEJfCBcCiAJCQkJQ0ZHX0NNRF9NSUkJfCBcCkBAIC0yNjQsMTUgKzI3NCwxMiBAQAogCiAjZGVmaW5lIENGR19IWgkJCTEwMDAJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcyAqLwogCi0jZGVmaW5lIENPTkZJR19BVVRPX0NPTVBMRVRFCTEgICAgICAgLyogYWRkIGF1dG9jb21wbGV0aW9uIHN1cHBvcnQgICAqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCTEJLyogYWRkIGNvbW1hbmQgbGluZSBoaXN0b3J5CSovCiAjZGVmaW5lIENPTkZJR19MT09QVyAgICAgICAgICAgIDEgICAgICAgLyogZW5hYmxlIGxvb3B3IGNvbW1hbmQgICAgICAgICAqLworI2RlZmluZSBDT05GSUdfTVhfQ1lDTElDICAgICAgICAxICAgICAgIC8qIGVuYWJsZSBtZGMvbXdjIGNvbW1hbmRzICAgICAgKi8KICNkZWZpbmUgQ09ORklHX1pFUk9fQk9PVERFTEFZX0NIRUNLCS8qIGNoZWNrIGZvciBrZXlwcmVzcyBvbiBib290ZGVsYXk9PTAgKi8KICNkZWZpbmUgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUgMQkvKiBpbmNsdWRlIHZlcnNpb24gZW52IHZhcmlhYmxlICovCiAKLSNkZWZpbmUgQ0ZHX1JYX0VUSF9CVUZGRVIJMzIJLyogTnVtYmVyIG9mIGV0aGVybmV0IHJ4IGJ1ZmZlcnMgJiBkZXNjcmlwdG9ycyAqLwotCi0jZGVmaW5lIENPTkZJR19ORVRDT05TT0xFCQkvKiBpbmNsdWRlIE5ldENvbnNvbGUgc3VwcG9ydAkqLwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQQ0kgc3R1ZmYKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9wY3M0NDBlcC5oIGIvaW5jbHVkZS9jb25maWdzL3BjczQ0MGVwLmgKaW5kZXggNTBjMWM0Zi4uMjNiZGZjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3BjczQ0MGVwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3BjczQ0MGVwLmgKQEAgLTYzLDYgKzYzLDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluaXRpYWwgUkFNICYgc3RhY2sgcG9pbnRlciAocGxhY2VkIGluIFNEUkFNKQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0RDQUNIRQkxCQkvKiBkLWNhY2hlIGFzIGluaXQgcmFtCSovCiAjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4NzAwMDAwMDAJCS8qIERDYWNoZSAgICAgICAqLwogI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECSg4IDw8IDEwKQogI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkyNTYJCQkvKiBudW0gYnl0ZXMgaW5pdGlhbCBkYXRhKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9wcG1jN3h4LmggYi9pbmNsdWRlL2NvbmZpZ3MvcHBtYzd4eC5oCmluZGV4IGVhMTU1MjQuLjA3MmI5ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9wcG1jN3h4LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3BwbWM3eHguaApAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiBwcG1jN3h4LmgKICAqIC0tLS0tLS0tLQotICogCisgKgogICogV2luZCBSaXZlciBQUE1DIDd4eC83NHh4IGJvYXJkIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqIAorICoKICAqIEJ5IFJpY2hhcmQgRGFudGVyIChyaWNoYXJkLmRhbnRlckB3aW5kcml2ZXIuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA1IFdpbmQgUml2ZXIgU3lzdGVtcwogICovCkBAIC0xNiwxNSArMTYsMTUgQEAKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAorICoKICAqIFVzZXIgY29uZmlndXJhYmxlIHNldHRpbmdzIC0gTW9kaWZ5IHRvIHlvdXIgcHJlZmVyZW5jZQotICogCisgKgogICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAogLyoKICAqIERlYnVnCi0gKiAKKyAqCiAgKiBERUJVRwkJCS0gRGVmaW5lIHRoaXMgaXMgeW91IHdhbnQgZXh0cmEgZGVidWcgaW5mbwogICogR1RSRUdSRUFECQkJLSBSZXF1aXJlZCB0byBidWlsZCB3aXRoIGRlYnVnCiAgKiBkb19iZGluZm8JCQktIFJlcXVpcmVkIHRvIGJ1aWxkIHdpdGggZGVidWcKQEAgLTM3LDcgKzM3LDcgQEAKIAogLyoKICAqIENQVSB0eXBlCi0gKiAKKyAqCiAgKiBDT05GSUdfN3h4CQkJLSBXZSBoYXZlIGEgNzUwIG9yIDc1NSBDUFUKICAqIENPTkZJR183NHh4CQkJLSBXZSBoYXZlIGEgNzQwMCBDUFUKICAqIENPTkZJR19BTFRJVkVDCQktIFdlIGhhdmUgYWx0aXZlYyBlbmFibGVkIENQVSAob25seSA3NDAwKQpAQCAtNTIsMTEgKzUyLDExIEBACiAKIC8qCiAgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KLSAqIAorICoKICAqIENPTkZJR19DT01NQU5EUwkJLSBMaXN0IG9mIGNvbW1hbmQgc2V0cyB0byBpbmNsdWRlIGluIHNoZWxsCi0gKiAKKyAqCiAgKiBUaGUgZm9sbG93aW5nIGNvbW1hbmQgc2V0cyBoYXZlIGJlZW4gdGVzdGVkIGFuZCBrbm93biB0byB3b3JrOgotICogCisgKgogICogQ0ZHX0NNRF9DQUNIRQkJLSBDYWNoZSBjb250cm9sIGNvbW1hbmRzCiAgKiBDRkdfQ01EX01FTU9SWQkJLSBNZW1vcnkgZGlzcGxheSwgY2hhbmdlIGFuZCB0ZXN0IGNvbW1hbmRzCiAgKiBDRkdfQ01EX0ZMQVNICQktIEVyYXNlIGFuZCBwcm9ncmFtIGZsYXNoCkBAIC05MSw3ICs5MSw3IEBACiAKIC8qCiAgKiBQQ0kgY29uZmlnCi0gKiAKKyAqCiAgKiBDT05GSUdfUENJCQkJCS0gRW5hYmxlIFBDSSBidXMKICAqIENPTkZJR19QQ0lfUE5QCQkJLSBFbmFibGUgUGx1ZyAmIFBsYXkgc3VwcG9ydAogICogQ09ORklHX1BDSV9TQ0FOX1NIT1cJCS0gRW5hYmxlIGRpc3BsYXkgb2YgZGV2aWNlcyBhdCBzdGFydHVwCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogLyoKICAqIE5ldHdvcmsgY29uZmlnCi0gKiAKKyAqCiAgKiBDT05GSUdfTkVUX01VTFRJCQkJLSBTdXBwb3J0IGZvciBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMKICAqIENPTkZJR19FRVBSTzEwMAkJCS0gSW50ZWwgODI1NXggRXRoZXJuZXQgQ29udHJvbGxlcgogICogQ09ORklHX0VFUFJPMTAwX1NST01fV1JJVEUgLSBFbmFibGUgd3JpdGluZyB0byBuZXR3b3JrIGNhcmQgUk9NCkBAIC0xMTcsMTggKzExNywxOCBAQAogCiAvKgogICogRW5hYmxlIGV4dHJhIGluaXQgZnVuY3Rpb25zCi0gKiAKKyAqCiAgKiBDT05GSUdfTUlTQ19JTklUX0YJCS0gQ2FsbCBwcmUtcmVsb2NhdGlvbiBpbml0IGZ1bmN0aW9ucwogICogQ09ORklHX01JU0NfSU5JVF9SCQktIENhbGwgcG9zdCByZWxvY2F0aW9uIGluaXQgZnVuY3Rpb25zCiAgKi8KIAogI3VuZGVmCUNPTkZJR19NSVNDX0lOSVRfRgotI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IgCisjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgogCiAKIC8qCiAgKiBCb290IGNvbmZpZwotICogCisgKgogICogQ09ORklHX0JPT1RDT01NQU5ECQktIENvbW1hbmQocykgdG8gZXhlY3V0ZSB0byBhdXRvLWJvb3QKICAqIENPTkZJR19CT09UREVMQVkJCQktIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIGF1dG8tYm9vdCAoaW4gc2VjKQogICovCkBAIC0xNDIsOSArMTQyLDkgQEAKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIAorICoKICAqIEJvYXJkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgLSBZb3Ugc2hvdWxkIG5vdCBuZWVkIHRvIG1vZGlmeSB0aGVzZQotICogCisgKgogICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIApAQCAtMTU0LDkgKzE1NCw5IEBACiAKIC8qCiAgKiBNZW1vcnkgbWFwCi0gKiAKKyAqCiAgKiBUaGlzIGJvYXJkIHJ1bnMgaW4gYSBzdGFuZGFyZCBDSFJQIChNYXAtQikgY29uZmlndXJhdGlvbi4KLSAqIAorICoKICAqCVR5cGUJCVN0YXJ0CQlFbmQJCQlTaXplCVdpZHRoCUNoaXAgU2VsCiAgKgktLS0tLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0KICAqCVNEUkFNCQkweDAwMDAwMDAwCTB4MDQwMDAwMDAJNjRNQgk2NGIJCVNEUkFNQ1MwCkBAIC0xNjQsOSArMTY0LDkgQEAKICAqCVVBUlQJCTB4N0MwMDAwMDAJCQkJCQlSQ1MyCiAgKglNYWlsYm94CQkweEZGMDAwMDAwCQkJCQkJUkNTMQogICoJRmxhc2gJCTB4RkZDMDAwMDAJMHhGRkZGRkZGRgk0TUIJNjRiCQlSQ1MwCi0gKiAKKyAqCiAgKiBGbGFzaCBzZWN0b3JzIGFyZSBsYWlkIG91dCBhcyBmb2xsb3dzLgotICogCisgKgogICoJU2VjdG9yCVN0YXJ0CQlFbmQJCQlTaXplCUNvbW1lbnRzCiAgKgktLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0KICAqCSAwCQkweEZGQzAwMDAwCTB4RkZDM0ZGRkYJMjU2S0IKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiAvKgogICogU0RSQU0gY29uZmlnIC0gc2VlIG1lbW9yeSBtYXAgZGV0YWlscyBhYm92ZS4KLSAqIAorICoKICAqIENGR19TRFJBTV9CQVNFCQkJLSBTdGFydCBhZGRyZXNzIG9mIFNEUkFNLCB0aGlzIF9tdXN0XyBiZSB6ZXJvIQogICogQ0ZHX1NEUkFNX1NJWkUJCQktIFRvdGFsIHNpemUgb2YgY29udGlndW91cyBTRFJBTSBiYW5rKHMpCiAgKi8KQEAgLTIwMiw5ICsyMDIsOSBAQAogI2RlZmluZSBDRkdfU0RSQU1fU0laRQkJCTB4MDQwMDAwMDAKIAogCi0vKiAKKy8qCiAgKiBGbGFzaCBjb25maWcgLSBzZWUgbWVtb3J5IG1hcCBkZXRhaWxzIGFib3ZlLgotICogCisgKgogICogQ0ZHX0ZMQVNIX0JBU0UJCQktIFN0YXJ0IGFkZHJlc3Mgb2YgZmxhc2ggbWVtb3J5CiAgKiBDRkdfRkxBU0hfU0laRQkJCS0gVG90YWwgc2l6ZSBvZiBjb250aWd1b3VzIGZsYXNoIG1lbQogICogQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCS0gRXJhc2UgdGltZW91dCBpbiBtcwpAQCAtMjIzLDcgKzIyMyw3IEBACiAKIC8qCiAgKiBNb25pdG9yIGNvbmZpZyAtIHNlZSBtZW1vcnkgbWFwIGRldGFpbHMgYWJvdmUKLSAqIAorICoKICAqIENGR19NT05JVE9SX0JBU0UJCQktIEJhc2UgYWRkcmVzcyBvZiBtb25pdG9yIGNvZGUKICAqIENGR19NQUxMT0NfTEVOCQkJLSBTaXplIG9mIG1hbGxvYyBwb29sICgxMjhLQikKICAqLwpAQCAtMjM0LDcgKzIzNCw3IEBACiAKIC8qCiAgKiBDb21tYW5kIHNoZWxsIHNldHRpbmdzCi0gKiAKKyAqCiAgKiBDRkdfQkFSR1NJWkUJCQktIEJvb3QgQXJndW1lbnQgYnVmZmVyIHNpemUKICAqIENGR19CT09UTUFQU1oJCS0gU2l6ZSBvZiBhcHAncyBtYXBwZWQgUkFNIGF0IGJvb3QgKExpbnV4PThNQikKICAqIENGR19DQlNJWkUJCQktIENvbnNvbGUgQnVmZmVyIChpbnB1dCkgc2l6ZQpAQCAtMjYxLDEwICsyNjEsMTAgQEAKIAogLyoKICAqIEVudmlyb25tZW50IGNvbmZpZyAtIHNlZSBtZW1vcnkgbWFwIGRldGFpbHMgYWJvdmUKLSAqIAorICoKICAqIENGR19FTlZfSVNfSU5fRkxBU0gJCS0gVGhlIGVudiB2YXJpYWJsZXMgYXJlIHN0b3JlZCBpbiBmbGFzaAogICogQ0ZHX0VOVl9BRERSCQkJLSBBZGRyZXNzIG9mIHRoZSBzZWN0b3IgY29udGFpbmluZyBlbnYgdmFycwotICogQ0ZHX0VOVl9TSVpFCQkJLSBBbW1vdW50IG9mIFJBTSBmb3IgZW52IHZhcnMgKHVzZWQgdG8gc2F2ZSBSQU0sIDRLQikgCisgKiBDRkdfRU5WX1NJWkUJCQktIEFtbW91bnQgb2YgUkFNIGZvciBlbnYgdmFycyAodXNlZCB0byBzYXZlIFJBTSwgNEtCKQogICogQ0ZHX0VOVl9TRUNUX1NJWkUJCS0gU2l6ZSBvZiBzZWN0b3IgY29udGFpbmluZyBlbnYgdmFycyAoMzJLQikKICAqLwogCkBAIC0yODIsNyArMjgyLDcgQEAKICAqIFNpbmNlIHRoZSBtYWluIHN5c3RlbSBSQU0gaXMgaW5pdGlhbGlzZWQgdmVyeSBlYXJseSwgd2UgcGxhY2UgdGhlIElOSVRfUkFNCiAgKiBpbiB0aGUgbWFpbiBzeXN0ZW0gUkFNIGp1c3QgYWJvdmUgdGhlIGV4Y2VwdGlvbiB2ZWN0b3JzLiBUaGUgY29udGVudHMgYXJlCiAgKiBjb3BpZWQgdG8gdG9wIG9mIFJBTSBieSB0aGUgaW5pdCBjb2RlLgotICogCisgKgogICogQ0ZHX0lOSVRfUkFNX0FERFIJCS0gQWRkcmVzcyBvZiBJbml0IFJBTSwgYWJvdmUgZXhjZXB0aW9uIHZlY3QKICAqIENGR19JTklUX1JBTV9FTkQJCQktIFNpemUgb2YgSW5pdCBSQU0KICAqIENGR19HQkxfREFUQV9TSVpFCQktIEFtbW91bnQgb2YgUkFNIHRvIHJlc2VydmUgZm9yIGdsb2JhbCBkYXRhCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogLyoKICAqIEluaXRpYWwgQkFUIGNvbmZpZwotICogCisgKgogICogQkFUMAktIFN5c3RlbSBTRFJBTQogICogQkFUMSAtIExFRCdzIGFuZCBTZXJpYWwgUG9ydAogICogQkFUMiAtIFBDSSBNZW1vcnkKQEAgLTMyNyw3ICszMjcsNyBAQAogCiAvKgogICogQ2FjaGUgY29uZmlnCi0gKiAKKyAqCiAgKiBDRkdfQ0FDSEVMSU5FX1NJWkUJCS0gU2l6ZSBvZiBhIGNhY2hlIGxpbmUgKENQVSBzcGVjaWZpYykKICAqIENGR19MMgkJCQkJLSBMMiBjYWNoZSBlbmFibGVkIGlmIGRlZmluZWQKICAqIEwyX0lOSVQJCQkJCS0gTDIgY2FjaGUgaW5pdCBmbGFncwpAQCAtMzQyLDcgKzM0Miw3IEBACiAKIC8qCiAgKiBDbG9ja3MgY29uZmlnCi0gKiAKKyAqCiAgKiBDRkdfQlVTX0haCQkJCS0gQnVzIGNsb2NrIGZyZXF1ZW5jeSBpbiBIegogICogQ0ZHX0JVU19DTEsJCQkJLSBBcyBhYm92ZSAoPykKICAqIENGR19IWgkJCQkJLSBEZWNyZW1lbnRlciBmcmVxIGluIEh6CkBAIC0zNTUsNyArMzU1LDcgQEAKIAogLyoKICAqIFNlcmlhbCBwb3J0IGNvbmZpZwotICogCisgKgogICogQ0ZHX0JBVURSQVRFX1RBQkxFCQktIExpc3Qgb2YgdmFsaWQgYmF1ZCByYXRlcwogICogQ0ZHX05TMTY1NTAJCQkJLSBJbmNsdWRlIHRoZSBOUzE2NTUwIGRyaXZlcgogICogQ0ZHX05TMTY1NTBfU0VSSUFMCQktIEluY2x1ZGUgdGhlIHNlcmlhbCAod3JhcHBlcikgZHJpdmVyCkBAIC0zOTgsNyArMzk4LDcgQEAKIAogLyoKICAqIEV4dHJhIGluaXQgZnVuY3Rpb25zCi0gKiAKKyAqCiAgKiBDRkdfQk9BUkRfQVNNX0lOSVQJCS0gQ2FsbCBhc3NlbWJseSBpbml0IGNvZGUKICAqLwogCkBAIC00MDcsMTEgKzQwNywxMSBAQAogCiAvKgogICogQm9vdCBmbGFncwotICogCisgKgogICogQk9PVEZMQUdfQ09MRAkJCS0gSW5kaWNhdGVzIGEgcG93ZXItb24gYm9vdAogICogQk9PVEZMQUdfV0FSTQkJCS0gSW5kaWNhdGVzIGEgc29mdHdhcmUgcmVzZXQKICAqLwotIAorCiAjZGVmaW5lIEJPT1RGTEFHX0NPTEQJCQkweDAxCiAjZGVmaW5lIEJPT1RGTEFHX1dBUk0JCQkweDAyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zYmMyNDEweC5oIGIvaW5jbHVkZS9jb25maWdzL3NiYzI0MTB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY2ZjdiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9zYmMyNDEweC5oCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqIEdhcnkgSmVubmVqb2huIDxnakBkZW54LmRlPgorICogRGF2aWQgTXVlbGxlciA8ZC5tdWVsbGVyQGVsc29mdC5jaD4KKyAqCisgKiBNb2RpZmllZCBmb3IgdGhlIGZyaWVuZGx5LWFybSBTQkMtMjQxMFggYnkKKyAqIChDKSBDb3B5cmlnaHQgMjAwNQorICogSmluSHVhIEx1bywgR3VhbmdEb25nIExpbnV4IENlbnRlciwgPGx1by5qaW5odWFAZ2QtbGludXguY29tPgorICoKKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIGZyaWVuZGx5LWFybSBTQkMtMjQxMFggYm9hcmQuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIElmIHdlIGFyZSBkZXZlbG9waW5nLCB3ZSBtaWdodCB3YW50IHRvIHN0YXJ0IGFybWJvb3QgZnJvbSByYW0KKyAqIHNvIHdlIE1VU1QgTk9UIGluaXRpYWxpemUgY3JpdGljYWwgcmVncyBsaWtlIG1lbS10aW1pbmcgLi4uCisgKi8KKyN1bmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCS8qIHVuZGVmIGZvciBkZXZlbG9waW5nICovCisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICogKGVhc3kgdG8gY2hhbmdlKQorICovCisjZGVmaW5lIENPTkZJR19BUk05MjBUCQkxCS8qIFRoaXMgaXMgYW4gQVJNOTIwVCBDb3JlCSovCisjZGVmaW5lCUNPTkZJR19TM0MyNDEwCQkxCS8qIGluIGEgU0FNU1VORyBTM0MyNDEwIFNvQyAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NCQzI0MTBYCQkxCS8qIG9uIGEgZnJpZW5kbHktYXJtIFNCQy0yNDEwWCBCb2FyZCAgKi8KKworLyogaW5wdXQgY2xvY2sgb2YgUExMICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMTIwMDAwMDAvKiB0aGUgU0JDMjQxMFggaGFzIDEyTUh6IGlucHV0IGNsb2NrICovCisKKworI2RlZmluZSBVU0VfOTIwVF9NTVUJCTEKKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAqLworCisvKgorICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisjZGVmaW5lIENPTkZJR19EUklWRVJfQ1M4OTAwCTEJLyogd2UgaGF2ZSBhIENTODkwMCBvbi1ib2FyZCAqLworI2RlZmluZSBDUzg5MDBfQkFTRQkJMHgxOTAwMDMwMAorI2RlZmluZSBDUzg5MDBfQlVTMTYJCTEgLyogdGhlIExpbnV4IGRyaXZlciBkb2VzIGFjY2Vzc2VzIGFzIHNob3J0cyAqLworCisvKgorICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfU0VSSUFMMSAgICAgICAgICAxCS8qIHdlIHVzZSBTRVJJQUwgMSBvbiBTQkMyNDEwWCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSVEMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lCUNPTkZJR19SVENfUzNDMjRYMAkxCisKKy8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbW1hbmQgZGVmaW5pdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMgXAorCQkJKENPTkZJR19DTURfREZMCSB8IFwKKwkJCUNGR19DTURfQ0FDSEUJIHwgXAorCQkJLypDRkdfQ01EX05BTkQJIHwqLyBcCisJCQkvKkNGR19DTURfRUVQUk9NIHwqLyBcCisJCQkvKkNGR19DTURfSTJDCSB8Ki8gXAorCQkJLypDRkdfQ01EX1VTQgkgfCovIFwKKwkJCUNGR19DTURfUkVHSU5GTyAgfCBcCisJCQlDRkdfQ01EX0RBVEUJIHwgXAorCQkJQ0ZHX0NNRF9QSU5HICAgICB8IFwKKwkJCUNGR19DTURfREhDUCAgICAgfCBcCisJCQlDRkdfQ01EX0VMRikKKworLyogdGhpcyBtdXN0IGJlIGluY2x1ZGVkIEFGVEVSIHRoZSBkZWZpbml0aW9uIG9mIENPTkZJR19DT01NQU5EUyAoaWYgYW55KSAqLworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgICAgCSJjb25zb2xlPXR0eVNBQzAgcm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMC4xOi9mcmllbmRseS1hcm0vcm9vdGZzX25ldHNlcnYgaXA9MTkyLjE2OC4wLjY5OjE5Mi4xNjguMC4xOjE5Mi4xNjguMC4xOjI1NS4yNTUuMjU1LjA6ZGViaWFuOmV0aDA6b2ZmIgorI2RlZmluZSBDT05GSUdfRVRIQUREUgkgICAgICAgIDA4OjAwOjNlOjI2OjBhOjViCisjZGVmaW5lIENPTkZJR19ORVRNQVNLICAgICAgICAgIDI1NS4yNTUuMjU1LjAKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjY5CisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjEKKy8qI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJImVsaW5vcy1sYXJ0IiAqLworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImRoY3A7IGJvb3RtIgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMTE1MjAwCQkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCAqLworLyogd2hhdCdzIHRoaXMgPyBpdCdzIG5vdCB1c2VkIGFueXdoZXJlICovCisjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkxCQkvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KKyNlbmRpZgorCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUJQ0ZHX1BST01QVAkJIlsgfmxqaEBHRExDIF0jICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworI2RlZmluZQlDRkdfQ0JTSVpFCQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZQlDRkdfTUFYQVJHUwkJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCisjZGVmaW5lIENGR19CQVJHU0laRQkJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgzMDAwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgzM0YwMDAwMAkvKiA2MyBNQiBpbiBEUkFNCSovCisKKyN1bmRlZiAgQ0ZHX0NMS1NfSU5fSFoJCS8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KKworI2RlZmluZQlDRkdfTE9BRF9BRERSCQkweDMzMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzCSovCisKKy8qIHRoZSBQV00gVEltZXIgNCB1c2VzIGEgY291bnRlciBvZiAxNTYyNSBmb3IgMTAgbXMsIHNvIHdlIG5lZWQgKi8KKy8qIGl0IHRvIHdyYXAgMTAwIHRpbWVzICh0b3RhbCAxNTYyNTAwKSB0byBnZXQgMSBzZWMuICovCisjZGVmaW5lCUNGR19IWgkJCTE1NjI1MDAKKworLyogdmFsaWQgYmF1ZHJhdGVzICovCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YWNrIHNpemVzCisgKgorICogVGhlIHN0YWNrIHNpemVzIGFyZSBzZXQgdXAgaW4gc3RhcnQuUyB1c2luZyB0aGUgc2V0dGluZ3MgYmVsb3cKKyAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgxMjgqMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRCSg0KjEwMjQpCS8qIElSUSBzdGFjayAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0ZJUQkoNCoxMDI0KQkvKiBGSVEgc3RhY2sgKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQaHlzaWNhbCBNZW1vcnkgTWFwCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQkgICAvKiB3ZSBoYXZlIDEgYmFuayBvZiBEUkFNICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMQkJMHgzMDAwMDAwMCAvKiBTRFJBTSBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDQwMDAwMDAgLyogNjQgTUIgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4MDAwMDAwMDAgLyogRmxhc2ggQmFuayAjMSAqLworCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQlQSFlTX0ZMQVNIXzEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggYW5kIGVudmlyb25tZW50IG9yZ2FuaXphdGlvbgorICovCisvKiAjZGVmaW5lIENPTkZJR19BTURfTFY0MDAJMQkvXCogdW5jb21tZW50IHRoaXMgaWYgeW91IGhhdmUgYSBMVjQwMCBmbGFzaCAqXC8gKi8KKworI2RlZmluZSBDT05GSUdfQU1EX0xWODAwCTEJLyogdW5jb21tZW50IHRoaXMgaWYgeW91IGhhdmUgYSBMVjgwMCBmbGFzaCAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworCisjaWZkZWYgQ09ORklHX0FNRF9MVjgwMAorI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJCTB4MDAxMDAwMDAgLyogMU1CICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkoMTkpCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfRkxBU0hfQkFTRSArIDB4MEYwMDAwKSAvKiBhZGRyIG9mIGVudmlyb25tZW50ICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BTURfTFY0MDAKKyNkZWZpbmUgUEhZU19GTEFTSF9TSVpFCQkweDAwMDgwMDAwIC8qIDUxMktCICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkoMTEpCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfRkxBU0hfQkFTRSArIDB4MDcwMDAwKSAvKiBhZGRyIG9mIGVudmlyb25tZW50ICovCisjZW5kaWYKKworLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCSg1KkNGR19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJKDUqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisjZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MTAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTkFORCBmbGFzaCBzZXR0aW5ncworICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkxCS8qIE1heCBudW1iZXIgb2YgTkFORCBkZXZpY2VzCQkqLworI2RlZmluZSBTRUNUT1JTSVpFIDUxMgorCisjZGVmaW5lIEFERFJfQ09MVU1OIDEKKyNkZWZpbmUgQUREUl9QQUdFIDIKKyNkZWZpbmUgQUREUl9DT0xVTU5fUEFHRSAzCisKKyNkZWZpbmUgTkFORF9DaGlwSURfVU5LTk9XTiAJMHgwMAorI2RlZmluZSBOQU5EX01BWF9GTE9PUlMgMQorI2RlZmluZSBOQU5EX01BWF9DSElQUyAxCisKKyNkZWZpbmUgTkFORF9XQUlUX1JFQURZKG5hbmQpCU5GX1dhaXRSQigpCisjZGVmaW5lIE5BTkRfRElTQUJMRV9DRShuYW5kKQlORl9TZXRDRShORkNFX0hJR0gpCisjZGVmaW5lIE5BTkRfRU5BQkxFX0NFKG5hbmQpCU5GX1NldENFKE5GQ0VfTE9XKQorI2RlZmluZSBXUklURV9OQU5EX0NPTU1BTkQoZCwgYWRyKQlORl9DbWQoZCkKKyNkZWZpbmUgV1JJVEVfTkFORF9DT01NQU5EVyhkLCBhZHIpCU5GX0NtZFcoZCkKKyNkZWZpbmUgV1JJVEVfTkFORF9BRERSRVNTKGQsIGFkcikJTkZfQWRkcihkKQorI2RlZmluZSBXUklURV9OQU5EKGQsIGFkcikJCU5GX1dyaXRlKGQpCisjZGVmaW5lIFJFQURfTkFORChhZHIpCQkJTkZfUmVhZCgpCisvKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgTk9QJ3MgYmVjYXVzZSBTM0MyNFgwIGhhbmRsZXMgdGhpcyBpbiBoYXJkd2FyZSAqLworI2RlZmluZSBOQU5EX0NUTF9DTFJBTEUobmFuZHB0cikKKyNkZWZpbmUgTkFORF9DVExfU0VUQUxFKG5hbmRwdHIpCisjZGVmaW5lIE5BTkRfQ1RMX0NMUkNMRShuYW5kcHRyKQorI2RlZmluZSBOQU5EX0NUTF9TRVRDTEUobmFuZHB0cikKKy8qICN1bmRlZiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFICovCisjZW5kaWYJLyogQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EICovCisKKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRworCisjZGVmaW5lIENGR19IVVNIX1BBUlNFUgorI2RlZmluZSBDRkdfUFJPTVBUX0hVU0hfUFMyICAgIj4gIgorCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcKKworI2lmZGVmIENPTkZJR19DTURMSU5FX0VESVRJTkcKKyN1bmRlZiBDT05GSUdfQVVUT19DT01QTEVURQorI2Vsc2UKKyNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUKKyNlbmRpZgorCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NlcXVvaWEuaCBiL2luY2x1ZGUvY29uZmlncy9zZXF1b2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5NzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9zZXF1b2lhLmgKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIEphY3F1ZWxpbmUgUGlyYS1GZXJyaW9sLCBBTUNDL0lCTSwganBpcmEtZmVycmlvbEBmci5pYm0uY29tCisgKiBBbGFpbiBTYXVyZWwsICAgICAgICAgICAgQU1DQy9JQk0sIGFsYWluLnNhdXJlbEBmci5pYm0uY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc2VxdW9pYS5oIC0gY29uZmlndXJhdGlvbiBmb3IgU2VxdW9pYSBib2FyZCAoUG93ZXJQQzQ0MEVQeCkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDT05GSUdfU0VRVU9JQQkJMQkJLyogQm9hcmQgaXMgU2VxdW9pYQkqLworI2RlZmluZSBDT05GSUdfNDQwRVBYCQkxCQkvKiBTcGVjaWZpYyBQUEM0NDBFUHgJKi8KKyNkZWZpbmUgQ09ORklHXzR4eAkJMQkJLyogLi4uIFBQQzR4eCBmYW1pbHkJKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DTEtfRlJFUQkzMzMzMzMzMwkvKiBleHRlcm5hbCBmcmVxIHRvIHBsbAkqLworCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YgMQkJLyogQ2FsbCBib2FyZF9lYXJseV9pbml0X2YgKi8KKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCTEJCS8qIENhbGwgbWlzY19pbml0X3IJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQmFzZSBhZGRyZXNzZXMgLS0gTm90ZSB0aGVzZSBhcmUgZWZmZWN0aXZlIGFkZHJlc3NlcyB3aGVyZSB0aGUKKyAqIGFjdHVhbCByZXNvdXJjZXMgZ2V0IG1hcHBlZCAobm90IHBoeXNpY2FsIGFkZHJlc3NlcykKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJKDM4NCAqIDEwMjQpCS8qIFJlc2VydmUgMzg0IGtCIGZvciBNb25pdG9yCSovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMjU2ICogMTAyNCkJLyogUmVzZXJ2ZSAyNTYga0IgZm9yIG1hbGxvYygpCSovCisKKyNkZWZpbmUgQ0ZHX0JPT1RfQkFTRV9BRERSCTB4ZjAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAJLyogX211c3RfIGJlIDAJCSovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweGZlMDAwMDAwCS8qIHN0YXJ0IG9mIEZMQVNICSovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCisjZGVmaW5lIENGR19OQU5EX0FERFIJCTB4ZDAwMDAwMDAgICAgICAvKiBOQU5EIEZsYXNoCQkqLworI2RlZmluZSBDRkdfT0NNX0JBU0UJCTB4ZTAwMTAwMDAgICAgICAvKiBvY20JCQkqLworI2RlZmluZSBDRkdfUENJX0JBU0UJCTB4ZTAwMDAwMDAgICAgICAvKiBJbnRlcm5hbCBQQ0kgcmVncwkqLworI2RlZmluZSBDRkdfUENJX01FTUJBU0UJCTB4ODAwMDAwMDAJLyogbWFwcGVkIHBjaSBtZW1vcnkJKi8KKyNkZWZpbmUgQ0ZHX1BDSV9NRU1CQVNFMQlDRkdfUENJX01FTUJBU0UgICsgMHgxMDAwMDAwMAorI2RlZmluZSBDRkdfUENJX01FTUJBU0UyCUNGR19QQ0lfTUVNQkFTRTEgKyAweDEwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lfTUVNQkFTRTMJQ0ZHX1BDSV9NRU1CQVNFMiArIDB4MTAwMDAwMDAKKworLyogRG9uJ3QgY2hhbmdlIGVpdGhlciBvZiB0aGVzZSAqLworI2RlZmluZSBDRkdfUEVSSVBIRVJBTF9CQVNFCTB4ZWY2MDAwMDAJLyogaW50ZXJuYWwgcGVyaXBoZXJhbHMJKi8KKworI2RlZmluZSBDRkdfVVNCMkQwX0JBU0UJCTB4ZTAwMDAxMDAKKyNkZWZpbmUgQ0ZHX1VTQl9ERVZJQ0UJCTB4ZTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1VTQl9IT1NUCQkweGUwMDAwNDAwCisjZGVmaW5lIENGR19CQ1NSX0JBU0UJCTB4YzAwMDAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW5pdGlhbCBSQU0gJiBzdGFjayBwb2ludGVyCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogNDQwRVB4LzQ0MEdSeCBoYXZlIDE2S0Igb2YgaW50ZXJuYWwgU1JBTSwgc28gbm8gbmVlZCBmb3IgRC1DYWNoZQkqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fT0NNCTEJCS8qIE9DTSBhcyBpbml0IHJhbQkqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUglDRkdfT0NNX0JBU0UJLyogT0NNCQkJKi8KKworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECSg0IDw8IDEwKQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkyNTYJCS8qIG51bSBieXRlcyBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTZXJpYWwgUG9ydAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0ZHX0VYVF9TRVJJQUxfQ0xPQ0sJMTEwNTkyMDAJLyogZXh0LiAxMS4wNTlNSHogY2xrCSovCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19TRVJJQUxfTVVMVEkgICAgIDEKKy8qIGRlZmluZSB0aGlzIGlmIHlvdSB3YW50IGNvbnNvbGUgb24gVUFSVDEgKi8KKyN1bmRlZiBDT05GSUdfVUFSVDFfQ09OU09MRQorCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQkJCQkJCVwKKwl7MzAwLCA2MDAsIDEyMDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMH0KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRW52aXJvbm1lbnQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgIWRlZmluZWQoQ09ORklHX05BTkRfVV9CT09UKSAmJiAhZGVmaW5lZChDT05GSUdfTkFORF9TUEwpCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0ggICAgIDEJLyogdXNlIEZMQVNIIGZvciBlbnZpcm9ubWVudCB2YXJzCSovCisjZWxzZQorI2RlZmluZSBDRkdfRU5WX0lTX0lOX05BTkQJMQkvKiB1c2UgTkFORCBmb3IgZW52aXJvbm1lbnQgdmFycwkqLworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIHJlbGF0ZWQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogVGhlIGZsYXNoIGlzIENGSSBjb21wYXRpYmxlCSovCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogVXNlIGNvbW1vbiBDRkkgZHJpdmVyCSovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfRkxBU0hfQkFTRSB9CisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNTEyCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLworCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKQkqLworI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgkxCS8qIHVzZSBoYXJkd2FyZSBmbGFzaCBwcm90ZWN0aW9uCSovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8JCS8qIHByaW50ICdFJyBmb3IgZW1wdHkgc2VjdG9yIG9uIGZsaW5mbyAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAkxCS8qIGRvbid0IHdhcm4gdXBvbiB1bmtub3duIGZsYXNoCSovCisKKyNpZmRlZiBDRkdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAgCS8qIHNpemUgb2Ygb25lIGNvbXBsZXRlIHNlY3RvcgkqLworI2RlZmluZSBDRkdfRU5WX0FERFIJCSgoLUNGR19NT05JVE9SX0xFTiktQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZGVmaW5lCUNGR19FTlZfU0laRQkJMHgyMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCisKKy8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUmVkdW5kYW50IEVudmlyb25tZW50IFNlY3RvcgkqLworI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFItQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZGVmaW5lIENGR19FTlZfU0laRV9SRURVTkQJKENGR19FTlZfU0laRSkKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBOQU5EIEZMQVNICisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCTEKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJQ0ZHX05BTkRfQUREUgorCisvKgorICogSVBMIChJbml0aWFsIFByb2dyYW0gTG9hZGVyLCBpbnRlZ3JhdGVkIGluc2lkZSBDUFUpCisgKiBXaWxsIGxvYWQgZmlyc3QgNGsgZnJvbSBOQU5EIChTUEwpIGludG8gY2FjaGUgYW5kIGV4ZWN1dGUgaXQgZnJvbSB0aGVyZS4KKyAqCisgKiBTUEwgKFNlY29uZGFyeSBQcm9ncmFtIExvYWRlcikKKyAqIFdpbGwgbG9hZCBzcGVjaWFsIFUtQm9vdCB2ZXJzaW9uIChOVUIpIGZyb20gTkFORCBhbmQgZXhlY3V0ZSBpdC4gVGhpcyBTUEwKKyAqIGhhcyB0byBmaXQgaW50byA0a0J5dGUuIEl0IHNldHMgdXAgdGhlIENQVSBhbmQgY29uZmlndXJlcyB0aGUgU0RSQU0KKyAqIGNvbnRyb2xsZXIgYW5kIHRoZSBOQU5EIGNvbnRyb2xsZXIgc28gdGhhdCB0aGUgc3BlY2lhbCBVLUJvb3QgaW1hZ2UgY2FuIGJlCisgKiBsb2FkZWQgZnJvbSBOQU5EIHRvIFNEUkFNLgorICoKKyAqIE5VQiAoTkFORCBVLUJvb3QpCisgKiBUaGlzIE5BTkQgVS1Cb290IChOVUIpIGlzIGEgc3BlY2lhbCBVLUJvb3QgdmVyc2lvbiB3aGljaCBjYW4gYmUgc3RhcnRlZAorICogZnJvbSBSQU0uIFRoZXJlZm9yZSBpdCBtdXN0bid0IChyZS0pY29uZmlndXJlIHRoZSBTRFJBTSBjb250cm9sbGVyLgorICoKKyAqIE9uIDQ0MEVQeCB0aGUgU1BMIGlzIGNvcGllZCB0byBTRFJBTSBiZWZvcmUgdGhlIE5BTkQgY29udHJvbGxlciBpcworICogc2V0IHVwLiBXaGlsZSBzdGlsbCBydW5uaW5nIGZyb20gY2FjaGUsIEkgZXhwZXJpZW5jZWQgcHJvYmxlbXMgYWNjZXNzaW5nCisgKiB0aGUgTkFORCBjb250cm9sbGVyLglzciAtIDIwMDYtMDgtMjUKKyAqLworI2RlZmluZSBDRkdfTkFORF9CT09UX1NQTF9TUkMJMHhmZmZmZjAwMAkvKiBTUEwgbG9jYXRpb24JCQkqLworI2RlZmluZSBDRkdfTkFORF9CT09UX1NQTF9TSVpFCSg0IDw8IDEwKQkvKiBTUEwgc2l6ZQkJCSovCisjZGVmaW5lIENGR19OQU5EX0JPT1RfU1BMX0RTVAkoQ0ZHX09DTV9CQVNFICsgKDEyIDw8IDEwKSkgLyogQ29weSBTUEwgaGVyZQkqLworI2RlZmluZSBDRkdfTkFORF9VX0JPT1RfRFNUCTB4MDEwMDAwMDAJLyogTG9hZCBOVUIgdG8gdGhpcyBhZGRyCSovCisjZGVmaW5lIENGR19OQU5EX1VfQk9PVF9TVEFSVAlDRkdfTkFORF9VX0JPT1RfRFNUIC8qIFN0YXJ0IE5VQiBmcm9tIHRoaXMgYWRkcgkqLworI2RlZmluZSBDRkdfTkFORF9CT09UX1NQTF9ERUxUQQkoQ0ZHX05BTkRfQk9PVF9TUExfU1JDIC0gQ0ZHX05BTkRfQk9PVF9TUExfRFNUKQorCisvKgorICogRGVmaW5lIHRoZSBwYXJ0aXRpb25pbmcgb2YgdGhlIE5BTkQgY2hpcCAob25seSBSQU0gVS1Cb290IGlzIG5lZWRlZCBoZXJlKQorICovCisjZGVmaW5lIENGR19OQU5EX1VfQk9PVF9PRkZTCSgxNiA8PCAxMCkJLyogT2Zmc2V0IHRvIFJBTSBVLUJvb3QgaW1hZ2UJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfVV9CT09UX1NJWkUJKDM4NCA8PCAxMCkJLyogU2l6ZSBvZiBSQU0gVS1Cb290IGltYWdlCSovCisKKy8qCisgKiBOb3cgdGhlIE5BTkQgY2hpcCBoYXMgdG8gYmUgZGVmaW5lZCAobm8gYXV0b2RldGVjdGlvbiB1c2VkISkKKyAqLworI2RlZmluZSBDRkdfTkFORF9QQUdFX1NJWkUJKDUxMikJCS8qIE5BTkQgY2hpcCBwYWdlIHNpemUJCSovCisjZGVmaW5lIENGR19OQU5EX0JMT0NLX1NJWkUJKDE2IDw8IDEwKQkvKiBOQU5EIGNoaXAgYmxvY2sgc2l6ZQkJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfUEFHRV9DT1VOVAkoMzIpCQkvKiBOQU5EIGNoaXAgcGFnZSBjb3VudAkJKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQkFEX0JMT0NLX1BPUwkoNSkJCS8qIExvY2F0aW9uIG9mIGJhZCBibG9jayBtYXJrZXIJKi8KKyN1bmRlZiBDRkdfTkFORF80X0FERFJfQ1lDTEUJCQkvKiBObyBmb3VydGggYWRkciB1c2VkICg8PTMyTUIpCSovCisKKyNpZmRlZiBDRkdfRU5WX0lTX0lOX05BTkQKKy8qCisgKiBGb3IgTkFORCBib290aW5nIHRoZSBlbnZpcm9ubWVudCBpcyBlbWJlZGRlZCBpbiB0aGUgVS1Cb290IGltYWdlLiBQbGVhc2UgdGFrZQorICogbG9vayBhdCB0aGUgZmlsZSBib2FyZC9hbWNjL3NlcXVvaWEvdS1ib290LW5hbmQubGRzIGZvciBkZXRhaWxzLgorICovCisjZGVmaW5lIENGR19FTlZfU0laRQkJQ0ZHX05BTkRfQkxPQ0tfU0laRQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJKENGR19OQU5EX1VfQk9PVF9PRkZTICsgQ0ZHX0VOVl9TSVpFKQorI2RlZmluZSBDRkdfRU5WX09GRlNFVF9SRURVTkQJKENGR19FTlZfT0ZGU0VUICsgQ0ZHX0VOVl9TSVpFKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEREUiBTRFJBTQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0ZHX01CWVRFU19TRFJBTSAgICAgICAgKDI1NikgICAgLyogMjU2TUIJCQkqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJMkMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQwkJMQkJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydAkqLworI3VuZGVmCUNPTkZJR19TT0ZUX0kyQwkJCQkvKiBJMkMgYml0LWJhbmdlZAkJKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRAkJNDAwMDAwCQkvKiBJMkMgc3BlZWQgYW5kIHNsYXZlIGFkZHJlc3MJKi8KKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRQkJMHg3RgorCisjZGVmaW5lIENGR19JMkNfTVVMVElfRUVQUk9NUworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCSgweGE4Pj4xKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAxCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgMworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKworLyogSTJDIFNZU01PTiAoTE03NSwgQUQ3NDE0IGlzIGFsbW9zdCBjb21wYXRpYmxlKQkJCSovCisjZGVmaW5lIENPTkZJR19EVFRfTE03NQkJMQkJLyogT04gU2VtaSdzIExNNzUJKi8KKyNkZWZpbmUgQ09ORklHX0RUVF9BRDc0MTQJMQkJLyogdXNlIEFENzQxNAkJKi8KKyNkZWZpbmUgQ09ORklHX0RUVF9TRU5TT1JTCXswfQkJLyogU2Vuc29yIGFkZHJlc3NlcwkqLworI2RlZmluZSBDRkdfRFRUX01BWF9URU1QCTcwCisjZGVmaW5lIENGR19EVFRfTE9XX1RFTVAJLTMwCisjZGVmaW5lIENGR19EVFRfSFlTVEVSRVNJUwkzCisKKyNkZWZpbmUgQ09ORklHX1BSRUJPT1QJImVjaG87IgkJCQkJCVwKKwkiZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKKwkiZWNobyIKKworI3VuZGVmCUNPTkZJR19CT09UQVJHUworCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJXAorCSJob3N0bmFtZT1zZXF1b2lhXDAiCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIJCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJXAorCSJyYW1hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3XDAiCQkJXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmIHBhbmljPTFcMCIJCQlcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCwke2JhdWRyYXRlfVwwIlwKKwkiZmxhc2hfbmZzPXJ1biBuZnNhcmdzIGFkZGlwIGFkZHR0eTsiCQkJCVwKKwkJImJvb3RtICR7a2VybmVsX2FkZHJ9XDAiCQkJCVwKKwkiZmxhc2hfc2VsZj1ydW4gcmFtYXJncyBhZGRpcCBhZGR0dHk7IgkJCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfSAke3JhbWRpc2tfYWRkcn1cMCIJCVwKKwkibmV0X25mcz10ZnRwIDIwMDAwMCAke2Jvb3RmaWxlfTtydW4gbmZzYXJncyBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtXDAiCQkJCQkJXAorCSJyb290cGF0aD0vb3B0L2VsZGsvcHBjXzR4eFwwIgkJCQkJXAorCSJib290ZmlsZT0vdGZ0cGJvb3Qvc2VxdW9pYS91SW1hZ2VcMCIJCQkJXAorCSJrZXJuZWxfYWRkcj1GRTAwMDAwMFwwIgkJCQkJXAorCSJyYW1kaXNrX2FkZHI9RkUxODAwMDBcMCIJCQkJCVwKKwkibG9hZD10ZnRwIDEwMDAwMCAvdGZ0cGJvb3Qvc2VxdW9pYS91LWJvb3QuYmluXDAiCQlcCisJInVwZGF0ZT1wcm90ZWN0IG9mZiBGRkZBMDAwMCBGRkZGRkZGRjtlcmEgRkZGQTAwMDAgRkZGRkZGRkY7IglcCisJCSJjcC5iIDEwMDAwMCBGRkZBMDAwMCA2MDAwMFwwIgkJCSAgICAgICAgXAorCSJ1cGQ9cnVuIGxvYWQ7cnVuIHVwZGF0ZVwwIgkJCQkJXAorCSIiCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkicnVuIGZsYXNoX3NlbGYiCisKKyNpZiAwCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJLTEJLyogYXV0b2Jvb3QgZGlzYWJsZWQJCSovCisjZWxzZQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzCSovCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxCS8qIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZAkqLworI2RlZmluZSBDRkdfTE9BRFNfQkFVRF9DSEFOR0UJMQkvKiBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KKworI2RlZmluZSBDT05GSUdfTTg4RTExMTFfUEhZCTEKKyNkZWZpbmUJQ09ORklHX0lCTV9FTUFDNF9WNAkxCisjZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50CQkqLworI2RlZmluZSBDT05GSUdfUEhZX0FERFIJCTAJLyogUEhZIGFkZHJlc3MsIFNlZSBzY2hlbWF0aWNzCSovCisKKyNkZWZpbmUgQ09ORklHX1BIWV9SRVNFVCAgICAgICAgMQkvKiByZXNldCBwaHkgdXBvbiBzdGFydHVwICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1BIWV9HSUdFCQkxCS8qIEluY2x1ZGUgR2JFIHNwZWVkL2R1cGxleCBkZXRlY3Rpb24gKi8KKworI2RlZmluZSBDT05GSUdfSEFTX0VUSDAKKyNkZWZpbmUgQ0ZHX1JYX0VUSF9CVUZGRVIJMzIJLyogTnVtYmVyIG9mIGV0aGVybmV0IHJ4IGJ1ZmZlcnMgJiBkZXNjcmlwdG9ycyAqLworCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQorI2RlZmluZSBDT05GSUdfSEFTX0VUSDEJCTEJLyogYWRkIHN1cHBvcnQgZm9yICJldGgxYWRkciIJKi8KKyNkZWZpbmUgQ09ORklHX1BIWTFfQUREUgkxCisKKy8qIFVTQiAqLworI2RlZmluZSBDT05GSUdfVVNCX09IQ0kKKyNkZWZpbmUgQ09ORklHX1VTQl9TVE9SQUdFCisKKy8qIENvbW1lbnQgdGhpcyBvdXQgdG8gZW5hYmxlIFVTQiAxLjEgZGV2aWNlICovCisjZGVmaW5lIFVTQl8yXzBfREVWSUNFCisKKy8qIFBhcnRpdGlvbnMgKi8KKyNkZWZpbmUgQ09ORklHX01BQ19QQVJUSVRJT04KKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KKyNkZWZpbmUgQ09ORklHX0lTT19QQVJUSVRJT04KKworI2RlZmluZSBDT05GSUdfQ09NTUFORFMgICAgICAgKENPTkZJR19DTURfREZMCXwJXAorCQkJICAgICAgIENGR19DTURfQVNLRU5WCXwJXAorCQkJICAgICAgIENGR19DTURfREhDUAl8CVwKKwkJCSAgICAgICBDRkdfQ01EX0RUVAl8CVwKKwkJCSAgICAgICBDRkdfQ01EX0RJQUcJfAlcCisJCQkgICAgICAgQ0ZHX0NNRF9FRVBST00JfAlcCisJCQkgICAgICAgQ0ZHX0NNRF9FTEYJfAlcCisJCQkgICAgICAgQ0ZHX0NNRF9GQVQJfAlcCisJCQkgICAgICAgQ0ZHX0NNRF9JMkMJfAlcCisJCQkgICAgICAgQ0ZHX0NNRF9JUlEJfAlcCisJCQkgICAgICAgQ0ZHX0NNRF9NSUkJfAlcCisJCQkgICAgICAgQ0ZHX0NNRF9OQU5ECXwJXAorCQkJICAgICAgIENGR19DTURfTkVUCXwJXAorCQkJICAgICAgIENGR19DTURfTkZTCXwJXAorCQkJICAgICAgIENGR19DTURfUENJCXwJXAorCQkJICAgICAgIENGR19DTURfUElORwl8CVwKKwkJCSAgICAgICBDRkdfQ01EX1JFR0lORk8JfAlcCisJCQkgICAgICAgQ0ZHX0NNRF9TRFJBTQl8CVwKKwkJCSAgICAgICBDRkdfQ01EX1VTQiAgICApCisKKyNkZWZpbmUgQ09ORklHX1NVUFBPUlRfVkZBVAorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCSAgICAgICAgIj0+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQlNJWkUJICAgICAgICAxMDI0CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZWxzZQorI2RlZmluZSBDRkdfQ0JTSVpFCSAgICAgICAgMjU2CS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX1BCU0laRSAgICAgICAgICAgICAgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkgICAgICAgIDE2CS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCisjZGVmaW5lIENGR19CQVJHU0laRQkgICAgICAgIENGR19DQlNJWkUgLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MDQwMDAwMCAvKiBtZW10ZXN0IHdvcmtzIG9uCQkqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MEMwMDAwMCAvKiA0IC4uLiAxMiBNQiBpbiBEUkFNCSovCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJMHgxMDAwMDAgIC8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzCSovCisjZGVmaW5lIENGR19FWFRCRElORk8JCTEJLyogVG8gdXNlIGV4dGVuZGVkIGJvYXJkX2ludG8gKGJkX3QpICovCisKKyNkZWZpbmUgQ0ZHX0haCQkgICAgICAgIDEwMDAJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcwkqLworCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJMQkvKiBhZGQgY29tbWFuZCBsaW5lIGhpc3RvcnkJKi8KKyNkZWZpbmUgQ09ORklHX0xPT1BXICAgICAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbG9vcHcgY29tbWFuZCAgICAgICAgICovCisjZGVmaW5lIENPTkZJR19NWF9DWUNMSUMgICAgICAgIDEgICAgICAgLyogZW5hYmxlIG1kYy9td2MgY29tbWFuZHMgICAgICAqLworI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sJLyogY2hlY2sgZm9yIGtleXByZXNzIG9uIGJvb3RkZWxheT09MCAqLworI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSAxCS8qIGluY2x1ZGUgdmVyc2lvbiBlbnYgdmFyaWFibGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUENJIHN0dWZmCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogR2VuZXJhbCBQQ0kgKi8KKyNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQJICAgICAgICAqLworI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIChub3QpIHBjaSBwbHVnLWFuZC1wbGF5ICAgKi8KKyNkZWZpbmUgQ09ORklHX1BDSV9TQ0FOX1NIT1cJCS8qIHNob3cgcGNpIGRldmljZXMgb24gc3RhcnR1cCAgKi8KKyNkZWZpbmUgQ0ZHX1BDSV9UQVJHQkFTRSAgICAgICAgMHg4MDAwMDAwMCAvKiBQQ0lhZGRyIG1hcHBlZCB0byBDRkdfUENJX01FTUJBU0UqLworCisvKiBCb2FyZC1zcGVjaWZpYyBQQ0kgKi8KKyNkZWZpbmUgQ0ZHX1BDSV9QUkVfSU5JVAkJLyogZW5hYmxlIGJvYXJkIHBjaV9wcmVfaW5pdCgpCSovCisjZGVmaW5lIENGR19QQ0lfVEFSR0VUX0lOSVQKKyNkZWZpbmUgQ0ZHX1BDSV9NQVNURVJfSU5JVAorCisjZGVmaW5lIENGR19QQ0lfU1VCU1lTX1ZFTkRPUklEIDB4MTBlOAkvKiBBTUNDCQkJCSovCisjZGVmaW5lIENGR19QQ0lfU1VCU1lTX0lEICAgICAgIDB4Y2FmZQkvKiBXaGF0ZXZlcgkJCSovCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV4dGVybmFsIEJ1cyBDb250cm9sbGVyIChFQkMpIFNldHVwCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDRkdfRkxBU0gJCUNGR19GTEFTSF9CQVNFCisjZGVmaW5lIENGR19OQU5ECQkweEQwMDAwMDAwCisjZGVmaW5lIENGR19DUExECQkweEMwMDAwMDAwCisKKy8qCisgKiBPbiBTZXF1b2lhIENTMCBhbmQgQ1MzIGFyZSBzd2l0Y2hlZCB3aGVuIGNvbmZpZ3VyaW5nIGZvciBOQU5EIGJvb3RpbmcKKyAqLworI2lmICFkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgJiYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKQorI2RlZmluZSBDRkdfTkFORF9DUwkJMwkJLyogTkFORCBjaGlwIGNvbm5lY3RlZCB0byBDU3gJKi8KKy8qIE1lbW9yeSBCYW5rIDAgKE5PUi1GTEFTSCkgaW5pdGlhbGl6YXRpb24JCQkJCSovCisjZGVmaW5lIENGR19FQkNfUEIwQVAJCTB4MDMwMTczMDAKKyNkZWZpbmUgQ0ZHX0VCQ19QQjBDUgkJKENGR19GTEFTSCB8IDB4YmEwMDApCisKKy8qIE1lbW9yeSBCYW5rIDMgKE5BTkQtRkxBU0gpIGluaXRpYWxpemF0aW9uCQkJCQkqLworI2RlZmluZSBDRkdfRUJDX1BCM0FQCQkweDAxODAwM2MwCisjZGVmaW5lIENGR19FQkNfUEIzQ1IJCShDRkdfTkFORCB8IDB4MWMwMDApCisjZWxzZQorI2RlZmluZSBDRkdfTkFORF9DUwkJMAkJLyogTkFORCBjaGlwIGNvbm5lY3RlZCB0byBDU3gJKi8KKy8qIE1lbW9yeSBCYW5rIDMgKE5PUi1GTEFTSCkgaW5pdGlhbGl6YXRpb24JCQkJCSovCisjZGVmaW5lIENGR19FQkNfUEIzQVAJCTB4MDMwMTczMDAKKyNkZWZpbmUgQ0ZHX0VCQ19QQjNDUgkJKENGR19GTEFTSCB8IDB4YmEwMDApCisKKy8qIE1lbW9yeSBCYW5rIDAgKE5BTkQtRkxBU0gpIGluaXRpYWxpemF0aW9uCQkJCQkqLworI2RlZmluZSBDRkdfRUJDX1BCMEFQCQkweDAxODAwM2MwCisjZGVmaW5lIENGR19FQkNfUEIwQ1IJCShDRkdfTkFORCB8IDB4MWMwMDApCisjZW5kaWYKKworLyogTWVtb3J5IEJhbmsgMiAoQ1BMRCkgaW5pdGlhbGl6YXRpb24JCQkJCQkqLworI2RlZmluZSBDRkdfRUJDX1BCMkFQCQkweDI0ODE0NTgwCisjZGVmaW5lIENGR19FQkNfUEIyQ1IJCShDRkdfQ1BMRCB8IDB4MzgwMDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENhY2hlIENvbmZpZ3VyYXRpb24KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJKDMyPDwxMCkgIC8qIEZvciBBTUNDIDQ0MCBDUFVzCQkJKi8KKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCSAgICAgIC8qIC4uLgkJCSAgICAgICAgICAgICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CSAgICAgIC8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlCSovCisjZW5kaWYKKworLyoKKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKgorICogQm9vdCBGbGFncworICovCisjZGVmaW5lIEJPT1RGTEFHX0NPTEQJMHgwMQkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCQkvKiBTb2Z0d2FyZSByZWJvb3QJCQkqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJMjMwNDAwCS8qIHNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCisjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkyCSAgICAvKiB3aGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KKyNlbmRpZgorI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zb3JjZXJ5LmggYi9pbmNsdWRlL2NvbmZpZ3Mvc29yY2VyeS5oCmluZGV4IDNkOTA3ZjguLjQ5Mzc2MzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zb3JjZXJ5LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NvcmNlcnkuaApAQCAtMjYxLDYgKzI2MSw3IEBACiAjZGVmaW5lIENPTkZJR19NUEM4MjIwX0ZFQwkxCiAjZGVmaW5lIENPTkZJR19GRUNfMTBNQklUCTEgLyogV29ya2Fyb3VuZCBmb3IgRkVDIDEwME1iaXQgcHJvYmxlbSAqLwogI2RlZmluZSBDT05GSUdfUEhZX0FERFIJCTB4MUYKKyNkZWZpbmUgQ09ORklHX01JSQkJMQogCiAvKgogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NwYzE5MjAuaCBiL2luY2x1ZGUvY29uZmlncy9zcGMxOTIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzNjA5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9zcGMxOTIwLmgKQEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1hcmt1cyBLbG90emJ1ZWNoZXIsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIG1rQGRlbnguZGUKKyAqCisgKiBDb25maWd1YXRpb24gc2V0dGluZ3MgZm9yIHRoZSBTUEMxOTIwIGJvYXJkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworI2RlZmluZSBDT05GSUdfU1BDMTkyMAkJCTEJLyogU1BDMTkyMCBib2FyZCAqLworI2RlZmluZSBDT05GSUdfTVBDODg1CQkJMQkvKiBNUEM4ODUgQ1BVICovCisKKyNkZWZpbmUJQ09ORklHXzh4eF9DT05TX1NNQzEJCS8qIENvbnNvbGUgaXMgb24gU01DMSAqLworI3VuZGVmCUNPTkZJR184eHhfQ09OU19TTUMyCisjdW5kZWYJQ09ORklHXzh4eF9DT05TX05PTkUKKworI2RlZmluZSBDT05GSUdfTUlJCisvKiAjZGVmaW5lIE1JSV9ERUJVRyAqLworLyogI2RlZmluZSBDT05GSUdfRkVDX0VORVQgKi8KKyN1bmRlZiBDT05GSUdfRVRIRVJfT05fRkVDMQorI2RlZmluZSBDT05GSUdfRVRIRVJfT05fRkVDMgorI2RlZmluZSBGRUNfRU5FVAorLyogI2RlZmluZSBDT05GSUdfRkVDMl9QSFlfTk9SWEVSUiAqLworLyogI2RlZmluZSBDRkdfRElTQ09WRVJfUEhZICovCisvKiAjZGVmaW5lIENPTkZJR19QSFlfQUREUgkJMHgxICovCisjZGVmaW5lIENPTkZJR19GRUMyX1BIWQkJMQorCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTkyMDAKKworLyogdXNlIFBMRCBDTEs0IGluc3RlYWQgb2YgYnJnICovCisjdW5kZWYgQ0ZHX1NQQzE5MjBfU01DMV9DTEs0CisKKyNkZWZpbmUgQ09ORklHXzh4eF9PU0NMSwkJMTAwMDAwMDAgLyogMTAgTUh6IG9zY2lsbGF0b3Igb24gRVhUQ0xLICAqLworI2RlZmluZSBDT05GSUdfOHh4X0NQVUNMS19ERUZBVUxUCTUwMDAwMDAwCisjZGVmaW5lIENGR184eHhfQ1BVQ0xLX01JTgkJNDAwMDAwMDAKKyNkZWZpbmUgQ0ZHXzh4eF9DUFVDTEtfTUFYCQkxMzMwMDAwMDAKKworI2RlZmluZSBDRkdfUkVTRVRfQUREUkVTUwkJMHhmODAwMDAwMAorCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX0YKKworCisjaWYgMQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCS0xCS8qIGF1dG9ib290IGRpc2FibGVkCQkqLworI2Vsc2UKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1CS8qIGF1dG9ib290IGFmdGVyIDUgc2Vjb25kcwkqLworI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworI2RlZmluZSBDT05GSUdfTkZTQk9PVENPTU1BTkQJCQkJCQkJXAorICAgICJkaGNwOyIJCQkJCQkJCQlcCisgICAgInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JHJvb3RwYXRoICIJCQlcCisgICAgImlwPSRpcGFkZHI6JHNlcnZlcmlwOiRnYXRld2F5aXA6JG5ldG1hc2s6JGhvc3RuYW1lOmV0aDA6b2ZmOyIJCVwKKyAgICAiYm9vdG0iCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECQkJCQkJCVwKKyAgICAic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9tdGRibG9jazIgcncgbXRkcGFydHM9cGh5czoxMjgwSyhST00pcm8sLShyb290KSAiXAorICAgICJpcD0kaXBhZGRyOiRzZXJ2ZXJpcDokZ2F0ZXdheWlwOiRuZXRtYXNrOiRob3N0bmFtZTpldGgwOm9mZjsiCQlcCisgICAgImJvb3RtIGZlMDgwMDAwIgorCisjdW5kZWYgQ09ORklHX0JPT1RBUkdTCisKKyN1bmRlZglDT05GSUdfV0FUQ0hET0cJCQkvKiB3YXRjaGRvZyBkaXNhYmxlZAkJKi8KKyNkZWZpbmUgQ09ORklHX0JaSVAyCSAvKiBpbmNsdWRlIHN1cHBvcnQgZm9yIGJ6aXAyIGNvbXByZXNzZWQgaW1hZ2VzICovCisKKyNpZm5kZWYgQ09ORklHX0NPTU1BTkRTCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkoQ09ORklHX0NNRF9ERkwgICBcCisJCQkgfCBDRkdfQ01EX0FTS0VOViBcCisJCQkgfCBDRkdfQ01EX0VDSE8gICBcCisJCQkgfCBDRkdfQ01EX0lNTUFQICBcCisJCQkgfCBDRkdfQ01EX0pGRlMyIFwKKwkJCSB8IENGR19DTURfUElORyBcCisJCQkgfCBDRkdfQ01EX0RIQ1AgXAorCQkJIHwgQ0ZHX0NNRF9JTU1BUCBcCisJCQkgfCBDRkdfQ01EX01JSSkKKwkJCS8qICYgfiggQ0ZHX0NNRF9ORVQpKSAqLworCisKKyNlbmRpZiAvKiAhQ09ORklHX0NPTU1BTkRTICovCisKKy8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lCUNGR19QUk9NUFQJCSI9PiIJCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KKyNkZWZpbmUgQ0ZHX0hVU0hfUEFSU0VSCisjZGVmaW5lIENGR19QUk9NUFRfSFVTSF9QUzIJIj4gIgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUJQ0ZHX0NCU0laRQkJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbHNlCisjZGVmaW5lCUNGR19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbmRpZgorCisjZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikgLyogUHJpbnQgQnVmZmVyIFNpemUJKi8KKyNkZWZpbmUJQ0ZHX01BWEFSR1MJCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENGR19MT0FEX0FERFIJCTB4MDAxMDAwMDAKKworI2RlZmluZQlDRkdfSFoJCSAgICAgICAgMTAwMAkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzICovCisKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAgfQorCisvKgorICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKKyAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKKyAqIFlvdSBzaG91bGQga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEludGVybmFsIE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBDRkdfSU1NUgkJMHhGMDAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIERQUkFNKQorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCUNGR19JTU1SCisjZGVmaW5lCUNGR19JTklUX1JBTV9FTkQJMHgyRjAwCS8qIEVuZCBvZiB1c2VkIGFyZWEgaW4gRFBSQU0JKi8KKyNkZWZpbmUJQ0ZHX0dCTF9EQVRBX1NJWkUJNjQgIC8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lCUNGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCisgKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCisgKiBQbGVhc2Ugbm90ZSB0aGF0IENGR19TRFJBTV9CQVNFIF9tdXN0XyBzdGFydCBhdCAwCisgKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDBDMDAwMDAJLyogNCAuLi4gMTIgTUIgaW4gRFJBTQkqLworCisvKgorICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQorICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZQlDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eAkqLworCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCisjZGVmaW5lCUNGR19NT05JVE9SX0xFTgkJKDI1NiA8PCAxMCkJLyogUmVzZXJ2ZSAyNTYgS0IgZm9yIG1vbml0b3IJKi8KKworI2lmZGVmIENPTkZJR19CWklQMgorI2RlZmluZQlDRkdfTUFMTE9DX0xFTgkJKDI1MDAgPDwgMTApCS8qIFJlc2VydmUgfjIuNSBNQiBmb3IgbWFsbG9jKCkJKi8KKyNlbHNlCisjZGVmaW5lCUNGR19NQUxMT0NfTEVOCQkoMzg0IDw8IDEwKQkvKiBSZXNlcnZlIDM4NCBrQiBmb3IgbWFsbG9jKCkJKi8KKyNlbmRpZiAvKiBDT05GSUdfQlpJUDIgKi8KKworI2RlZmluZQlDRkdfQUxMT0NfRFBSQU0JCTEJLyogdXNlIGFsbG9jYXRpb24gcm91dGluZXMJKi8KKworLyoKKyAqIEZsYXNoCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZsYXNoIG9yZ2FuaXNhdGlvbgorICovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFICAgICAgICAgIDB4RkUwMDAwMDAKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBmbGFzaCBpcyBDRkkgY29tcGF0aWJsZSAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBjb21tb24gQ0ZJIGRyaXZlciAgICAgICAgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUyAgICAgMSAgICAgICAgICAgICAgIC8qIE1heCBudW1iZXIgb2YgZmxhc2ggYmFua3MgICAgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUICAgICAgMTI4ICAgICAgICAgICAgIC8qIE1heCBudW0gb2Ygc2VjdHMgb24gb25lIGNoaXAgKi8KKworLyogRW52aXJvbm1lbnQgaXMgaW4gZmxhc2ggKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAorI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRSAgICAgICAweDQwMDAwICAgICAgICAgLyogV2UgdXNlIG9uZSBjb21wbGV0ZSBzZWN0b3IgICAqLworI2RlZmluZSBDRkdfRU5WX0FERFIJCShDRkdfTU9OSVRPUl9CQVNFICsgQ0ZHX01PTklUT1JfTEVOKQorCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENhY2hlIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMTYJLyogRm9yIGFsbCBNUEM4eHggQ1BVcwkJCSovCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNAkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZQkqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJMkMgY29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCTEJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydCAqLworI2RlZmluZSBDRkdfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzIGRlZmF1bHRzICovCisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJMTEtOQorICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKKyNkZWZpbmUgQ0ZHX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAorCQkJIFNZUENSX1NXRSAgfCBTWVBDUl9TV1JJfCBTWVBDUl9TV1ApCisjZWxzZQorI2RlZmluZSBDRkdfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBTWVBDUl9TV1ApCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0lVTUNSIC0gU0lVIE1vZHVsZSBDb25maWd1cmF0aW9uCQkJCTExLTYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBDTUNJQSBjb25maWcuLCBtdWx0aS1mdW5jdGlvbiBwaW4gdHJpLXN0YXRlCisgKi8KKyNkZWZpbmUgQ0ZHX1NJVU1DUgkoU0lVTUNSX0RCR0MwMCB8IFNJVU1DUl9EQlBDMDAgfCBTSVVNQ1JfTUxSQzAxKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUQlNDUiAtIFRpbWUgQmFzZSBTdGF0dXMgYW5kIENvbnRyb2wJCQkJMTEtMjYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCisgKi8KKyNkZWZpbmUgQ0ZHX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCQkxMS0zMQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2xlYXIgUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cywgSW50ZXJydXB0IFRpbWVyIGZyZWV6aW5nIGVuYWJsZWQKKyAqLworI2RlZmluZSBDRkdfUElTQ1IJKFBJU0NSX1BTIHwgUElTQ1JfUElURikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMjcKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNldCBjbG9jayBvdXRwdXQsIHRpbWViYXNlIGFuZCBSVEMgc291cmNlIGFuZCBkaXZpZGVyLAorICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc29tZSBvdGhlciBpbnRlcm5hbCBjbG9ja3MKKyAqLworI2RlZmluZSBTQ0NSX01BU0sJU0NDUl9FQkRGMTEKKy8qICNkZWZpbmUgQ0ZHX1NDQ1IJU0NDUl9UQlMgKi8KKyNkZWZpbmUgQ0ZHX1NDQ1IJKFNDQ1JfQ09NMDAgICB8IFNDQ1JfREZTWU5DMDAgfCBTQ0NSX0RGQlJHMDAgIHwgXAorCQkJIFNDQ1JfREZOTDAwMCB8IFNDQ1JfREZOSDAwMCAgfCBTQ0NSX0RGTENEMDAwIHwgXAorCQkJIFNDQ1JfREZBTENEMDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERFUiAtIERlYnVnIEVuYWJsZSBSZWdpc3RlcgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU2V0IHRvIHplcm8gdG8gcHJldmVudCB0aGUgcHJvY2Vzc29yIGZyb20gZW50ZXJpbmcgZGVidWcgbW9kZQorICovCisjZGVmaW5lIENGR19ERVIJCSAwCisKKworLyogQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSA4NjAgc3RhcnRzIHVwIGFuZCBhc3NpZ25zIENTMCB0aGUgZW50aXJlCisgKiBhZGRyZXNzIHNwYWNlLCB3ZSBoYXZlIHRvIHNldCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgZGlmZmVyZW50bHkuCisgKiBOb3JtYWxseSwgeW91IHdyaXRlIHRoZSBvcHRpb24gcmVnaXN0ZXIgZmlyc3QsIGFuZCB0aGVuIGVuYWJsZSB0aGUKKyAqIGNoaXAgc2VsZWN0IGJ5IHdyaXRpbmcgdGhlIGJhc2UgcmVnaXN0ZXIuICBGb3IgQ1MwLCB5b3UgbXVzdCB3cml0ZQorICogdGhlIGJhc2UgcmVnaXN0ZXIgZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBvcHRpb24gcmVnaXN0ZXIuCisgKi8KKworCisvKgorICogSW5pdCBNZW1vcnkgQ29udHJvbGxlcjoKKyAqLworCisvKiBCUjAgYW5kIE9SMCAoRkxBU0gpICovCisjZGVmaW5lIEZMQVNIX0JBU0UwX1BSRUxJTQlDRkdfRkxBU0hfQkFTRQkvKiBGTEFTSCBiYW5rICMwICovCisKKworLyogdXNlZCB0byByZS1tYXAgRkxBU0ggYm90aCB3aGVuIHN0YXJ0aW5nIGZyb20gU1JBTSBvciBGTEFTSDoKKyAqIHJlc3RyaWN0IGFjY2VzcyBlbm91Z2ggdG8ga2VlcCBTUkFNIHdvcmtpbmcgKGlmIGFueSkKKyAqIGJ1dCBub3QgdG9vIG11Y2ggdG8gbWVkZGxlIHdpdGggRkxBU0ggYWNjZXNzZXMKKyAqLworI2RlZmluZSBDRkdfUkVNQVBfT1JfQU0JCTB4ODAwMDAwMDAJLyogT1IgYWRkciBtYXNrICovCisjZGVmaW5lIENGR19QUkVMSU1fT1JfQU0JMHhFMDAwMDAwMAkvKiBPUiBhZGRyIG1hc2sgKi8KKworLyoKKyAqIEZMQVNIIHRpbWluZzoKKyAqLworI2RlZmluZSBDRkdfT1JfVElNSU5HX0ZMQVNICShPUl9BQ1NfRElWMSAgfCBPUl9UUkxYIHwgT1JfQ1NOVF9TQU0gfCBcCisJCQkJIE9SX1NDWV8zX0NMSyB8IE9SX0VIVFIgfCBPUl9CSSkKKworI2RlZmluZSBDRkdfT1IwX1JFTUFQCShDRkdfUkVNQVBfT1JfQU0gIHwgQ0ZHX09SX1RJTUlOR19GTEFTSCkKKyNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0JKENGR19QUkVMSU1fT1JfQU0gfCBDRkdfT1JfVElNSU5HX0ZMQVNIKQorI2RlZmluZSBDRkdfQlIwX1BSRUxJTQkoKEZMQVNIX0JBU0UwX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9WICkKKworCisvKgorICogU0RSQU0gQ1MxIFVQTUIKKyAqLworI2RlZmluZQlDRkdfU0RSQU1fQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19TRFJBTV9CQVNFX1BSRUxJTSBDRkdfU0RSQU1fQkFTRQorI2RlZmluZSBTRFJBTV9NQVhfU0laRQkweDQwMDAwMDAgLyogbWF4IDY0IE1CICovCisKKyNkZWZpbmUgQ0ZHX1BSRUxJTV9PUjFfQU0JMHhGMDAwMDAwMAorLyogI2RlZmluZSBDRkdfT1IxX1RJTUlORyAgT1JfQ1NOVF9TQU0vXCogIHwgT1JfRzVMUyAvXFwqICpcXC8gKlwvICovCisjZGVmaW5lIFNEUkFNX1RJTUlORwlPUl9TQ1lfMF9DTEsJLyogU0RSQU0tVGltaW5nICovCisKKyNkZWZpbmUgQ0ZHX09SMV9QUkVMSU0JKENGR19QUkVMSU1fT1IxX0FNIHwgT1JfQ1NOVF9TQU0gfCBPUl9HNUxTIHwgU0RSQU1fVElNSU5HKQorI2RlZmluZSBDRkdfQlIxX1BSRUxJTSAgKChDRkdfU0RSQU1fQkFTRV9QUkVMSU0gJiBCUl9CQV9NU0spIHwgQlJfTVNfVVBNQiB8IEJSX1YpCisKKy8qICNkZWZpbmUgQ0ZHX09SMV9GSU5BTCAgICgoQ0ZHX09SMV9BTSAmIE9SX0FNX01TSykgfCBDRkdfT1IxX1RJTUlORykgKi8KKy8qICNkZWZpbmUgQ0ZHX0JSMV9GSU5BTCAgICgoQ0ZHX1NEUkFNX0JBU0UgJiBCUl9CQV9NU0spIHwgQlJfTVNfVVBNQiB8IEJSX1YpICovCisKKyNkZWZpbmUgQ0ZHX1BUQl9QRVJfQ0xLCSgoNDA5NiAqIDE2ICogMTAwMCkgLyAoNCAqIDY0KSkKKyNkZWZpbmUgQ0ZHX1BUQV9QRVJfQ0xLIDE5NQorI2RlZmluZSBDRkdfTUJNUl9QVEIJMTk1CisjZGVmaW5lIENGR19NUFRQUglNUFRQUl9QVFBfRElWMTYKKyNkZWZpbmUgQ0ZHX01BUgkJMHg4OAorCisjZGVmaW5lIENGR19NQk1SXzhDT0wgICgoQ0ZHX01CTVJfUFRCIDw8IE1CTVJfUFRCX1NISUZUKSB8IFwKKwkJCU1CTVJfQU1CX1RZUEVfMCB8IFwKKwkJCU1CTVJfRzBDTEJfQTEwIHwgXAorCQkJTUJNUl9EU0JfMV9DWUNMIHwgXAorCQkJTUJNUl9STEZCXzFYIHwgXAorCQkJTUJNUl9XTEZCXzFYIHwgXAorCQkJTUJNUl9UTEZCXzRYKSAvKiAweDA0ODA0MTE0ICovIC8qIDB4MTA4MDIxMTQgKi8KKworI2RlZmluZSBDRkdfTUJNUl85Q09MICAoKENGR19NQk1SX1BUQiA8PCBNQk1SX1BUQl9TSElGVCkgfCBcCisJCQlNQk1SX0FNQl9UWVBFXzEgfCBcCisJCQlNQk1SX0cwQ0xCX0ExMCB8IFwKKwkJCU1CTVJfRFNCXzFfQ1lDTCB8IFwKKwkJCU1CTVJfUkxGQl8xWCB8IFwKKwkJCU1CTVJfV0xGQl8xWCB8IFwKKwkJCU1CTVJfVExGQl80WCkgLyogMHgwNDgwNDExNCAqLyAvKiAweDEwODAyMTE0ICovCisKKworLyogUExEIENTNSAqLworI2RlZmluZSBDRkdfU1BDMTkyMF9QTERfQkFTRQkweDgwMDAwMDAwCisjZGVmaW5lIENGR19QUkVMSU1fT1I1X0FNCTB4ZmZmZjgwMDAKKworI2RlZmluZSBDRkdfT1I1X1BSRUxJTQkJKENGR19QUkVMSU1fT1I1X0FNIHwgXAorCQkJCQlPUl9DU05UX1NBTSB8IFwKKwkJCQkJT1JfQUNTX0RJVjEgfCBcCisJCQkJCU9SX0JJIHwgXAorCQkJCQlPUl9TQ1lfMF9DTEsgfCBcCisJCQkJCU9SX1RSTFgpCisKKyNkZWZpbmUgQ0ZHX0JSNV9QUkVMSU0gKChDRkdfU1BDMTkyMF9QTERfQkFTRSAmIEJSX0JBX01TSykgfCBCUl9QU184IHwgQlJfVik7CisKKy8qICNkZWZpbmUgQ0ZHX1BMRF9CQVNFICAgMHgzMDAwMDAwMCAqLworLyogI2RlZmluZSBDRkdfT1I1X1BSRUxJTSAweGZmZmYxMTEwICovCisvKiAjZGVmaW5lIENGR19CUjVfUFJFTElNIDB4MzAwMDA0MDEgKi8KKworLyoKKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKgorICogQm9vdCBGbGFncworICovCisjZGVmaW5lCUJPT1RGTEFHX0NPTEQJMHgwMQkJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkweDAyCQkvKiBTb2Z0d2FyZSByZWJvb3QJCQkqLworCisvKiBNYWNoaW5lIHR5cGUKKyovCisjZGVmaW5lIF9NQUNIXzh4eCAoX01BQ0hfZmFkcykKKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zcGlldmFsLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc3BpZXZhbC5oCmluZGV4IDllYmI1MWUuLmY0MGRkZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zcGlldmFsLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NwaWV2YWwuaApAQCAtNDUyLDMyICs0NTIsMjUgQEAKICNkZWZpbmUgQ0ZHX0NTMF9TVEFSVAkJQ0ZHX0ZMQVNIX0JBU0UKICNkZWZpbmUgQ0ZHX0NTMF9TSVpFCQlDRkdfRkxBU0hfU0laRQogCi0vKiBhdXRvbWF0aWMgY29uZmlndXJhdGlvbiBvZiBjaGlwIHNlbGVjdHMgKi8KLSNpZmRlZiBDT05GSUdfQ1NfQVVUT0NPTkYKICNkZWZpbmUgQ09ORklHX0xBU1RfU1RBR0VfSU5JVAotI2VuZGlmCiAKIC8qCiAgKiBTUkFNIC0gRG8gbm90IG1hcCBiZWxvdyAyIEdCIGluIGFkZHJlc3Mgc3BhY2UsIGJlY2F1c2UgdGhpcyBhcmVhIGlzIHVzZWQKICAqIGZvciBTRFJBTSBhdXRvc2l6aW5nLgogICovCi0jaWYgZGVmaW5lZCAoQ09ORklHX0NTX0FVVE9DT05GKQogI2RlZmluZSBDRkdfQ1MyX1NUQVJUCQkweEU1MDAwMDAwCiAjZGVmaW5lIENGR19DUzJfU0laRQkJMHgxMDAwMDAJLyogMSBNQnl0ZSAqLwogI2RlZmluZSBDRkdfQ1MyX0NGRwkJMHgwMDA0RDkzMAotI2VuZGlmCiAKIC8qCiAgKiBHcmFmaWMgY29udHJvbGxlciAtIERvIG5vdCBtYXAgYmVsb3cgMiBHQiBpbiBhZGRyZXNzIHNwYWNlLCBiZWNhdXNlIHRoaXMKICAqIGFyZWEgaXMgdXNlZCBmb3IgU0RSQU0gYXV0b3NpemluZy4KICAqLwotI2lmIGRlZmluZWQgKENPTkZJR19DU19BVVRPQ09ORikKICNkZWZpbmUgU001MDFfRkJfQkFTRQkJMHhFMDAwMDAwMAogI2RlZmluZSBDRkdfQ1MxX1NUQVJUCQkoU001MDFfRkJfQkFTRSkKICNkZWZpbmUgQ0ZHX0NTMV9TSVpFCQkweDQwMDAwMDAJLyogNjQgTUJ5dGUgKi8KICNkZWZpbmUgQ0ZHX0NTMV9DRkcJCTB4OEY0OEZGNzAKICNkZWZpbmUgU001MDFfTU1JT19CQVNFCQlDRkdfQ1MxX1NUQVJUICsgMHgwM0UwMDAwMAotI2VuZGlmCiAKICNkZWZpbmUgQ0ZHX0NTX0JVUlNUCQkweDAwMDAwMDAwCiAjZGVmaW5lIENGR19DU19ERUFEQ1lDTEUJMHgzMzMzMzMxMQkvKiAxIGRlYWQgY3ljbGUgZm9yIGZsYXNoIGFuZCBTTTUwMSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3RyYWIuaCBiL2luY2x1ZGUvY29uZmlncy90cmFiLmgKaW5kZXggOGY3MWFjZi4uYTJkYzhlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3RyYWIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdHJhYi5oCkBAIC00MDIsNyArNDAyLDcgQEAKICNlbmRpZgogCiAvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJKDIqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkoMTUqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLwogI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkoMipDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCiAKICNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvd2FsbnV0LmggYi9pbmNsdWRlL2NvbmZpZ3Mvd2FsbnV0LmgKaW5kZXggMTE3MWVlNS4uMjhhYmQ2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3dhbG51dC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy93YWxudXQuaApAQCAtOTAsNiArOTAsMTEgQEAKICNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQJCSovCiAjZGVmaW5lIENPTkZJR19QSFlfQUREUgkJMQkvKiBQSFkgYWRkcmVzcwkJCSovCiAKKyNkZWZpbmUgQ0ZHX1JYX0VUSF9CVUZGRVIJMTYJLyogdXNlIDE2IHJ4IGJ1ZmZlciBvbiA0MDUgZW1hYyAqLworCisjZGVmaW5lIENPTkZJR19ORVRDT05TT0xFCQkvKiBpbmNsdWRlIE5ldENvbnNvbGUgc3VwcG9ydAkqLworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCQkvKiBuZWVkZWQgZm9yIE5ldENvbnNvbGUJKi8KKwogI2RlZmluZSBDT05GSUdfUlRDX0RTMTc0eAkxCS8qIHVzZSBEUzE3NDMgUlRDIGluIFdhbG51dAkqLwogCiAjZGVmaW5lIENPTkZJR19DT01NQU5EUwkgICAgICAgKENPTkZJR19DTURfREZMCXwgXApAQCAtOTcsNiArMTAyLDcgQEAKIAkJCQlDRkdfQ01EX0RBVEUJfCBcCiAJCQkJQ0ZHX0NNRF9ESENQCXwgXAogCQkJCUNGR19DTURfRElBRwl8IFwKKwkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKIAkJCQlDRkdfQ01EX0VMRgl8IFwKIAkJCQlDRkdfQ01EX0kyQwl8IFwKIAkJCQlDRkdfQ01EX0lSUQl8IFwKQEAgLTE1NiwxNiArMTYyLDEyIEBACiAKICNkZWZpbmUgQ0ZHX0haCQkxMDAwCQkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzICovCiAKLSNkZWZpbmUgQ09ORklHX0FVVE9fQ09NUExFVEUJMQkvKiBhZGQgYXV0b2NvbXBsZXRpb24gc3VwcG9ydAkqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCTEJLyogYWRkIGNvbW1hbmQgbGluZSBoaXN0b3J5CSovCiAjZGVmaW5lIENPTkZJR19MT09QVwkJMQkvKiBlbmFibGUgbG9vcHcgY29tbWFuZAkJKi8KKyNkZWZpbmUgQ09ORklHX01YX0NZQ0xJQyAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbWRjL213YyBjb21tYW5kcyAgICAgICovCiAjZGVmaW5lIENPTkZJR19aRVJPX0JPT1RERUxBWV9DSEVDSwkvKiBjaGVjayBmb3Iga2V5cHJlc3Mgb24gYm9vdGRlbGF5PT0wICovCiAjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIDEJLyogaW5jbHVkZSB2ZXJzaW9uIGVudiB2YXJpYWJsZSAqLwogCi0jZGVmaW5lIENGR19SWF9FVEhfQlVGRkVSCTE2CS8qIHVzZSAxNiByeCBidWZmZXIgb24gNDA1IGVtYWMgKi8KLQotI2RlZmluZSBDT05GSUdfTkVUQ09OU09MRQkJLyogaW5jbHVkZSBOZXRDb25zb2xlIHN1cHBvcnQJKi8KLSNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkJLyogbmVlZGVkIGZvciBOZXRDb25zb2xlCSovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEkyQyBzdHVmZgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc1LDYgKzE3NywxMyBAQAogI2RlZmluZSBDRkdfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzCSovCiAjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKIAorI2RlZmluZSBDRkdfSTJDX01VTFRJX0VFUFJPTVMKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUgkoMHhhOD4+MSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gMQorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTIDMKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TIDEwCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFBDSSBzdHVmZgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3htMjUwLmggYi9pbmNsdWRlL2NvbmZpZ3MveG0yNTAuaAppbmRleCA5NTJmNzNiLi44MjViZmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MveG0yNTAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MveG0yNTAuaApAQCAtMTE5LDkgKzExOSw5IEBACiAvKgogICogRGVmaW5pdGlvbnMgcmVsYXRlZCB0byBwYXNzaW5nIGFyZ3VtZW50cyB0byBrZXJuZWwuCiAgKi8KLSNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCSAgICAgMQkgLyogc2VuZCBjb21tYW5kbGluZSB0byBLZXJuZWwJCSovCi0jZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUyAgICAgMQkgLyogc2VuZCBtZW1vcnkgZGVmaW5pdGlvbiB0byBrZXJuZWwJKi8KLSN1bmRlZglDT05GSUdfSU5JVFJEX1RBRwkJIC8qIGRvIG5vdCBzZW5kIGluaXRyZCBwYXJhbXMJCSovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkgMQkgLyogc2VuZCBjb21tYW5kbGluZSB0byBLZXJuZWwJCSovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUyAxCSAvKiBzZW5kIG1lbW9yeSBkZWZpbml0aW9uIHRvIGtlcm5lbAkqLworI2RlZmluZQlDT05GSUdfSU5JVFJEX1RBRwkgMQkgLyogZG8gbm90IHNlbmQgaW5pdHJkIHBhcmFtcwkJKi8KICN1bmRlZglDT05GSUdfVkZECQkJIC8qIGRvIG5vdCBzZW5kIGZyYW1lYnVmZmVyIHNldHVwCSovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MveWVsbG93c3RvbmUuaCBiL2luY2x1ZGUvY29uZmlncy95ZWxsb3dzdG9uZS5oCmluZGV4IDdkNTU1NjYuLmJhMjdmMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy95ZWxsb3dzdG9uZS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy95ZWxsb3dzdG9uZS5oCkBAIC02NSw2ICs2NSw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbml0aWFsIFJBTSAmIHN0YWNrIHBvaW50ZXIgKHBsYWNlZCBpbiBTRFJBTSkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19JTklUX1JBTV9EQ0FDSEUJMQkJLyogZC1jYWNoZSBhcyBpbml0IHJhbQkqLwogI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDcwMDAwMDAwCQkvKiBEQ2FjaGUgICAgICAgKi8KICNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkoOCA8PCAxMCkKICNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMjU2CQkJLyogbnVtIGJ5dGVzIGluaXRpYWwgZGF0YSovCkBAIC0xMDksNiArMTEwLDggQEAKICNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KICNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KIAorI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpCSovCisKICNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8JCS8qIHByaW50ICdFJyBmb3IgZW1wdHkgc2VjdG9yIG9uIGZsaW5mbyAqLwogCiAjaWZkZWYgQ0ZHX0VOVl9JU19JTl9GTEFTSApAQCAtMjI5LDYgKzIzMiw3IEBACiAJCQkJQ0ZHX0NNRF9ESENQCXwgXAogCQkJCUNGR19DTURfRElBRwl8IFwKIAkJCQlDRkdfQ01EX0VMRgl8IFwKKwkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKIAkJCQlDRkdfQ01EX0kyQwl8IFwKIAkJCQlDRkdfQ01EX0lSUQl8IFwKIAkJCQlDRkdfQ01EX01JSQl8IFwKQEAgLTI2NSw2ICsyNjksMTIgQEAKIAogI2RlZmluZSBDRkdfSFoJCSAgICAgICAgMTAwMAkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzICovCiAKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCS8qIGFkZCBjb21tYW5kIGxpbmUgaGlzdG9yeQkqLworI2RlZmluZSBDT05GSUdfTE9PUFcgICAgICAgICAgICAxICAgICAgIC8qIGVuYWJsZSBsb29wdyBjb21tYW5kICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX01YX0NZQ0xJQyAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbWRjL213YyBjb21tYW5kcyAgICAgICovCisjZGVmaW5lIENPTkZJR19aRVJPX0JPT1RERUxBWV9DSEVDSwkvKiBjaGVjayBmb3Iga2V5cHJlc3Mgb24gYm9vdGRlbGF5PT0wICovCisjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIDEJLyogaW5jbHVkZSB2ZXJzaW9uIGVudiB2YXJpYWJsZSAqLworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQQ0kgc3R1ZmYKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy95b3NlbWl0ZS5oIGIvaW5jbHVkZS9jb25maWdzL3lvc2VtaXRlLmgKaW5kZXggYTgxY2YzNC4uM2Q3YjRhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3lvc2VtaXRlLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3lvc2VtaXRlLmgKQEAgLTY1LDYgKzY1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluaXRpYWwgUkFNICYgc3RhY2sgcG9pbnRlciAocGxhY2VkIGluIFNEUkFNKQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0RDQUNIRQkxCQkvKiBkLWNhY2hlIGFzIGluaXQgcmFtCSovCiAjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4NzAwMDAwMDAJCS8qIERDYWNoZSAgICAgICAqLwogI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECSg4IDw8IDEwKQogI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkyNTYJCQkvKiBudW0gYnl0ZXMgaW5pdGlhbCBkYXRhKi8KQEAgLTIzMSw2ICsyMzIsNyBAQAogCQkJCUNGR19DTURfREhDUAl8IFwKIAkJCQlDRkdfQ01EX0RJQUcJfCBcCiAJCQkJQ0ZHX0NNRF9FTEYJfCBcCisJCQkJQ0ZHX0NNRF9FRVBST00JfCBcCiAJCQkJQ0ZHX0NNRF9JMkMJfCBcCiAJCQkJQ0ZHX0NNRF9JUlEJfCBcCiAJCQkJQ0ZHX0NNRF9NSUkJfCBcCkBAIC0yNzIsNiArMjc0LDEyIEBACiAKICNkZWZpbmUgQ0ZHX0haCQkgICAgICAgIDEwMDAJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcyAqLwogCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJMQkvKiBhZGQgY29tbWFuZCBsaW5lIGhpc3RvcnkJKi8KKyNkZWZpbmUgQ09ORklHX0xPT1BXICAgICAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbG9vcHcgY29tbWFuZCAgICAgICAgICovCisjZGVmaW5lIENPTkZJR19NWF9DWUNMSUMgICAgICAgIDEgICAgICAgLyogZW5hYmxlIG1kYy9td2MgY29tbWFuZHMgICAgICAqLworI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sJLyogY2hlY2sgZm9yIGtleXByZXNzIG9uIGJvb3RkZWxheT09MCAqLworI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSAxCS8qIGluY2x1ZGUgdmVyc2lvbiBlbnYgdmFyaWFibGUgKi8KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUENJIHN0dWZmCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MveXVjY2EuaCBiL2luY2x1ZGUvY29uZmlncy95dWNjYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NTMyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MveXVjY2EuaApAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNCBQYXVsIFJleW5vbGRzIDxQYXVsUmV5bm9sZHNAbGhzb2x1dGlvbnMuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogMSBqYW51YXJ5IDIwMDUJQWxhaW4gU2F1cmVsIDxhc2F1cmVsQGFtY2MuY29tPgorICogQWRhcHRlZCB0byBjdXJyZW50IERhcyBVLUJvb3Qgc291cmNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB5dWNjYS5oIC0gY29uZmlndXJhdGlvbiBmb3IgQU1DQyA0NDBTUGUgUmVmICh5dWNjYSkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENPTkZJR180eHgJCQkxCS8qIC4uLiBQUEM0eHggZmFtaWx5CSovCisjZGVmaW5lIENPTkZJR180NDAJCQkxCS8qIC4uLiBQUEM0NDAgZmFtaWx5CSovCisjZGVmaW5lIENPTkZJR180NDBTUEUJCQkxCS8qIFNwZWNpZmMgU1BlIHN1cHBvcnQJKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRgkxCS8qIENhbGwgYm9hcmRfcHJlX2luaXQJKi8KKyN1bmRlZglDRkdfRFJBTV9URVNUCQkJCS8qIERpc2FibGUtdGFrZXMgbG9uZyB0aW1lICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMzMzMzMzMzMJLyogZXh0ZXJuYWwgZnJlcSB0byBwbGwJKi8KKyNkZWZpbmUgRVhUQ0xLXzMzXzMzCQkzMzMzMzMzMworI2RlZmluZSBFWFRDTEtfNjZfNjYJCTY2NjY2NjY2CisjZGVmaW5lIEVYVENMS181MAkJNTAwMDAwMDAKKyNkZWZpbmUgRVhUQ0xLXzgzCQk4MzMzMzMzMworCisjZGVmaW5lCUNPTkZJR19JQk1fRU1BQzRfVjQJCTEKKyNkZWZpbmUJQ09ORklHX01JU0NfSU5JVF9GCQkxCS8qIFVzZSBtaXNjX2luaXRfZigpCSovCisjdW5kZWYgIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MKKyN1bmRlZiAgQ09ORklHX1NUUkVTUworI3VuZGVmICBFTkFCTEVfRUNDCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCYXNlIGFkZHJlc3NlcyAtLSBOb3RlIHRoZXNlIGFyZSBlZmZlY3RpdmUgYWRkcmVzc2VzIHdoZXJlIHRoZQorICogYWN0dWFsIHJlc291cmNlcyBnZXQgbWFwcGVkIChub3QgcGh5c2ljYWwgYWRkcmVzc2VzKQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCTB4MDAwMDAwMDAJLyogX211c3RfIGJlIDAJCSovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweGZmZjAwMDAwCS8qIHN0YXJ0IG9mIEZMQVNICSovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJMHhmZmZiMDAwMAkvKiBzdGFydCBvZiBtb25pdG9yCSovCisjZGVmaW5lIENGR19QRVJJUEhFUkFMX0JBU0UJMHhhMDAwMDAwMAkvKiBpbnRlcm5hbCBwZXJpcGhlcmFscwkqLworI2RlZmluZSBDRkdfSVNSQU1fQkFTRQkJMHg5MDAwMDAwMAkvKiBpbnRlcm5hbCBTUkFNCSovCisKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1CQVNFCQkweDgwMDAwMDAwCS8qIG1hcHBlZCBQQ0kgbWVtb3J5CSovCisjZGVmaW5lIENGR19QQ0lfQkFTRQkJMHhkMDAwMDAwMAkvKiBpbnRlcm5hbCBQQ0kgcmVncwkqLworI2RlZmluZSBDRkdfUENJX1RBUkdCQVNFCUNGR19QQ0lfTUVNQkFTRQorCisjZGVmaW5lIENGR19QQ0lFX01FTUJBU0UJMHhiMDAwMDAwMAkvKiBtYXBwZWQgUENJZSBtZW1vcnkJKi8KKyNkZWZpbmUgQ0ZHX1BDSUVfTUVNU0laRQkweDAxMDAwMDAwCisjZGVmaW5lIENGR19QQ0lFX0JBU0UJCTB4ZTAwMDAwMDAJLyogUENJZSBVVEwgcmVncyAqLworCisjZGVmaW5lIENGR19QQ0lFMF9DRkdCQVNFCTB4YzAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSUUwX1hDRkdCQVNFCTB4YzAwMDA0MDAKKyNkZWZpbmUgQ0ZHX1BDSUUxX0NGR0JBU0UJMHhjMDAwMTAwMAorI2RlZmluZSBDRkdfUENJRTFfWENGR0JBU0UJMHhjMDAwMTQwMAorI2RlZmluZSBDRkdfUENJRTJfQ0ZHQkFTRQkweGMwMDAyMDAwCisjZGVmaW5lIENGR19QQ0lFMl9YQ0ZHQkFTRQkweGMwMDAyNDAwCisKKy8qIFN5c3RlbSBSQU0gbWFwcGVkIHRvIFBDSSBzcGFjZSAqLworI2RlZmluZSBDT05GSUdfUENJX1NZU19NRU1fQlVTCUNGR19TRFJBTV9CQVNFCisjZGVmaW5lIENPTkZJR19QQ0lfU1lTX01FTV9QSFlTCUNGR19TRFJBTV9CQVNFCisjZGVmaW5lIENPTkZJR19QQ0lfU1lTX01FTV9TSVpFCSgxMDI0ICogMTAyNCAqIDEwMjQpCisKKyNkZWZpbmUgQ0ZHX0ZQR0FfQkFTRQkJMHhlMjAwMDAwMAkvKiBlcGxkCQkJKi8KKyNkZWZpbmUgQ0ZHX09QRVJfRkxBU0gJCTB4ZTcwMDAwMDAJLyogU1JBTSAtIE9QRVIgRmxhc2gJKi8KKworLyogI2RlZmluZSBDRkdfTlZSQU1fQkFTRV9BRERSIDB4MDgwMDAwMDAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEluaXRpYWwgUkFNICYgc3RhY2sgcG9pbnRlciAocGxhY2VkIGluIGludGVybmFsIFNSQU0pCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDRkdfVEVNUF9TVEFDS19PQ00JMQorI2RlZmluZSBDRkdfT0NNX0RBVEFfQUREUglDRkdfSVNSQU1fQkFTRQorI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUglDRkdfSVNSQU1fQkFTRQkvKiBJbml0aWFsIFJBTSBhZGRyZXNzCSovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgyMDAwCQkvKiBFbmQgb2YgdXNlZCBhcmVhIGluIFJBTSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJCS8qIG51bSBieXRlcyBpbml0aWFsIGRhdGEgKi8KKworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lIENGR19QT1NUX1dPUkRfQUREUgkoQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIDB4NCkKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19QT1NUX1dPUkRfQUREUgorCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJKDMyMCAqIDEwMjQpCS8qIFJlc2VydmUgMzIwIGtCIGZvciBNb24gKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCSg1MTIgKiAxMDI0KQkvKiBSZXNlcnZlIDUxMiBrQiBmb3IgbWFsbG9jICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNlcmlhbCBQb3J0CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDT05GSUdfU0VSSUFMX01VTFRJCTEKKyN1bmRlZiBDT05GSUdfVUFSVDFfQ09OU09MRQorCisjdW5kZWYJQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPCisjdW5kZWYgQ0ZHX0VYVF9TRVJJQUxfQ0xPQ0sKKy8qICNkZWZpbmUgQ0ZHX0VYVF9TRVJJQUxfQ0xPQ0sJKDE4NDMyMDAgKiA2KSAqLyAvKiBFeHQgY2xrIEAgMTEuMDU5IE1IeiAqLworCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICBcCisJezMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDB9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEREUiBTRFJBTQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyN1bmRlZiBDT05GSUdfU1BEX0VFUFJPTQkJLyogVXNlIFNQRCBFRVBST00gZm9yIHNldHVwCSovCisjZGVmaW5lIFNQRF9FRVBST01fQUREUkVTUyB7MHg1MywgMHg1Mn0JLyogU1BEIGkyYyBzcGQgYWRkcmVzc2VzCSovCisjZGVmaW5lIElJQzBfRElNTTBfQUREUgkJMHg1MworI2RlZmluZSBJSUMwX0RJTU0xX0FERFIJCTB4NTIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSTJDCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCTEJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydAkqLworI3VuZGVmCUNPTkZJR19TT0ZUX0kyQwkJCS8qIEkyQyBiaXQtYmFuZ2VkCQkqLworI2RlZmluZSBDRkdfSTJDX1NQRUVECQk0MDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzCSovCisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKworI2RlZmluZSBJSUMwX0JPT1RQUk9NX0FERFIJMHg1MAorI2RlZmluZSBJSUMwX0FMVF9CT09UUFJPTV9BRERSCTB4NTQKKworLyogRG9uJ3QgcHJvYmUgdGhlc2UgYWRkcnMgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19OT1BST0JFUwl7MHg1MCwgMHg1MiwgMHg1MywgMHg1NH0KKworLyogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0VFUFJPTSkgKi8KKy8qICNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUgkweDUwICovCS8qIEkyQyBib290IEVFUFJPTQkJKi8KKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4JMgkvKiBCeXRlcyBvZiBhZGRyZXNzCQkqLworLyogI2VuZGlmICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEVudmlyb25tZW50CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogI2RlZmluZSBDRkdfTlZSQU1fU0laRQkoMHgyMDAwIC0gOCkgKi8JLyogTlZSQU0gc2l6ZSg4ayktIFJUQyByZWdzICovCisKKyN1bmRlZiAgQ0ZHX0VOVl9JU19JTl9OVlJBTQkJLyogLi4uIG5vdCBpbiBOVlJBTQkJKi8KKyNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCS8qIEVudmlyb25tZW50IHVzZXMgZmxhc2gJKi8KKyN1bmRlZglDRkdfRU5WX0lTX0lOX0VFUFJPTQkJLyogLi4uIG5vdCBpbiBFRVBST00JCSovCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworI2RlZmluZSBDT05GSUdfUFJFQk9PVAkiZWNobzsiCVwKKwkiZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUzsiIFwKKwkiZWNobyIKKworI3VuZGVmCUNPTkZJR19CT09UQVJHUworCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJXAorCSJob3N0bmFtZT15dWNjYVwwIgkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCVwKKwkicmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIgkJCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZiBwYW5pYz0xXDAiCQkJXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCJcCisJImZsYXNoX25mcz1ydW4gbmZzYXJncyBhZGRpcCBhZGR0dHk7IgkJCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImZsYXNoX3NlbGY9cnVuIHJhbWFyZ3MgYWRkaXAgYWRkdHR5OyIJCQkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn0gJHtyYW1kaXNrX2FkZHJ9XDAiCQlcCisJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXAgYWRkdHR5OyIgICAgIFwKKwkJImJvb3RtXDAiCQkJCQkJXAorCSJyb290cGF0aD0vb3B0L2VsZGsvcHBjXzR4eFwwIgkJCQlcCisJImJvb3RmaWxlPXl1Y2NhL3VJbWFnZVwwIgkJCQkJXAorCSJrZXJuZWxfYWRkcj1FN0YxMDAwMFwwIgkJCQkJXAorCSJyYW1kaXNrX2FkZHI9RTdGMjAwMDBcMCIJCQkJCVwKKwkibG9hZD10ZnRwIDEwMDAwMCB5dWNhL3UtYm9vdC5iaW5cMCIJCQkJXAorCSJ1cGRhdGU9cHJvdGVjdCBvZmYgMjo0LTc7ZXJhIDI6NC03OyIJCQkJXAorCQkiY3AuYiAke2ZpbGVhZGRyfSBGRkZCMDAwMCAke2ZpbGVzaXplfTsiCQlcCisJCSJzZXRlbnYgZmlsZXNpemU7c2F2ZWVudlwwIgkJCQlcCisJInVwZD1ydW4gbG9hZDtydW4gdXBkYXRlXDAiCQkJCQlcCisJIiIKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJydW4gZmxhc2hfc2VsZiIKKworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzCSovCisKKyNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQJKi8KKyNkZWZpbmUgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCTEJLyogYWxsb3cgYmF1ZHJhdGUgY2hhbmdlCSovCisKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSAgICAgICAoQ09ORklHX0NNRF9ERkwJfCBcCisJCQkJQ0ZHX0NNRF9BU0tFTlYJfCBcCisJCQkJQ0ZHX0NNRF9FRVBST00JfCBcCisJCQkJQ0ZHX0NNRF9ESENQCXwgXAorCQkJCUNGR19DTURfRElBRwl8IFwKKwkJCQlDRkdfQ01EX0VMRgl8IFwKKwkJCQlDRkdfQ01EX0kyQwl8IFwKKwkJCQlDRkdfQ01EX0lSUQl8IFwKKwkJCQlDRkdfQ01EX01JSQl8IFwKKwkJCQlDRkdfQ01EX05FVAl8IFwKKwkJCQlDRkdfQ01EX05GUwl8IFwKKwkJCQlDRkdfQ01EX1BDSQl8IFwKKwkJCQlDRkdfQ01EX1BJTkcJfCBcCisJCQkJQ0ZHX0NNRF9SRUdJTkZPCXwgXAorCQkJCUNGR19DTURfU0RSQU0JKQorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ09ORklHX01JSQkJMQkvKiBNSUkgUEhZIG1hbmFnZW1lbnQJCSovCisjdW5kZWYgQ09ORklHX05FVF9NVUxUSQorI2RlZmluZSBDT05GSUdfUEhZX0FERFIJCTEJLyogUEhZIGFkZHJlc3MsIFNlZSBzY2hlbWF0aWNzCSovCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMAorI2RlZmluZSBDT05GSUdfUEhZX1JFU0VUICAgICAgICAxCS8qIHJlc2V0IHBoeSB1cG9uIHN0YXJ0dXAJKi8KKyNkZWZpbmUgQ09ORklHX1BIWV9SRVNFVF9ERUxBWQkxMDAwCisjZGVmaW5lIENPTkZJR19DSVM4MjAxX1BIWQkxCS8qIEVuYWJsZSAnc3BlY2lhbCcgUkdNSUkgbW9kZSBmb3IgQ2ljYWRhIHBoeSAqLworI2RlZmluZSBDT05GSUdfUEhZX0dJR0UJCTEJLyogSW5jbHVkZSBHYkUgc3BlZWQvZHVwbGV4IGRldGVjdGlvbiAqLworI2RlZmluZSBDRkdfUlhfRVRIX0JVRkZFUgkzMgkvKiBOdW1iZXIgb2YgZXRoZXJuZXQgcnggYnVmZmVycyAmIGRlc2NyaXB0b3JzICovCisKKyNkZWZpbmUgQ09ORklHX05FVENPTlNPTEUJCS8qIGluY2x1ZGUgTmV0Q29uc29sZSBzdXBwb3J0CSovCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJCS8qIG5lZWRlZCBmb3IgTmV0Q29uc29sZQkqLworCisjdW5kZWYgQ09ORklHX1dBVENIRE9HCQkJLyogd2F0Y2hkb2cgZGlzYWJsZWQJCSovCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbHNlCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbmRpZgorI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQlDRkdfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDA0MDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbgkJKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDBDMDAwMDAJLyogNCAuLi4gMTIgTUIgaW4gRFJBTQkJKi8KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkJKi8KKyNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkJMQkJLyogVG8gdXNlIGV4dGVuZGVkIGJvYXJkX2ludG8gKGJkX3QpICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAkJLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcyAqLworCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJMQkvKiBhZGQgY29tbWFuZCBsaW5lIGhpc3RvcnkJKi8KKyNkZWZpbmUgQ09ORklHX0xPT1BXICAgICAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbG9vcHcgY29tbWFuZCAgICAgICAgICovCisjZGVmaW5lIENPTkZJR19NWF9DWUNMSUMgICAgICAgIDEgICAgICAgLyogZW5hYmxlIG1kYy9td2MgY29tbWFuZHMgICAgICAqLworI2RlZmluZSBDT05GSUdfWkVST19CT09UREVMQVlfQ0hFQ0sJLyogY2hlY2sgZm9yIGtleXByZXNzIG9uIGJvb3RkZWxheT09MCAqLworI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSAxCS8qIGluY2x1ZGUgdmVyc2lvbiBlbnYgdmFyaWFibGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggcmVsYXRlZAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkzCS8qIG51bWJlciBvZiBiYW5rcwkJKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTI1NgkvKiBzZWN0b3JzIHBlciBkZXZpY2UJCSovCisKKyN1bmRlZglDRkdfRkxBU0hfQ0hFQ0tTVU0KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQUREUjAJCTB4NTU1NQorI2RlZmluZSBDRkdfRkxBU0hfQUREUjEJCTB4MmFhYQorI2RlZmluZSBDRkdfRkxBU0hfV09SRF9TSVpFCXVuc2lnbmVkIGNoYXIKKworI2RlZmluZSBDRkdfRkxBU0hfMk5EXzE2QklUX0RFVgkxCS8qIGV2YjQ0MFNQZSBoYXMgOCBhbmQgMTZiaXQgZGV2aWNlICovCisjZGVmaW5lIENGR19GTEFTSF8yTkRfQUREUgkweGU3YzAwMDAwIC8qIGV2YjQ0MFNQZSBoYXMgOCBhbmQgMTZiaXQgZGV2aWNlKi8KKworI2lmZGVmIENGR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJMHgxMDAwMAkvKiBzaXplIG9mIG9uZSBjb21wbGV0ZSBzZWN0b3IJKi8KKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkweGZmZmEwMDAwCisvKiAjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19NT05JVE9SX0JBU0UtQ0ZHX0VOVl9TRUNUX1NJWkUpICovCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgxMDAwMAkvKiBTaXplIG9mIEVudmlyb25tZW50IHZhcnMJKi8KKyNlbmRpZiAvKiBDRkdfRU5WX0lTX0lOX0ZMQVNIICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQQ0kgc3R1ZmYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworLyogR2VuZXJhbCBQQ0kgKi8KKyNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQJCSovCisjZGVmaW5lIENPTkZJR19QQ0lfUE5QCQkxCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5CQkqLworI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVwkxCS8qIHNob3cgcGNpIGRldmljZXMgb24gc3RhcnR1cAkqLworI3VuZGVmIENPTkZJR19QQ0lfQ09ORklHX0hPU1RfQlJJREdFCisKKy8qIEJvYXJkLXNwZWNpZmljIFBDSSAqLworI2RlZmluZSBDRkdfUENJX1BSRV9JTklUCTEJLyogZW5hYmxlIGJvYXJkIHBjaV9wcmVfaW5pdCgpCSovCisjZGVmaW5lIENGR19QQ0lfVEFSR0VUX0lOSVQJCS8qIGxldCBib2FyZCBpbml0IHBjaSB0YXJnZXQgICAgKi8KKyN1bmRlZglDRkdfUENJX01BU1RFUl9JTklUCisKKyNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfVkVORE9SSUQgMHgxMDE0CS8qIElCTQkJCQkqLworI2RlZmluZSBDRkdfUENJX1NVQlNZU19ERVZJQ0VJRCAweGNhZmUJLyogV2hhdGV2ZXIJCQkqLworLyogI2RlZmluZSBDRkdfUENJX1NVQlNZU19JRAlDRkdfUENJX1NVQlNZU19ERVZJQ0VJRCAqLworCisvKgorICogIE5FVFdPUksgU3VwcG9ydCAoUENJKToKKyAqLworLyogU3VwcG9ydCBmb3IgSW50ZWwgODI1NTcvODI1NTkvODI1NTlFUiBjaGlwcy4gKi8KKyNkZWZpbmUgQ09ORklHX0VFUFJPMTAwCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJCSg4IDw8IDIwKQkvKkluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2FjaGUgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJODE5MgkvKiBGb3IgQU1DQyA0MDUgQ1BVcwkJKi8KKyNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCS8qIC4uLgkJCQkqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQJNQkvKiBsb2cgYmFzZSAyIG9mIHRoZSBhYm92ZSB2YWx1ZSAqLworI2VuZGlmCisKKy8qCisgKiBJbnRlcm5hbCBEZWZpbml0aW9ucworICoKKyAqIEJvb3QgRmxhZ3MKKyAqLworI2RlZmluZSBCT09URkxBR19DT0xECTB4MDEJCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNIICovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkJLyogU29mdHdhcmUgcmVib290ICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkyMzA0MDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTIJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworLyogRkIgRGl2aXNvciBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgRlBHQV9GQl9ESVZfNgkJNgorI2RlZmluZSBGUEdBX0ZCX0RJVl8xMAkJMTAKKyNkZWZpbmUgRlBHQV9GQl9ESVZfMTIJCTEyCisjZGVmaW5lIEZQR0FfRkJfRElWXzIwCQkyMAorCisvKiBWQ08gRGl2aXNvciBzZWxlY3Rpb24gKi8KKyNkZWZpbmUJRlBHQV9WQ09fRElWXzQJCTQKKyNkZWZpbmUJRlBHQV9WQ09fRElWXzYJCTYKKyNkZWZpbmUJRlBHQV9WQ09fRElWXzgJCTgKKyNkZWZpbmUJRlBHQV9WQ09fRElWXzEwCQkxMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZQR0EgcmVnaXN0ZXJzIGFuZCBiaXQgZGVmaW5pdGlvbnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFBvd2VyUEMgNDQwU1BlIEJvYXJkIEZQR0EgaXMgcmVhY2hlZCB3aXRoIHBoeXNpY2FsIGFkZHJlc3MgMHgxIEUyMDAwMDAwLiAqLworLyogVExCIGluaXRpYWxpemF0aW9uIG1ha2VzIGl0IGNvcnJlc3BvbmQgdG8gbG9naWNhbCBhZGRyZXNzIDB4RTIwMDAwMDAuICovCisvKiA9PiBEb25lIGluaXRfY2hpcC5zIGluIGJvb3RsaWIgKi8KKyNkZWZpbmUgRlBHQV9SRUdfQkFTRV9BRERSCTB4RTIwMDAwMDAKKyNkZWZpbmUgRlBHQV9HUElPX0JBU0VfQUREUgkweEUyMDEwMDAwCisjZGVmaW5lIEZQR0FfSU5UX0JBU0VfQUREUgkweEUyMDIwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRGlzcGxheQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQUEM0NDBTUEVfRElTUExBWQlGUEdBX1JFR19CQVNFX0FERFIKKworI2RlZmluZSBQUEM0NDBTUEVfRElTUExBWV9EOAkoRlBHQV9SRUdfQkFTRV9BRERSKzB4MDYpCisjZGVmaW5lIFBQQzQ0MFNQRV9ESVNQTEFZX0Q0CShGUEdBX1JFR19CQVNFX0FERFIrMHgwNCkKKyNkZWZpbmUgUFBDNDQwU1BFX0RJU1BMQVlfRDIJKEZQR0FfUkVHX0JBU0VfQUREUisweDAyKQorI2RlZmluZSBQUEM0NDBTUEVfRElTUExBWV9EMQkoRlBHQV9SRUdfQkFTRV9BRERSKzB4MDApCisvKmRlZmluZSAgIFdSSVRFX0RJU1BMQVlfRElHSVQobikgSU9SRUc4KEZQR0FfUkVHX0JBU0VfQUREUiArICgyKm4pKSovCisvKiNkZWZpbmUgICBJT1JFRzgoYWRkcikgKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhZGRyKSkqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGV0aGVybmV0L3Jlc2V0L2Jvb3QgUmVnaXN0ZXIgMQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBGUEdBX1JFRzEwCShGUEdBX1JFR19CQVNFX0FERFIrMHgxMCkKKworI2RlZmluZSBGUEdBX1JFRzEwXzEwTUhaX0VOQUJMRQkJMHg4MDAwCisjZGVmaW5lIEZQR0FfUkVHMTBfMTAwTUhaX0VOQUJMRQkweDQwMDAKKyNkZWZpbmUgRlBHQV9SRUcxMF9HSUdBQklUX0VOQUJMRQkweDIwMDAKKyNkZWZpbmUgRlBHQV9SRUcxMF9GVUxMX0RVUExFWAkJMHgxMDAwCS8qIGZvcmNlIEZ1bGwgRHVwbGV4Ki8KKyNkZWZpbmUgRlBHQV9SRUcxMF9SRVNFVF9FVEgJCTB4MDgwMAorI2RlZmluZSBGUEdBX1JFRzEwX0FVVE9fTkVHX0RJUwkJMHgwNDAwCisjZGVmaW5lIEZQR0FfUkVHMTBfSU5UUF9FVEgJCTB4MDIwMAorCisjZGVmaW5lIEZQR0FfUkVHMTBfUkVTRVRfSElTUgkJMHgwMDgwCisjZGVmaW5lIEZQR0FfUkVHMTBfRU5BQkxFX0RJU1BMQVkJMHgwMDQwCisjZGVmaW5lIEZQR0FfUkVHMTBfUkVTRVRfU0RSQU0JCTB4MDAyMAorI2RlZmluZSBGUEdBX1JFRzEwX09QRVJfQk9PVAkJMHgwMDEwCisjZGVmaW5lIEZQR0FfUkVHMTBfU1JBTV9CT09UCQkweDAwMDgKKyNkZWZpbmUgRlBHQV9SRUcxMF9TTUFMTF9CT09UCQkweDAwMDQKKyNkZWZpbmUgRlBHQV9SRUcxMF9GT1JDRV9DT0xBCQkweDAwMDIKKyNkZWZpbmUgRlBHQV9SRUcxMF9DT0xBX01BTlVBTAkJMHgwMDAxCisKKyNkZWZpbmUgRlBHQV9SRUcxMF9TRFJBTV9FTkFCTEUJCTB4MDAyMAorCisjZGVmaW5lIEZQR0FfUkVHMTBfRU5FVF9FTkNPREUyKG4pICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwRik8PDQpIC8qZnJvbSBvY290ZWEgPyovCisjZGVmaW5lIEZQR0FfUkVHMTBfRU5FVF9ERUNPREUyKG4pICgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjQpJjB4MEYpIC8qZnJvbSBvY290ZWEgPyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgTVVYIGNvbnRyb2wKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRlBHQV9SRUcxMgkoRlBHQV9SRUdfQkFTRV9BRERSKzB4MTIpCisKKyNkZWZpbmUgRlBHQV9SRUcxMl9FQkNfQ1RMCQkweDgwMDAKKyNkZWZpbmUgRlBHQV9SRUcxMl9VQVJUMV9DVFNfUlRTCTB4NDAwMAorI2RlZmluZSBGUEdBX1JFRzEyX1VBUlQwX1JYX0VOQUJMRQkweDIwMDAKKyNkZWZpbmUgRlBHQV9SRUcxMl9VQVJUMV9SWF9FTkFCTEUJMHgxMDAwCisjZGVmaW5lIEZQR0FfUkVHMTJfVUFSVDJfUlhfRU5BQkxFCTB4MDgwMAorI2RlZmluZSBGUEdBX1JFRzEyX0VCQ19PVVRfRU5BQkxFCTB4MDQwMAorI2RlZmluZSBGUEdBX1JFRzEyX0dQSU8wX09VVF9FTkFCTEUJMHgwMjAwCisjZGVmaW5lIEZQR0FfUkVHMTJfR1BJTzFfT1VUX0VOQUJMRQkweDAxMDAKKyNkZWZpbmUgRlBHQV9SRUcxMl9HUElPX1NFTEVDVAkJMHgwMDEwCisjZGVmaW5lIEZQR0FfUkVHMTJfR1BJT19DSFJFRwkJMHgwMDA4CisjZGVmaW5lIEZQR0FfUkVHMTJfR1BJT19DTEtfQ0hSRUcJMHgwMDA0CisjZGVmaW5lIEZQR0FfUkVHMTJfR1BJT19PRVRSSQkJMHgwMDAyCisjZGVmaW5lIEZQR0FfUkVHMTJfRUJDX0VSUk9SCQkweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBQQ0kgQ2xvY2sgY29udHJvbAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBGUEdBX1JFRzE2CShGUEdBX1JFR19CQVNFX0FERFIrMHgxNikKKworI2RlZmluZSBGUEdBX1JFRzE2X1BDSV9DTEtfQ1RMMAkJMHg4MDAwCisjZGVmaW5lIEZQR0FfUkVHMTZfUENJX0NMS19DVEwxCQkweDQwMDAKKyNkZWZpbmUgRlBHQV9SRUcxNl9QQ0lfQ0xLX0NUTDIJCTB4MjAwMAorI2RlZmluZSBGUEdBX1JFRzE2X1BDSV9DTEtfQ1RMMwkJMHgxMDAwCisjZGVmaW5lIEZQR0FfUkVHMTZfUENJX0NMS19DVEw0CQkweDA4MDAKKyNkZWZpbmUgRlBHQV9SRUcxNl9QQ0lfQ0xLX0NUTDUJCTB4MDQwMAorI2RlZmluZSBGUEdBX1JFRzE2X1BDSV9DTEtfQ1RMNgkJMHgwMjAwCisjZGVmaW5lIEZQR0FfUkVHMTZfUENJX0NMS19DVEw3CQkweDAxMDAKKyNkZWZpbmUgRlBHQV9SRUcxNl9QQ0lfQ0xLX0NUTDgJCTB4MDA4MAorI2RlZmluZSBGUEdBX1JFRzE2X1BDSV9DTEtfQ1RMOQkJMHgwMDQwCisjZGVmaW5lIEZQR0FfUkVHMTZfUENJX0VYVF9BUkIwCQkweDAwMjAKKyNkZWZpbmUgRlBHQV9SRUcxNl9QQ0lfTU9ERV8xCQkweDAwMTAKKyNkZWZpbmUgRlBHQV9SRUcxNl9QQ0lfVEFSR0VUX01PREUJMHgwMDA4CisjZGVmaW5lIEZQR0FfUkVHMTZfUENJX0lOVFBfTU9ERQkweDAwMDQKKworLyogRkIxIERpdmlzb3Igc2VsZWN0aW9uICovCisjZGVmaW5lIEZQR0FfUkVHMTZfRkIyX0RJVl9NQVNLCQkweDEwMDAKKyNkZWZpbmUgRlBHQV9SRUcxNl9GQjJfRElWX0xPVwkJMHgwMDAwCisjZGVmaW5lIEZQR0FfUkVHMTZfRkIyX0RJVl9ISUdICQkweDEwMDAKKy8qIEZCMiBEaXZpc29yIHNlbGVjdGlvbiAqLworLyogUzMgc3dpdGNoIG9uIEJvYXJkICovCisjZGVmaW5lIEZQR0FfUkVHMTZfRkIxX0RJVl9NQVNLCQkweDIwMDAKKyNkZWZpbmUgRlBHQV9SRUcxNl9GQjFfRElWX0xPVwkJMHgwMDAwCisjZGVmaW5lIEZQR0FfUkVHMTZfRkIxX0RJVl9ISUdICQkweDIwMDAKKy8qIFBDSTAgQ2xvY2sgU2VsZWN0aW9uICovCisvKiBTMyBzd2l0Y2ggb24gQm9hcmQgKi8KKyNkZWZpbmUgRlBHQV9SRUcxNl9QQ0kwX0NMS19NQVNLCTB4MGMwMAorI2RlZmluZSBGUEdBX1JFRzE2X1BDSTBfQ0xLXzMzXzMzCTB4MDAwMAorI2RlZmluZSBGUEdBX1JFRzE2X1BDSTBfQ0xLXzY2XzY2CTB4MDgwMAorI2RlZmluZSBGUEdBX1JFRzE2X1BDSTBfQ0xLXzEwMAkJMHgwNDAwCisjZGVmaW5lIEZQR0FfUkVHMTZfUENJMF9DTEtfMTMzXzMzCTB4MGMwMAorLyogVkNPIERpdmlzb3Igc2VsZWN0aW9uICovCisvKiBTMyBzd2l0Y2ggb24gQm9hcmQgKi8KKyNkZWZpbmUgRlBHQV9SRUcxNl9WQ09fRElWX01BU0sJCTB4YzAwMAorI2RlZmluZSBGUEdBX1JFRzE2X1ZDT19ESVZfNAkJMHgwMDAwCisjZGVmaW5lIEZQR0FfUkVHMTZfVkNPX0RJVl84CQkweDQwMDAKKyNkZWZpbmUgRlBHQV9SRUcxNl9WQ09fRElWXzYJCTB4ODAwMAorI2RlZmluZSBGUEdBX1JFRzE2X1ZDT19ESVZfMTAJCTB4YzAwMAorLyogTWFzdGVyIENsb2NrIFNlbGVjdGlvbiAqLworLyogUzMsIFM0IHN3aXRjaGVzIG9uIEJvYXJkICovCisjZGVmaW5lIEZQR0FfUkVHMTZfTUFTVEVSX0NMS19NQVNLCTB4MDFjMAorI2RlZmluZSBGUEdBX1JFRzE2X01BU1RFUl9DTEtfRVhUCTB4MDAwMAorI2RlZmluZSBGUEdBX1JFRzE2X01BU1RFUl9DTEtfNjZfNjYJMHgwMDQwCisjZGVmaW5lIEZQR0FfUkVHMTZfTUFTVEVSX0NMS181MAkweDAwODAKKyNkZWZpbmUgRlBHQV9SRUcxNl9NQVNURVJfQ0xLXzMzXzMzCTB4MDBjMAorI2RlZmluZSBGUEdBX1JFRzE2X01BU1RFUl9DTEtfMjUJMHgwMTAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUENJIE1pc2NlbGxhbmVvdXMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRlBHQV9SRUcxOAkoRlBHQV9SRUdfQkFTRV9BRERSKzB4MTgpCisKKyNkZWZpbmUgRlBHQV9SRUcxOF9QQ0lfUFJTTlQxCQkweDgwMDAKKyNkZWZpbmUgRlBHQV9SRUcxOF9QQ0lfUFJTTlQyCQkweDQwMDAKKyNkZWZpbmUgRlBHQV9SRUcxOF9QQ0lfSU5UQQkJMHgyMDAwCisjZGVmaW5lIEZQR0FfUkVHMThfUENJX1NMT1QwX0lOVFAJMHgxMDAwCisjZGVmaW5lIEZQR0FfUkVHMThfUENJX1NMT1QxX0lOVFAJMHgwODAwCisjZGVmaW5lIEZQR0FfUkVHMThfUENJX1NMT1QyX0lOVFAJMHgwNDAwCisjZGVmaW5lIEZQR0FfUkVHMThfUENJX1NMT1QzX0lOVFAJMHgwMjAwCisjZGVmaW5lIEZQR0FfUkVHMThfUENJX1BDSTBfVkMJCTB4MDEwMAorI2RlZmluZSBGUEdBX1JFRzE4X1BDSV9QQ0kwX1ZUSDEJMHgwMDgwCisjZGVmaW5lIEZQR0FfUkVHMThfUENJX1BDSTBfVlRIMgkweDAwNDAKKyNkZWZpbmUgRlBHQV9SRUcxOF9QQ0lfUENJMF9WVEgzCTB4MDAyMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFBDSWUgTWlzY2VsbGFuZW91cworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBGUEdBX1JFRzFBCShGUEdBX1JFR19CQVNFX0FERFIrMHgxQSkKKworI2RlZmluZSBGUEdBX1JFRzFBX1BFMF9HTEVECQkweDgwMDAKKyNkZWZpbmUgRlBHQV9SRUcxQV9QRTFfR0xFRAkJMHg0MDAwCisjZGVmaW5lIEZQR0FfUkVHMUFfUEUyX0dMRUQJCTB4MjAwMAorI2RlZmluZSBGUEdBX1JFRzFBX1BFMF9ZTEVECQkweDEwMDAKKyNkZWZpbmUgRlBHQV9SRUcxQV9QRTFfWUxFRAkJMHgwODAwCisjZGVmaW5lIEZQR0FfUkVHMUFfUEUyX1lMRUQJCTB4MDQwMAorI2RlZmluZSBGUEdBX1JFRzFBX1BFMF9QV1JPTgkJMHgwMjAwCisjZGVmaW5lIEZQR0FfUkVHMUFfUEUxX1BXUk9OCQkweDAxMDAKKyNkZWZpbmUgRlBHQV9SRUcxQV9QRTJfUFdST04JCTB4MDA4MAorI2RlZmluZSBGUEdBX1JFRzFBX1BFMF9SRUZDTEtfRU5BQkxFCTB4MDA0MAorI2RlZmluZSBGUEdBX1JFRzFBX1BFMV9SRUZDTEtfRU5BQkxFCTB4MDAyMAorI2RlZmluZSBGUEdBX1JFRzFBX1BFMl9SRUZDTEtfRU5BQkxFCTB4MDAxMAorI2RlZmluZSBGUEdBX1JFRzFBX1BFX1NQUkVBRDAJCTB4MDAwOAorI2RlZmluZSBGUEdBX1JFRzFBX1BFX1NQUkVBRDEJCTB4MDAwNAorI2RlZmluZSBGUEdBX1JFRzFBX1BFX1NFTFNPVVJDRV8wCTB4MDAwMgorI2RlZmluZSBGUEdBX1JFRzFBX1BFX1NFTFNPVVJDRV8xCTB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFBDSWUgTWlzY2VsbGFuZW91cworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBGUEdBX1JFRzFDCShGUEdBX1JFR19CQVNFX0FERFIrMHgxQykKKworI2RlZmluZSBGUEdBX1JFRzFDX1BFMF9ST09UUE9JTlQJMHg4MDAwCisjZGVmaW5lIEZQR0FfUkVHMUNfUEUxX0VORFBPSU5UCQkweDQwMDAKKyNkZWZpbmUgRlBHQV9SRUcxQ19QRTJfRU5EUE9JTlQJCTB4MjAwMAorI2RlZmluZSBGUEdBX1JFRzFDX1BFMF9QUlNOVAkJMHgxMDAwCisjZGVmaW5lIEZQR0FfUkVHMUNfUEUxX1BSU05UCQkweDA4MDAKKyNkZWZpbmUgRlBHQV9SRUcxQ19QRTJfUFJTTlQJCTB4MDQwMAorI2RlZmluZSBGUEdBX1JFRzFDX1BFMF9XQUtFCQkweDAwODAKKyNkZWZpbmUgRlBHQV9SRUcxQ19QRTFfV0FLRQkJMHgwMDQwCisjZGVmaW5lIEZQR0FfUkVHMUNfUEUyX1dBS0UJCTB4MDAyMAorI2RlZmluZSBGUEdBX1JFRzFDX1BFMF9QRVJTVAkJMHgwMDEwCisjZGVmaW5lIEZQR0FfUkVHMUNfUEUxX1BFUlNUCQkweDAwMDgKKyNkZWZpbmUgRlBHQV9SRUcxQ19QRTJfUEVSU1QJCTB4MDAwNAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IERlZmluZXMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUEVSSU9EXzEzM18zM01IWgk3NTAwCS8qIDcsNW5zICovCisjZGVmaW5lIFBFUklPRF8xMDBfMDBNSFoJMTAwMDAJLyogMTBucyAqLworI2RlZmluZSBQRVJJT0RfODNfMzNNSFoJCTEyMDAwCS8qIDEybnMgKi8KKyNkZWZpbmUgUEVSSU9EXzc1XzAwTUhaCQkxMzMzMwkvKiAxMywzMzNucyAqLworI2RlZmluZSBQRVJJT0RfNjZfNjZNSFoJCTE1MDAwCS8qIDE1bnMgKi8KKyNkZWZpbmUgUEVSSU9EXzUwXzAwTUhaCQkyMDAwMAkvKiAyMG5zICovCisjZGVmaW5lIFBFUklPRF8zM18zM01IWgkJMzAwMDAJLyogMzBucyAqLworI2RlZmluZSBQRVJJT0RfMjVfMDBNSFoJCTQwMDAwCS8qIDQwbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9lbnZpcm9ubWVudC5oIGIvaW5jbHVkZS9lbnZpcm9ubWVudC5oCmluZGV4IDQyMmY4MDAuLjI2YjA3MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZW52aXJvbm1lbnQuaAorKysgYi9pbmNsdWRlL2Vudmlyb25tZW50LmgKQEAgLTc5LDYgKzc5LDEwIEBACiAjIGlmZGVmIENGR19FTlZfT0ZGU0VUX1JFRFVORAogIyAgZGVmaW5lIENGR19SRURVTkRBTkRfRU5WSVJPTk1FTlQKICMgZW5kaWYKKyMgaWYgZGVmaW5lZChDT05GSUdfTkFORF9VX0JPT1QpCisvKiBVc2UgZW1iZWRkZWQgZW52aXJvbm1lbnQgaW4gTkFORCBib290IHZlcnNpb25zICovCisjICBkZWZpbmUgRU5WX0lTX0VNQkVEREVECTEKKyMgZW5kaWYKICNlbmRpZiAvKiBDRkdfRU5WX0lTX0lOX05BTkQgKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2V4cG9ydHMuaCBiL2luY2x1ZGUvZXhwb3J0cy5oCmluZGV4IDBlYWY2NmUuLjhmN2Y2MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZXhwb3J0cy5oCisrKyBiL2luY2x1ZGUvZXhwb3J0cy5oCkBAIC0yMCw2ICsyMCw5IEBACiB1bnNpZ25lZCBsb25nIGdldF90aW1lcih1bnNpZ25lZCBsb25nKTsKIHZvaWQgdnByaW50Zihjb25zdCBjaGFyICosIHZhX2xpc3QpOwogdm9pZCBkb19yZXNldCAodm9pZCk7Cit1bnNpZ25lZCBsb25nIHNpbXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLGNoYXIgKiplbmRwLHVuc2lnbmVkIGludCBiYXNlKTsKK2NoYXIgKmdldGVudiAoY2hhciAqbmFtZSk7Cit2b2lkIHNldGVudiAoY2hhciAqdmFybmFtZSwgY2hhciAqdmFydmFsdWUpOwogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0kyQykKIGludCBpMmNfd3JpdGUgKHVjaGFyLCB1aW50LCBpbnQgLCB1Y2hhciogLCBpbnQpOwogaW50IGkyY19yZWFkICh1Y2hhciwgdWludCwgaW50ICwgdWNoYXIqICwgaW50KTsKQEAgLTM3LDcgKzQwLDcgQEAKIAlYRl9NQVgKIH07CiAKLSNkZWZpbmUgWEZfVkVSU0lPTgkyCisjZGVmaW5lIFhGX1ZFUlNJT04JMwogCiAjaWYgZGVmaW5lZChDT05GSUdfSTM4NikKIGV4dGVybiBnZF90ICpnbG9iYWxfZGF0YTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmF0LmggYi9pbmNsdWRlL2ZhdC5oCmluZGV4IDA2NDU0NTguLjkyNjM4ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZmF0LmgKKysrIGIvaW5jbHVkZS9mYXQuaApAQCAtMTc1LDE1ICsxNzUsMTkgQEAKIAlfX3U4ICAgIG5hbWUxMV8xMls0XTsJLyogTGFzdCAyIGNoYXJhY3RlcnMgaW4gbmFtZSAqLwogfSBkaXJfc2xvdDsKIAotLyogUHJpdmF0ZSBmaWxlc3lzdGVtIHBhcmFtZXRlcnMgKi8KKy8qIFByaXZhdGUgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzCisgKgorICogTm90ZTogRkFUIGJ1ZmZlciBoYXMgdG8gYmUgMzIgYml0IGFsaWduZWQKKyAqIChzZWUgRkFUMzIgYWNjZXNzZXMpCisgKi8KIHR5cGVkZWYgc3RydWN0IHsKKwlfX3U4CWZhdGJ1ZltGQVRCVUZTSVpFXTsgLyogQ3VycmVudCBGQVQgYnVmZmVyICovCiAJaW50CWZhdHNpemU7CS8qIFNpemUgb2YgRkFUIGluIGJpdHMgKi8KIAlfX3UxNglmYXRsZW5ndGg7CS8qIExlbmd0aCBvZiBGQVQgaW4gc2VjdG9ycyAqLwogCV9fdTE2CWZhdF9zZWN0OwkvKiBTdGFydGluZyBzZWN0b3Igb2YgdGhlIEZBVCAqLwogCV9fdTE2CXJvb3RkaXJfc2VjdDsJLyogU3RhcnQgc2VjdG9yIG9mIHJvb3QgZGlyZWN0b3J5ICovCiAJX191MTYJY2x1c3Rfc2l6ZTsJLyogU2l6ZSBvZiBjbHVzdGVycyBpbiBzZWN0b3JzICovCiAJc2hvcnQJZGF0YV9iZWdpbjsJLyogVGhlIHNlY3RvciBvZiB0aGUgZmlyc3QgY2x1c3RlciwgY2FuIGJlIG5lZ2F0aXZlICovCi0JX191OAlmYXRidWZbRkFUQlVGU0laRV07IC8qIEN1cnJlbnQgRkFUIGJ1ZmZlciAqLwogCWludAlmYXRidWZudW07CS8qIFVzZWQgYnkgZ2V0X2ZhdGVudCwgaW5pdCB0byAtMSAqLwogfSBmc2RhdGE7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2FsaWxlby9jb3JlLmggYi9pbmNsdWRlL2dhbGlsZW8vY29yZS5oCmluZGV4IDA3MzVkMDcuLjQ5ZjRkZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2FsaWxlby9jb3JlLmgKKysrIGIvaW5jbHVkZS9nYWxpbGVvL2NvcmUuaApAQCAtMTEwLDcgKzExMCwxMCBAQAogI2RlZmluZSBfMUcgICAgICAgICAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBfMkcgICAgICAgICAgICAgMHg4MDAwMDAwMAogCisjaWZuZGVmCUJPT0xfV0FTX0RFRklORUQKKyNkZWZpbmUgQk9PTF9XQVNfREVGSU5FRAogdHlwZWRlZiBlbnVtIF9ib29se2ZhbHNlLHRydWV9IGJvb2w7CisjZW5kaWYKIAogLyogTGl0dGxlIHRvIEJpZyBlbmRpYW4gY29udmVyc2lvbiBtYWNyb3MgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbWFnZS5oIGIvaW5jbHVkZS9pbWFnZS5oCmluZGV4IDEzOWRmMGIuLmVhN2U5NTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW1hZ2UuaAorKysgYi9pbmNsdWRlL2ltYWdlLmgKQEAgLTEyNCw2ICsxMjQsNyBAQAogI2RlZmluZSBJSF9UWVBFX0ZJUk1XQVJFCTUJLyogRmlybXdhcmUgSW1hZ2UJCSovCiAjZGVmaW5lIElIX1RZUEVfU0NSSVBUCQk2CS8qIFNjcmlwdCBmaWxlCQkJKi8KICNkZWZpbmUgSUhfVFlQRV9GSUxFU1lTVEVNCTcJLyogRmlsZXN5c3RlbSBJbWFnZSAoYW55IHR5cGUpCSovCisjZGVmaW5lIElIX1RZUEVfRkxBVERUCQk4CS8qIEJpbmFyeSBGbGF0IERldmljZSBUcmVlIEJsb2IJKi8KIAogLyoKICAqIENvbXByZXNzaW9uIFR5cGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xjZC5oIGIvaW5jbHVkZS9sY2QuaAppbmRleCA3ZTIzNzM2Li5iNjg4NTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xjZC5oCisrKyBiL2luY2x1ZGUvbGNkLmgKQEAgLTE0OCw3ICsxNDgsMTQgQEAKIAogZXh0ZXJuIHZpZGluZm9fdCBwYW5lbF9pbmZvOwogCi0jZW5kaWYgLyogQ09ORklHX01QQzgyMyBvciBDT05GSUdfUFhBMjUwICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NQ0MyMDApCit0eXBlZGVmIHN0cnVjdCB2aWRpbmZvIHsKKwl1c2hvcnQJdmxfY29sOwkJLyogTnVtYmVyIG9mIGNvbHVtbnMgKGkuZS4gMTYwKSAqLworCXVzaG9ydAl2bF9yb3c7CQkvKiBOdW1iZXIgb2Ygcm93cyAoaS5lLiAxMDApICovCisKKwl1X2NoYXIJdmxfYnBpeDsJLyogQml0cyBwZXIgcGl4ZWwsIDAgPSAxICovCit9IHZpZGluZm9fdDsKKyNlbmRpZiAvKiBDT05GSUdfTVBDODIzLCBDT05GSUdfUFhBMjUwIG9yIENPTkZJR19NQ0MyMDAgKi8KIAogLyogVmlkZW8gZnVuY3Rpb25zICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2NvbXBhdC5oIGIvaW5jbHVkZS9saW51eC9tdGQvY29tcGF0LmgKaW5kZXggNDYwY2Q0NS4uZmU1NTA4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvY29tcGF0LmgKQEAgLTMxLDExICszMSwxMyBAQAogI2RlZmluZSBtYXhfdCh0eXBlLHgseSkgXAogCSh7IHR5cGUgX194ID0gKHgpOyB0eXBlIF9feSA9ICh5KTsgX194ID4gX195ID8gX194OiBfX3k7IH0pCiAKKyNpZm5kZWYgQlVHCiAjZGVmaW5lIEJVRygpIGRvIHsgXAogCXByaW50ZigiVS1Cb290IEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQlVHX09OKGNvbmRpdGlvbikgZG8geyBpZiAoY29uZGl0aW9uKSBCVUcoKTsgfSB3aGlsZSgwKQorI2VuZGlmIC8qIEJVRyAqLwogCiAjZGVmaW5lIGxpa2VseSh4KQlfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAxKQogI2RlZmluZSB1bmxpa2VseSh4KQlfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IGE1MjI3MTguLjRiNDg1NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTIsNyArMiw3IEBACiAgKiAgbGludXgvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCiAgKgogICogIENvcHlyaWdodCAoYykgMjAwMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQG12aGkuY29tPgotICogICAgICAgICAgICAgICAgICAgICBTdGV2ZW4gSi4gSGlsbCA8c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbT4KKyAqCQkgICAgICAgU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+CiAgKgkJICAgICAgIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgogICoKICAqICRJZDogbmFuZC5oLHYgMS42OCAyMDA0LzExLzEyIDEwOjQwOjM3IGdsZWl4bmVyIEV4cCAkCkBAIC0xNSwxNSArMTUsMTUgQEAKICAqICAgQ29udGFpbnMgc3RhbmRhcmQgZGVmaW5lcyBhbmQgSURzIGZvciBOQU5EIGZsYXNoIGRldmljZXMKICAqCiAgKiAgQ2hhbmdlbG9nOgotICogICAwMS0zMS0yMDAwIERNVyAgICAgQ3JlYXRlZAotICogICAwOS0xOC0yMDAwIFNKSCAgICAgTW92ZWQgc3RydWN0dXJlIG91dCBvZiB0aGUgRGlzay1Pbi1DaGlwIGRyaXZlcnMKKyAqICAgMDEtMzEtMjAwMCBETVcJQ3JlYXRlZAorICogICAwOS0xOC0yMDAwIFNKSAlNb3ZlZCBzdHJ1Y3R1cmUgb3V0IG9mIHRoZSBEaXNrLU9uLUNoaXAgZHJpdmVycwogICoJCQlzbyBpdCBjYW4gYmUgdXNlZCBieSBvdGhlciBOQU5EIGZsYXNoIGRldmljZQogICoJCQlkcml2ZXJzLiBJIGFsc28gY2hhbmdlZCB0aGUgY29weXJpZ2h0IHNpbmNlIG5vbmUKICAqCQkJb2YgdGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3BlY2lmaWMKICAqCQkJdG8gRG9DIGRldmljZXMuIERhdmlkIGNhbiB3aGFjayBtZSB3aXRoIGEgYmFzZWJhbGwKICAqCQkJYmF0IGxhdGVyIGlmIEkgZGlkIHNvbWV0aGluZyBuYXVnaHR5LgotICogICAxMC0xMS0yMDAwIFNKSCAgICAgQWRkZWQgcHJpdmF0ZSBOQU5EIGZsYXNoIHN0cnVjdHVyZSBmb3IgZHJpdmVyCi0gKiAgIDEwLTI0LTIwMDAgU0pIICAgICBBZGRlZCBwcm90b3R5cGUgZm9yICduYW5kX3NjYW4nIGZ1bmN0aW9uCisgKiAgIDEwLTExLTIwMDAgU0pICUFkZGVkIHByaXZhdGUgTkFORCBmbGFzaCBzdHJ1Y3R1cmUgZm9yIGRyaXZlcgorICogICAxMC0yNC0yMDAwIFNKSAlBZGRlZCBwcm90b3R5cGUgZm9yICduYW5kX3NjYW4nIGZ1bmN0aW9uCiAgKiAgIDEwLTI5LTIwMDEgVEcJY2hhbmdlZCBuYW5kX2NoaXAgc3RydWN0dXJlIHRvIHN1cHBvcnQKICAqCQkJaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYWNjZXNzaW5nIGNvbnRyb2wgbGluZXMKICAqICAgMDItMjEtMjAwMiBURwlhZGRlZCBzdXBwb3J0IGZvciBkaWZmZXJlbnQgcmVhZC93cml0ZSBhZHJlc3MgYW5kCkBAIC0zNiw3ICszNiw3IEBACiAgKgkJCUNPTkZJR19NVERfTkFORF9FQ0NfSkZGUzIgaXMgbm90IHNldAogICogICAwOC0xMC0yMDAyIFRHCWV4dGVuc2lvbnMgdG8gbmFuZF9jaGlwIHN0cnVjdHVyZSB0byBzdXBwb3J0IEhXLUVDQwogICoKLSAqICAgMDgtMjktMjAwMiB0Z2x4IAluYW5kX2NoaXAgc3RydWN0dXJlOiBkYXRhX3BvaSBmb3Igc2VsZWN0aW5nCisgKiAgIDA4LTI5LTIwMDIgdGdseAluYW5kX2NoaXAgc3RydWN0dXJlOiBkYXRhX3BvaSBmb3Igc2VsZWN0aW5nCiAgKgkJCWludGVybmFsIC8gZnMtZHJpdmVyIGJ1ZmZlcgogICoJCQlzdXBwb3J0IGZvciA2Ynl0ZS81MTJieXRlIGhhcmR3YXJlIEVDQwogICoJCQlyZWFkX2VjYywgd3JpdGVfZWNjIGV4dGVuZGVkIGZvciBkaWZmZXJlbnQgb29iLWxheW91dApAQCAtNDUsOCArNDUsOCBAQAogICogIDExLTI1LTIwMDIgdGdseAlBZGRlZCBNYW51ZmFjdHVyZXIgY29kZSBGVUpJVFNVLCBOQVRJT05BTAogICoJCQlTcGxpdCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRCBzdHJ1Y3R1cmVzCiAgKgotICogIDAyLTA4LTIwMDQgdGdseCAJYWRkZWQgb3B0aW9uIGZpZWxkIHRvIG5hbmQgc3RydWN0dXJlIGZvciBjaGlwIGFub21hbGl0aWVzCi0gKiAgMDUtMjUtMjAwNCB0Z2x4IAlhZGRlZCBiYWQgYmxvY2sgdGFibGUgc3VwcG9ydCwgU1QtTUlDUk8gbWFudWZhY3R1cmVyIGlkCisgKiAgMDItMDgtMjAwNCB0Z2x4CWFkZGVkIG9wdGlvbiBmaWVsZCB0byBuYW5kIHN0cnVjdHVyZSBmb3IgY2hpcCBhbm9tYWxpdGllcworICogIDA1LTI1LTIwMDQgdGdseAlhZGRlZCBiYWQgYmxvY2sgdGFibGUgc3VwcG9ydCwgU1QtTUlDUk8gbWFudWZhY3R1cmVyIGlkCiAgKgkJCXVwZGF0ZSBvZiBuYW5kX2NoaXAgc3RydWN0dXJlIGRlc2NyaXB0aW9uCiAgKi8KICNpZm5kZWYgX19MSU5VWF9NVERfTkFORF9ICkBAIC03NSw3ICs3NSw3IEBACiAgKiBDb25zdGFudHMgZm9yIGhhcmR3YXJlIHNwZWNpZmljIENMRS9BTEUvTkNFIGZ1bmN0aW9uCiAqLwogLyogU2VsZWN0IHRoZSBjaGlwIGJ5IHNldHRpbmcgbkNFIHRvIGxvdyAqLwotI2RlZmluZSBOQU5EX0NUTF9TRVROQ0UgCTEKKyNkZWZpbmUgTkFORF9DVExfU0VUTkNFCQkxCiAvKiBEZXNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBoaWdoICovCiAjZGVmaW5lIE5BTkRfQ1RMX0NMUk5DRQkJMgogLyogU2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGhpZ2ggKi8KQEAgLTIxNSw3ICsyMTUsNyBAQAogI2lmIDAKIC8qKgogICogc3RydWN0IG5hbmRfaHdfY29udHJvbCAtIENvbnRyb2wgc3RydWN0dXJlIGZvciBoYXJkd2FyZSBjb250cm9sbGVyIChlLmcgRUNDIGdlbmVyYXRvcikgc2hhcmVkIGFtb25nIGluZGVwZW5kZW5kIGRldmljZXMKLSAqIEBsb2NrOiAgICAgICAgICAgICAgIHByb3RlY3Rpb24gbG9jaworICogQGxvY2s6CQlwcm90ZWN0aW9uIGxvY2sKICAqIEBhY3RpdmU6CQl0aGUgbXRkIGRldmljZSB3aGljaCBob2xkcyB0aGUgY29udHJvbGxlciBjdXJyZW50bHkKICAqLwogc3RydWN0IG5hbmRfaHdfY29udHJvbCB7CkBAIC0yNDQsMjAgKzI0NCwyMCBAQAogICoJCQlpcyByZWFkIGZyb20gdGhlIGNoaXAgc3RhdHVzIHJlZ2lzdGVyCiAgKiBAY21kZnVuYzoJCVtSRVBMQUNFQUJMRV0gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igd3JpdGluZyBjb21tYW5kcyB0byB0aGUgY2hpcAogICogQHdhaXRmdW5jOgkJW1JFUExBQ0VBQkxFXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciB3YWl0IG9uIHJlYWR5Ci0gKiBAY2FsY3VsYXRlX2VjYzogCVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gZm9yIGVjYyBjYWxjdWxhdGlvbiBvciByZWFkYmFjayBmcm9tIGVjYyBoYXJkd2FyZQorICogQGNhbGN1bGF0ZV9lY2M6CVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gZm9yIGVjYyBjYWxjdWxhdGlvbiBvciByZWFkYmFjayBmcm9tIGVjYyBoYXJkd2FyZQogICogQGNvcnJlY3RfZGF0YToJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiBmb3IgZWNjIGNvcnJlY3Rpb24sIG1hdGNoaW5nIHRvIGVjYyBnZW5lcmF0b3IgKHN3L2h3KQogICogQGVuYWJsZV9od2VjYzoJW0JPQVJEU1BFQ0lGSUNdIGZ1bmN0aW9uIHRvIGVuYWJsZSAocmVzZXQpIGhhcmR3YXJlIGVjYyBnZW5lcmF0b3IuIE11c3Qgb25seQogICoJCQliZSBwcm92aWRlZCBpZiBhIGhhcmR3YXJlIEVDQyBpcyBhdmFpbGFibGUKICAqIEBlcmFzZV9jbWQ6CQlbSU5URVJOXSBlcmFzZSBjb21tYW5kIHdyaXRlIGZ1bmN0aW9uLCBzZWxlY3RhYmxlIGR1ZSB0byBBTkQgc3VwcG9ydAogICogQHNjYW5fYmJ0OgkJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiB0byBzY2FuIGJhZCBibG9jayB0YWJsZQogICogQGVjY21vZGU6CQlbQk9BUkRTUEVDSUZJQ10gbW9kZSBvZiBlY2MsIHNlZSBkZWZpbmVzCi0gKiBAZWNjc2l6ZTogCQlbSU5URVJOXSBkYXRhYnl0ZXMgdXNlZCBwZXIgZWNjLWNhbGN1bGF0aW9uCi0gKiBAZWNjYnl0ZXM6IAkJW0lOVEVSTl0gbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIgZWNjLWNhbGN1bGF0aW9uIHN0ZXAKKyAqIEBlY2NzaXplOgkJW0lOVEVSTl0gZGF0YWJ5dGVzIHVzZWQgcGVyIGVjYy1jYWxjdWxhdGlvbgorICogQGVjY2J5dGVzOgkJW0lOVEVSTl0gbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIgZWNjLWNhbGN1bGF0aW9uIHN0ZXAKICAqIEBlY2NzdGVwczoJCVtJTlRFUk5dIG51bWJlciBvZiBlY2MgY2FsY3VsYXRpb24gc3RlcHMgcGVyIHBhZ2UKICAqIEBjaGlwX2RlbGF5OgkJW0JPQVJEU1BFQ0lGSUNdIGNoaXAgZGVwZW5kZW50IGRlbGF5IGZvciB0cmFuc2ZlcmluZyBkYXRhIGZyb20gYXJyYXkgdG8gcmVhZCByZWdzICh0UikKICAqIEBjaGlwX2xvY2s6CQlbSU5URVJOXSBzcGlubG9jayB1c2VkIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoaXMgc3RydWN0dXJlIGFuZCB0aGUgY2hpcAogICogQHdxOgkJCVtJTlRFUk5dIHdhaXQgcXVldWUgdG8gc2xlZXAgb24gaWYgYSBOQU5EIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcwotICogQHN0YXRlOiAJCVtJTlRFUk5dIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOQU5EIGRldmljZQorICogQHN0YXRlOgkJW0lOVEVSTl0gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIE5BTkQgZGV2aWNlCiAgKiBAcGFnZV9zaGlmdDoJCVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gYSBwYWdlIChjb2x1bW4gYWRkcmVzcyBiaXRzKQogICogQHBoeXNfZXJhc2Vfc2hpZnQ6CVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gYSBwaHlzaWNhbCBlcmFzZWJsb2NrCiAgKiBAYmJ0X2VyYXNlX3NoaWZ0OglbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgYmJ0IGVudHJ5CkBAIC0yODQsNyArMjg0LDcgQEAKIAogc3RydWN0IG5hbmRfY2hpcCB7CiAJdm9pZCAgX19pb21lbQkqSU9fQUREUl9SOwotCXZvaWQgIF9faW9tZW0gCSpJT19BRERSX1c7CisJdm9pZCAgX19pb21lbQkqSU9fQUREUl9XOwogCiAJdV9jaGFyCQkoKnJlYWRfYnl0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQpOwogCXZvaWQJCSgqd3JpdGVfYnl0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKTsKQEAgLTI5NywxMiArMjk3LDEyIEBACiAJdm9pZAkJKCpzZWxlY3RfY2hpcCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKTsKIAlpbnQJCSgqYmxvY2tfYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgaW50IGdldGNoaXApOwogCWludAkJKCpibG9ja19tYXJrYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7Ci0Jdm9pZCAJCSgqaHdjb250cm9sKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7Ci0JaW50ICAJCSgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0Jdm9pZCAJCSgqY21kZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpOwotCWludCAJCSgqd2FpdGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUpOworCXZvaWQJCSgqaHdjb250cm9sKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7CisJaW50CQkoKmRldl9yZWFkeSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworCXZvaWQJCSgqY21kZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpOworCWludAkJKCp3YWl0ZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSk7CiAJaW50CQkoKmNhbGN1bGF0ZV9lY2MpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSk7Ci0JaW50IAkJKCpjb3JyZWN0X2RhdGEpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYyk7CisJaW50CQkoKmNvcnJlY3RfZGF0YSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LCB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKTsKIAl2b2lkCQkoKmVuYWJsZV9od2VjYykoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKTsKIAl2b2lkCQkoKmVyYXNlX2NtZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKTsKIAlpbnQJCSgqc2Nhbl9iYnQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKQEAgLTMxMCwxNyArMzEwLDE3IEBACiAJaW50CQllY2NzaXplOwogCWludAkJZWNjYnl0ZXM7CiAJaW50CQllY2NzdGVwczsKLQlpbnQgCQljaGlwX2RlbGF5OworCWludAkJY2hpcF9kZWxheTsKICNpZiAwCiAJc3BpbmxvY2tfdAljaGlwX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7Ci0JbmFuZF9zdGF0ZV90IAlzdGF0ZTsKKwluYW5kX3N0YXRlX3QJc3RhdGU7CiAjZW5kaWYKLQlpbnQgCQlwYWdlX3NoaWZ0OworCWludAkJcGFnZV9zaGlmdDsKIAlpbnQJCXBoeXNfZXJhc2Vfc2hpZnQ7CiAJaW50CQliYnRfZXJhc2Vfc2hpZnQ7CiAJaW50CQljaGlwX3NoaWZ0OwotCXVfY2hhciAJCSpkYXRhX2J1ZjsKKwl1X2NoYXIJCSpkYXRhX2J1ZjsKIAl1X2NoYXIJCSpvb2JfYnVmOwogCWludAkJb29iZGlydHk7CiAJdV9jaGFyCQkqZGF0YV9wb2k7CkBAIC0zMzUsNyArMzM1LDcgQEAKIAlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJidF90ZDsKIAlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJidF9tZDsKIAlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJhZGJsb2NrX3BhdHRlcm47Ci0Jc3RydWN0IG5hbmRfaHdfY29udHJvbCAgKmNvbnRyb2xsZXI7CisJc3RydWN0IG5hbmRfaHdfY29udHJvbAkqY29udHJvbGxlcjsKIAl2b2lkCQkqcHJpdjsKIH07CiAKQEAgLTM1MiwxNCArMzUyLDE0IEBACiAvKioKICAqIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiAtIE5BTkQgRmxhc2ggRGV2aWNlIElEIFN0cnVjdHVyZQogICoKLSAqIEBuYW1lOiAgCUlkZW50aWZ5IHRoZSBkZXZpY2UgdHlwZQotICogQGlkOiAgIAlkZXZpY2UgSUQgY29kZQotICogQHBhZ2VzaXplOiAgCVBhZ2VzaXplIGluIGJ5dGVzLiBFaXRoZXIgMjU2IG9yIDUxMiBvciAwCisgKiBAbmFtZToJSWRlbnRpZnkgdGhlIGRldmljZSB0eXBlCisgKiBAaWQ6CQlkZXZpY2UgSUQgY29kZQorICogQHBhZ2VzaXplOglQYWdlc2l6ZSBpbiBieXRlcy4gRWl0aGVyIDI1NiBvciA1MTIgb3IgMAogICoJCUlmIHRoZSBwYWdlc2l6ZSBpcyAwLCB0aGVuIHRoZSByZWFsIHBhZ2VzaXplCiAgKgkJYW5kIHRoZSBlcmFzZWl6ZSBhcmUgZGV0ZXJtaW5lZCBmcm9tIHRoZQogICoJCWV4dGVuZGVkIGlkIGJ5dGVzIGluIHRoZSBjaGlwCi0gKiBAZXJhc2VzaXplOiAJU2l6ZSBvZiBhbiBlcmFzZSBibG9jayBpbiB0aGUgZmxhc2ggZGV2aWNlLgotICogQGNoaXBzaXplOiAgCVRvdGFsIGNoaXBzaXplIGluIE1lZ2EgQnl0ZXMKKyAqIEBlcmFzZXNpemU6CVNpemUgb2YgYW4gZXJhc2UgYmxvY2sgaW4gdGhlIGZsYXNoIGRldmljZS4KKyAqIEBjaGlwc2l6ZToJVG90YWwgY2hpcHNpemUgaW4gTWVnYSBCeXRlcwogICogQG9wdGlvbnM6CUJpdGZpZWxkIHRvIHN0b3JlIGNoaXAgcmVsZXZhbnQgb3B0aW9ucwogICovCiBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgewpAQCAtMzc0LDcgKzM3NCw3IEBACiAvKioKICAqIHN0cnVjdCBuYW5kX21hbnVmYWN0dXJlcnMgLSBOQU5EIEZsYXNoIE1hbnVmYWN0dXJlciBJRCBTdHJ1Y3R1cmUKICAqIEBuYW1lOglNYW51ZmFjdHVyZXIgbmFtZQotICogQGlkOiAJbWFudWZhY3R1cmVyIElEIGNvZGUgb2YgZGV2aWNlLgorICogQGlkOgkJbWFudWZhY3R1cmVyIElEIGNvZGUgb2YgZGV2aWNlLgogKi8KIHN0cnVjdCBuYW5kX21hbnVmYWN0dXJlcnMgewogCWludCBpZDsKQEAgLTM5OCw3ICszOTgsNyBAQAogICoJCWJsb2NrcyBpcyByZXNlcnZlZCBhdCB0aGUgZW5kIG9mIHRoZSBkZXZpY2Ugd2hlcmUgdGhlIHRhYmxlcyBhcmUKICAqCQl3cml0dGVuLgogICogQHJlc2VydmVkX2Jsb2NrX2NvZGU6IGlmIG5vbi0wLCB0aGlzIHBhdHRlcm4gZGVub3RlcyBhIHJlc2VydmVkIChyYXRoZXIgdGhhbgotICogICAgICAgICAgICAgIGJhZCkgYmxvY2sgaW4gdGhlIHN0b3JlZCBiYnQKKyAqCQliYWQpIGJsb2NrIGluIHRoZSBzdG9yZWQgYmJ0CiAgKiBAcGF0dGVybjoJcGF0dGVybiB0byBpZGVudGlmeSBiYWQgYmxvY2sgdGFibGUgb3IgZmFjdG9yeSBtYXJrZWQgZ29vZCAvCiAgKgkJYmFkIGJsb2NrcywgY2FuIGJlIE5VTEwsIGlmIGxlbiA9IDAKICAqCkBAIC00MTIsMTEgKzQxMiwxMSBAQAogCWludAlwYWdlc1tOQU5EX01BWF9DSElQU107CiAJaW50CW9mZnM7CiAJaW50CXZlcm9mZnM7Ci0JdWludDhfdAl2ZXJzaW9uW05BTkRfTUFYX0NISVBTXTsKKwl1aW50OF90IHZlcnNpb25bTkFORF9NQVhfQ0hJUFNdOwogCWludAlsZW47Ci0JaW50IAltYXhibG9ja3M7CisJaW50CW1heGJsb2NrczsKIAlpbnQJcmVzZXJ2ZWRfYmxvY2tfY29kZTsKLQl1aW50OF90CSpwYXR0ZXJuOworCXVpbnQ4X3QgKnBhdHRlcm47CiB9OwogCiAvKiBPcHRpb25zIGZvciB0aGUgYmFkIGJsb2NrIHRhYmxlIGRlc2NyaXB0b3JzICovCkBAIC00MjgsNyArNDI4LDcgQEAKICNkZWZpbmUgTkFORF9CQlRfNEJJVAkJMHgwMDAwMDAwNAogI2RlZmluZSBOQU5EX0JCVF84QklUCQkweDAwMDAwMDA4CiAvKiBUaGUgYmFkIGJsb2NrIHRhYmxlIGlzIGluIHRoZSBsYXN0IGdvb2QgYmxvY2sgb2YgdGhlIGRldmljZSAqLwotI2RlZmluZQlOQU5EX0JCVF9MQVNUQkxPQ0sJMHgwMDAwMDAxMAorI2RlZmluZSBOQU5EX0JCVF9MQVNUQkxPQ0sJMHgwMDAwMDAxMAogLyogVGhlIGJidCBpcyBhdCB0aGUgZ2l2ZW4gcGFnZSwgZWxzZSB3ZSBtdXN0IHNjYW4gZm9yIHRoZSBiYnQgKi8KICNkZWZpbmUgTkFORF9CQlRfQUJTUEFHRQkweDAwMDAwMDIwCiAvKiBUaGUgYmJ0IGlzIGF0IHRoZSBnaXZlbiBwYWdlLCBlbHNlIHdlIG11c3Qgc2NhbiBmb3IgdGhlIGJidCAqLwpAQCAtNDUxLDcgKzQ1MSw3IEBACiAjZGVmaW5lIE5BTkRfQkJUX1NDQU4yTkRQQUdFCTB4MDAwMDQwMDAKIAogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB0byBzY2FuIGZvciBhIGJidCAqLwotI2RlZmluZSBOQU5EX0JCVF9TQ0FOX01BWEJMT0NLUwk0CisjZGVmaW5lIE5BTkRfQkJUX1NDQU5fTUFYQkxPQ0tTIDQKIAogZXh0ZXJuIGludCBuYW5kX3NjYW5fYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCk7CiBleHRlcm4gaW50IG5hbmRfdXBkYXRlX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25kZmMuaCBiL2luY2x1ZGUvbGludXgvbXRkL25kZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDU1OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmRmYy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9tdGQvbmRmYy5oCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNiBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBJbmZvOgorICogICBDb250YWlucyBkZWZpbmVzLCBkYXRhc3RydWN0dXJlcyBmb3IgbmRmYyBuYW5kIGNvbnRyb2xsZXIKKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9NVERfTkRGQ19ICisjZGVmaW5lIF9fTElOVVhfTVREX05ERkNfSAorCisvKiBOREZDIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE5ERkNfQ01ECQkweDAwCisjZGVmaW5lIE5ERkNfQUxFCQkweDA0CisjZGVmaW5lIE5ERkNfREFUQQkJMHgwOAorI2RlZmluZSBOREZDX0VDQwkJMHgxMAorI2RlZmluZSBOREZDX0JDRkcwCQkweDMwCisjZGVmaW5lIE5ERkNfQkNGRzEJCTB4MzQKKyNkZWZpbmUgTkRGQ19CQ0ZHMgkJMHgzOAorI2RlZmluZSBOREZDX0JDRkczCQkweDNjCisjZGVmaW5lIE5ERkNfQ0NSCQkweDQwCisjZGVmaW5lIE5ERkNfU1RBVAkJMHg0NAorI2RlZmluZSBOREZDX0hXQ1RMCQkweDQ4CisjZGVmaW5lIE5ERkNfUkVWSUQJCTB4NTAKKworI2RlZmluZSBOREZDX1NUQVRfSVNfUkVBRFkJMHgwMTAwMDAwMAorCisjZGVmaW5lIE5ERkNfQ0NSX1JFU0VUX0NFCTB4ODAwMDAwMDAgLyogQ0UgUmVzZXQgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUkVTRVRfRUNDCTB4NDAwMDAwMDAgLyogRUNDIFJlc2V0ICovCisjZGVmaW5lIE5ERkNfQ0NSX1JJRQkJMHgyMDAwMDAwMCAvKiBJbnRlcnJ1cHQgRW5hYmxlIG9uIERldmljZSBSZHkgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUkVOCQkweDEwMDAwMDAwIC8qIEVuYWJsZSB3YWl0IGZvciBSZHkgaW4gTGluZWFyUiAqLworI2RlZmluZSBOREZDX0NDUl9ST01FTgkJMHgwODAwMDAwMCAvKiBFbmFibGUgUk9NIEluIExpbmVhclIgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJFCQkweDA0MDAwMDAwIC8qIEF1dG8tUmVhZCBFbmFibGUgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQlMoeCkJCSgoKHgpICYgMHgzKSA8PCAyNCkgLyogU2VsZWN0IEJhbmsgb24gQ0VbeF0gKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQlNfTUFTSwkweDAzMDAwMDAwIC8qIFNlbGVjdCBCYW5rICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMwCQkweDAwMDAwMDAwIC8qIDMgQWRkciwgMSBDb2wgMiBSb3cgNTEyYiBwYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMxCQkweDAwMDAxMDAwIC8qIDQgQWRkciwgMSBDb2wgMyBSb3cgNTEyYiBwYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMyCQkweDAwMDAyMDAwIC8qIDQgQWRkciwgMiBDb2wgMiBSb3cgMksgcGFnZSAqLworI2RlZmluZSBOREZDX0NDUl9BUkFDMwkJMHgwMDAwMzAwMCAvKiA1IEFkZHIsIDIgQ29sIDMgUm93IDJLIHBhZ2UgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJBQ19NQVNLCTB4MDAwMDMwMDAgLyogQXV0by1SZWFkIG1vZGUgQWRkciBDeWNsZXMgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUlBHCQkweDAwMDBDMDAwIC8qIEF1dG8tUmVhZCBQYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0VCQ0MJCTB4MDAwMDAwMDQgLyogRUJDIENvbmZpZ3VyYXRpb24gQ29tcGxldGVkICovCisjZGVmaW5lIE5ERkNfQ0NSX0RIQwkJMHgwMDAwMDAwMiAvKiBEaXJlY3QgSGFyZHdhcmUgQ29udHJvbCBFbmFibGUgKi8KKworI2RlZmluZSBOREZDX0J4Q0ZHX0VOCQkweDgwMDAwMDAwIC8qIEJhbmsgRW5hYmxlICovCisjZGVmaW5lIE5ERkNfQnhDRkdfQ0VECQkweDQwMDAwMDAwIC8qIG5DRSBTdHlsZSAqLworI2RlZmluZSBOREZDX0J4Q0ZHX1NaX01BU0sJMHgwODAwMDAwMCAvKiBCYW5rIFNpemUgKi8KKyNkZWZpbmUgTkRGQ19CeENGR19TWl84QklUCTB4MDAwMDAwMDAgLyogOGJpdCAqLworI2RlZmluZSBOREZDX0J4Q0ZHX1NaXzE2QklUCTB4MDgwMDAwMDAgLyogMTZiaXQgKi8KKworI2RlZmluZSBOREZDX01BWF9CQU5LUwkJNAorCitzdHJ1Y3QgbmRmY19jb250cm9sbGVyX3NldHRpbmdzIHsKKwl1aW50MzJfdAljY3Jfc2V0dGluZ3M7CisJdWludDY0X3QJbmRmY19lcnBuOworfTsKKworc3RydWN0IG5kZmNfY2hpcF9zZXR0aW5ncyB7CisJdWludDMyX3QJYmFua19zZXR0aW5nczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tcGM1eHh4LmggYi9pbmNsdWRlL21wYzV4eHguaAppbmRleCA1MGE2YWMxLi4xZDIwZDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21wYzV4eHguaAorKysgYi9pbmNsdWRlL21wYzV4eHguaApAQCAtMjMyLDIzICsyMzIsOTIgQEAKICNkZWZpbmUgTVBDNVhYWF9JQ1RMX1BFUl9TVFMJKE1QQzVYWFhfSUNUTCArIDB4MDAzMCkKICNkZWZpbmUgTVBDNVhYWF9JQ1RMX0JVU19TVFMJKE1QQzVYWFhfSUNUTCArIDB4MDAzOCkKIAorI2RlZmluZSBOUl9JUlFTCQkJNjQKKworLyogSVJRIG1hcHBpbmcgLSB0aGVzZSBhcmUgb3VyIGxvZ2ljYWwgSVJRIG51bWJlcnMgKi8KKyNkZWZpbmUgTVBDNVhYWF9DUklUX0lSUV9OVU0JNAorI2RlZmluZSBNUEM1WFhYX01BSU5fSVJRX05VTQkxNworI2RlZmluZSBNUEM1WFhYX1NETUFfSVJRX05VTQkxNworI2RlZmluZSBNUEM1WFhYX1BFUlBfSVJRX05VTQkyMworCisjZGVmaW5lIE1QQzVYWFhfQ1JJVF9JUlFfQkFTRQkxCisjZGVmaW5lIE1QQzVYWFhfTUFJTl9JUlFfQkFTRQkoTVBDNVhYWF9DUklUX0lSUV9CQVNFICsgTVBDNVhYWF9DUklUX0lSUV9OVU0pCisjZGVmaW5lIE1QQzVYWFhfU0RNQV9JUlFfQkFTRQkoTVBDNVhYWF9NQUlOX0lSUV9CQVNFICsgTVBDNVhYWF9NQUlOX0lSUV9OVU0pCisjZGVmaW5lIE1QQzVYWFhfUEVSUF9JUlFfQkFTRQkoTVBDNVhYWF9TRE1BX0lSUV9CQVNFICsgTVBDNVhYWF9TRE1BX0lSUV9OVU0pCisKKyNkZWZpbmUgTVBDNVhYWF9JUlEwCQkJKE1QQzVYWFhfQ1JJVF9JUlFfQkFTRSArIDApCisjZGVmaW5lIE1QQzVYWFhfU0xJQ0VfVElNRVJfMF9JUlEJKE1QQzVYWFhfQ1JJVF9JUlFfQkFTRSArIDEpCisjZGVmaW5lIE1QQzVYWFhfSElfSU5UX0lSUQkJKE1QQzVYWFhfQ1JJVF9JUlFfQkFTRSArIDIpCisjZGVmaW5lIE1QQzVYWFhfQ0NTX0lSUQkJCShNUEM1WFhYX0NSSVRfSVJRX0JBU0UgKyAzKQorCisjZGVmaW5lIE1QQzVYWFhfSVJRMQkJCShNUEM1WFhYX01BSU5fSVJRX0JBU0UgKyAxKQorI2RlZmluZSBNUEM1WFhYX0lSUTIJCQkoTVBDNVhYWF9NQUlOX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgTVBDNVhYWF9JUlEzCQkJKE1QQzVYWFhfTUFJTl9JUlFfQkFTRSArIDMpCisjZGVmaW5lIE1QQzVYWFhfUlRDX1BJTlRfSVJRCQkoTVBDNVhYWF9NQUlOX0lSUV9CQVNFICsgNSkKKyNkZWZpbmUgTVBDNVhYWF9SVENfU0lOVF9JUlEJCShNUEM1WFhYX01BSU5fSVJRX0JBU0UgKyA2KQorI2RlZmluZSBNUEM1WFhYX1JUQ19HUElPX1NURF9JUlEJKE1QQzVYWFhfTUFJTl9JUlFfQkFTRSArIDcpCisjZGVmaW5lIE1QQzVYWFhfUlRDX0dQSU9fV0tVUF9JUlEJKE1QQzVYWFhfTUFJTl9JUlFfQkFTRSArIDgpCisjZGVmaW5lIE1QQzVYWFhfVE1SMF9JUlEJCShNUEM1WFhYX01BSU5fSVJRX0JBU0UgKyA5KQorI2RlZmluZSBNUEM1WFhYX1RNUjFfSVJRCQkoTVBDNVhYWF9NQUlOX0lSUV9CQVNFICsgMTApCisjZGVmaW5lIE1QQzVYWFhfVE1SMl9JUlEJCShNUEM1WFhYX01BSU5fSVJRX0JBU0UgKyAxMSkKKyNkZWZpbmUgTVBDNVhYWF9UTVIzX0lSUQkJKE1QQzVYWFhfTUFJTl9JUlFfQkFTRSArIDEyKQorI2RlZmluZSBNUEM1WFhYX1RNUjRfSVJRCQkoTVBDNVhYWF9NQUlOX0lSUV9CQVNFICsgMTMpCisjZGVmaW5lIE1QQzVYWFhfVE1SNV9JUlEJCShNUEM1WFhYX01BSU5fSVJRX0JBU0UgKyAxNCkKKyNkZWZpbmUgTVBDNVhYWF9UTVI2X0lSUQkJKE1QQzVYWFhfTUFJTl9JUlFfQkFTRSArIDE1KQorI2RlZmluZSBNUEM1WFhYX1RNUjdfSVJRCQkoTVBDNVhYWF9NQUlOX0lSUV9CQVNFICsgMTYpCisKKyNkZWZpbmUgTVBDNVhYWF9TRE1BX0lSUQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDApCisjZGVmaW5lIE1QQzVYWFhfUFNDMV9JUlEJCShNUEM1WFhYX1BFUlBfSVJRX0JBU0UgKyAxKQorI2RlZmluZSBNUEM1WFhYX1BTQzJfSVJRCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgTVBDNVhYWF9QU0MzX0lSUQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDMpCisjZGVmaW5lIE1QQzVYWFhfUFNDNl9JUlEJCShNUEM1WFhYX1BFUlBfSVJRX0JBU0UgKyA0KQorI2RlZmluZSBNUEM1WFhYX0lSREFfSVJRCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgNCkKKyNkZWZpbmUgTVBDNVhYWF9GRUNfSVJRCQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDUpCisjZGVmaW5lIE1QQzVYWFhfVVNCX0lSUQkJCShNUEM1WFhYX1BFUlBfSVJRX0JBU0UgKyA2KQorI2RlZmluZSBNUEM1WFhYX0FUQV9JUlEJCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgNykKKyNkZWZpbmUgTVBDNVhYWF9QQ0lfQ05UUkxfSVJRCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgOCkKKyNkZWZpbmUgTVBDNVhYWF9QQ0lfU0NJUlhfSVJRCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgOSkKKyNkZWZpbmUgTVBDNVhYWF9QQ0lfU0NJVFhfSVJRCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgMTApCisjZGVmaW5lIE1QQzVYWFhfUFNDNF9JUlEJCShNUEM1WFhYX1BFUlBfSVJRX0JBU0UgKyAxMSkKKyNkZWZpbmUgTVBDNVhYWF9QU0M1X0lSUQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDEyKQorI2RlZmluZSBNUEM1WFhYX1NQSV9NT0RGX0lSUQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDEzKQorI2RlZmluZSBNUEM1WFhYX1NQSV9TUElGX0lSUQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDE0KQorI2RlZmluZSBNUEM1WFhYX0kyQzFfSVJRCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgMTUpCisjZGVmaW5lIE1QQzVYWFhfSTJDMl9JUlEJCShNUEM1WFhYX1BFUlBfSVJRX0JBU0UgKyAxNikKKyNkZWZpbmUgTVBDNVhYWF9NU0NBTjFfSVJRCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgMTcpCisjZGVmaW5lIE1QQzVYWFhfTVNDQU4yX0lSUQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDE4KQorI2RlZmluZSBNUEM1WFhYX0lSX1JYX0lSUQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDE5KQorI2RlZmluZSBNUEM1WFhYX0lSX1RYX0lSUQkJKE1QQzVYWFhfUEVSUF9JUlFfQkFTRSArIDIwKQorI2RlZmluZSBNUEM1WFhYX1hMQl9BUkJfSVJRCQkoTVBDNVhYWF9QRVJQX0lSUV9CQVNFICsgMjEpCisjZGVmaW5lIE1QQzVYWFhfQkRMQ19JUlEJCShNUEM1WFhYX1BFUlBfSVJRX0JBU0UgKyAyMikKKwogLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVycyByZWdpc3RlcnMgKi8KICNkZWZpbmUgTVBDNVhYWF9HUFQwX0VOQUJMRQkJKE1QQzVYWFhfR1BUICsgMHgwKQogI2RlZmluZSBNUEM1WFhYX0dQVDBfQ09VTlRFUgkJKE1QQzVYWFhfR1BUICsgMHg0KQorI2RlZmluZSBNUEM1WFhYX0dQVDBfU1RBVFVTCQkoTVBDNVhYWF9HUFQgKyAweDBDKQogI2RlZmluZSBNUEM1WFhYX0dQVDFfRU5BQkxFCQkoTVBDNVhYWF9HUFQgKyAweDEwKQogI2RlZmluZSBNUEM1WFhYX0dQVDFfQ09VTlRFUgkJKE1QQzVYWFhfR1BUICsgMHgxNCkKKyNkZWZpbmUgTVBDNVhYWF9HUFQxX1NUQVRVUwkJKE1QQzVYWFhfR1BUICsgMHgxQykKICNkZWZpbmUgTVBDNVhYWF9HUFQyX0VOQUJMRQkJKE1QQzVYWFhfR1BUICsgMHgyMCkKICNkZWZpbmUgTVBDNVhYWF9HUFQyX0NPVU5URVIJCShNUEM1WFhYX0dQVCArIDB4MjQpCisjZGVmaW5lIE1QQzVYWFhfR1BUMl9TVEFUVVMJCShNUEM1WFhYX0dQVCArIDB4MkMpCiAjZGVmaW5lIE1QQzVYWFhfR1BUM19FTkFCTEUJCShNUEM1WFhYX0dQVCArIDB4MzApCiAjZGVmaW5lIE1QQzVYWFhfR1BUM19DT1VOVEVSCQkoTVBDNVhYWF9HUFQgKyAweDM0KQorI2RlZmluZSBNUEM1WFhYX0dQVDNfU1RBVFVTCQkoTVBDNVhYWF9HUFQgKyAweDNDKQogI2RlZmluZSBNUEM1WFhYX0dQVDRfRU5BQkxFCQkoTVBDNVhYWF9HUFQgKyAweDQwKQogI2RlZmluZSBNUEM1WFhYX0dQVDRfQ09VTlRFUgkJKE1QQzVYWFhfR1BUICsgMHg0NCkKKyNkZWZpbmUgTVBDNVhYWF9HUFQ0X1NUQVRVUwkJKE1QQzVYWFhfR1BUICsgMHg0QykKICNkZWZpbmUgTVBDNVhYWF9HUFQ1X0VOQUJMRQkJKE1QQzVYWFhfR1BUICsgMHg1MCkKKyNkZWZpbmUgTVBDNVhYWF9HUFQ1X1NUQVRVUwkJKE1QQzVYWFhfR1BUICsgMHg1QykKICNkZWZpbmUgTVBDNVhYWF9HUFQ1X0NPVU5URVIJCShNUEM1WFhYX0dQVCArIDB4NTQpCiAjZGVmaW5lIE1QQzVYWFhfR1BUNl9FTkFCTEUJCShNUEM1WFhYX0dQVCArIDB4NjApCiAjZGVmaW5lIE1QQzVYWFhfR1BUNl9DT1VOVEVSCQkoTVBDNVhYWF9HUFQgKyAweDY0KQorI2RlZmluZSBNUEM1WFhYX0dQVDZfU1RBVFVTCQkoTVBDNVhYWF9HUFQgKyAweDZDKQogI2RlZmluZSBNUEM1WFhYX0dQVDdfRU5BQkxFCQkoTVBDNVhYWF9HUFQgKyAweDcwKQogI2RlZmluZSBNUEM1WFhYX0dQVDdfQ09VTlRFUgkJKE1QQzVYWFhfR1BUICsgMHg3NCkKKyNkZWZpbmUgTVBDNVhYWF9HUFQ3X1NUQVRVUwkJKE1QQzVYWFhfR1BUICsgMHg3QykKKworI2RlZmluZSBNUEM1WFhYX0dQVF9HUElPX1BJTihzdGF0dXMpCSgoMHgwMDAwMDEwMCAmIChzdGF0dXMpKSA+PiA4KQogCiAjZGVmaW5lIE1QQzVYWFhfR1BUN19QV01DRkcJCShNUEM1WFhYX0dQVCArIDB4NzgpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXBjODZ4eC5oIGIvaW5jbHVkZS9tcGM4Nnh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4YmEzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbXBjODZ4eC5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBKZWZmcmV5IEJyb3duCisgKiBTcmlrYW50aCBTcmluaXZhc2FuIChzcmlrYW50aC5zcmluaXZhc2FuQGZyZWVzY2FsZS5jb20pCisgKi8KKworI2lmbmRlZglfX01QQzg2eHhfSF9fCisjZGVmaW5lIF9fTVBDODZ4eF9IX18KKworI2RlZmluZSBFWENfT0ZGX1NZU19SRVNFVAkweDAxMDAJLyogU3lzdGVtIHJlc2V0CW9mZnNldCAqLworCisvKgorICogbDJjciB2YWx1ZXMuICBMb29rIGluIGNvbmZpZ188Qk9BUkQ+LmggZm9yIHRoZSBhY3R1YWwgc2V0dXAKKyAqLworI2RlZmluZSBsMmNyCQkgMTAxNworCisjZGVmaW5lIEwyQ1JfTDJFICAgICAgICAgMHg4MDAwMDAwMCAvKiBiaXQgMCAtIGVuYWJsZSAqLworI2RlZmluZSBMMkNSX0wyUEUgICAgICAgIDB4NDAwMDAwMDAgLyogYml0IDEgLSBkYXRhIHBhcml0eSAqLworI2RlZmluZSBMMkNSX0wySSAgICAgICAgIDB4MDAyMDAwMDAgLyogYml0IDEwIC0gZ2xvYmFsIGludmFsaWRhdGUgYml0ICovCisjZGVmaW5lIEwyQ1JfTDJDVEwgICAgICAgMHgwMDEwMDAwMCAvKiBiaXQgMTEgLSBsMiByYW0gY29udHJvbCAqLworI2RlZmluZSBMMkNSX0wyRE8gICAgICAgIDB4MDAwMTAwMDAgLyogYml0IDE1IC0gZGF0YS1vbmx5IG1vZGUgKi8KKyNkZWZpbmUgTDJDUl9SRVAgICAgICAgICAweDAwMDAxMDAwIC8qIGJpdCAxOSAtIGwyIHJlcGxhY2VtZW50IGFsZyAqLworI2RlZmluZSBMMkNSX0hXRiAgICAgICAgIDB4MDAwMDA4MDAgLyogYml0IDIwIC0gaGFyZHdhcmUgZmx1c2ggKi8KKyNkZWZpbmUgTDJDUl9MMklQICAgICAgICAweDAwMDAwMDAxIC8qIGdsb2JhbCBpbnZhbGlkYXRlIGluIHByb2dyZXNzICovCisKKy8qCisgKiBCQVQgc2V0dGluZ3MuICBMb29rIGluIGNvbmZpZ188Qk9BUkQ+LmggZm9yIHRoZSBhY3R1YWwgc2V0dXAKKyAqLworCisjZGVmaW5lIEJBVFVfQkxfMTI4SyAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQkFUVV9CTF8yNTZLICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBCQVRVX0JMXzUxMksgICAgICAgICAgICAweDAwMDAwMDBjCisjZGVmaW5lIEJBVFVfQkxfMU0gICAgICAgICAgICAgIDB4MDAwMDAwMWMKKyNkZWZpbmUgQkFUVV9CTF8yTSAgICAgICAgICAgICAgMHgwMDAwMDAzYworI2RlZmluZSBCQVRVX0JMXzRNICAgICAgICAgICAgICAweDAwMDAwMDdjCisjZGVmaW5lIEJBVFVfQkxfOE0gICAgICAgICAgICAgIDB4MDAwMDAwZmMKKyNkZWZpbmUgQkFUVV9CTF8xNk0gICAgICAgICAgICAgMHgwMDAwMDFmYworI2RlZmluZSBCQVRVX0JMXzMyTSAgICAgICAgICAgICAweDAwMDAwM2ZjCisjZGVmaW5lIEJBVFVfQkxfNjRNICAgICAgICAgICAgIDB4MDAwMDA3ZmMKKyNkZWZpbmUgQkFUVV9CTF8xMjhNICAgICAgICAgICAgMHgwMDAwMGZmYworI2RlZmluZSBCQVRVX0JMXzI1Nk0gICAgICAgICAgICAweDAwMDAxZmZjCisjZGVmaW5lIEJBVFVfQkxfNTEyTSAgICAgICAgICAgIDB4MDAwMDNmZmMKKyNkZWZpbmUgQkFUVV9CTF8xRyAgICAgICAgICAgICAgMHgwMDAwN2ZmYworI2RlZmluZSBCQVRVX0JMXzJHICAgICAgICAgICAgICAweDAwMDBmZmZjCisjZGVmaW5lIEJBVFVfQkxfNEcgICAgICAgICAgICAgIDB4MDAwMWZmZmMKKworI2RlZmluZSBCQVRVX1ZTICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEJBVFVfVlAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQkFUVV9JTlZBTElEICAgICAgICAgICAgMHgwMDAwMDAwMAorCisjZGVmaW5lIEJBVExfV1JJVEVUSFJPVUdIICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQkFUTF9DQUNIRUlOSElCSVQgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBCQVRMX01FTUNPSEVSRU5DRQkweDAwMDAwMDEwCisjZGVmaW5lIEJBVExfR1VBUkRFRFNUT1JBR0UgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQkFUTF9OT19BQ0NFU1MJCTB4MDAwMDAwMDAKKworI2RlZmluZSBCQVRMX1BQX01TSwkJMHgwMDAwMDAwMworI2RlZmluZSBCQVRMX1BQXzAwCQkweDAwMDAwMDAwIC8qIE5vIGFjY2VzcyAqLworI2RlZmluZSBCQVRMX1BQXzAxCQkweDAwMDAwMDAxIC8qIFJlYWQtb25seSAqLworI2RlZmluZSBCQVRMX1BQXzEwCQkweDAwMDAwMDAyIC8qIFJlYWQtd3JpdGUgKi8KKyNkZWZpbmUgQkFUTF9QUF8xMQkJMHgwMDAwMDAwMworCisjZGVmaW5lIEJBVExfUFBfTk9fQUNDRVNTCUJBVExfUFBfMDAKKyNkZWZpbmUgQkFUTF9QUF9STwkJQkFUTF9QUF8wMQorI2RlZmluZSBCQVRMX1BQX1JXCQlCQVRMX1BQXzEwCisKKyNkZWZpbmUgSElEMF9YQlNFTiAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBISUQwX0hJR0hfQkFUX0VOICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEhJRDBfWEFFTiAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZnJlcVByb2Nlc3NvcjsKKwl1bnNpZ25lZCBsb25nIGZyZXFTeXN0ZW1CdXM7Cit9IE1QQzg2eHhfU1lTX0lORk87CisKKyNkZWZpbmUgbDFpY2FjaGVfZW5hYmxlCWljYWNoZV9lbmFibGUKKwordm9pZCBsMmNhY2hlX2VuYWJsZSh2b2lkKTsKK3ZvaWQgbDFkY2FjaGVfZW5hYmxlKHZvaWQpOworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF9oaWQwICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaGlkMDsKKwlhc20gdm9sYXRpbGUoIm1mc3ByICUwLCAxMDA4IiA6ICI9ciIgKGhpZDApIDopOworCXJldHVybiBoaWQwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGdldF9oaWQxICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaGlkMTsKKwlhc20gdm9sYXRpbGUoIm1mc3ByICUwLCAxMDA5IiA6ICI9ciIgKGhpZDEpIDopOworCXJldHVybiBoaWQxOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9oaWQwICh1bnNpZ25lZCBsb25nIGhpZDApCit7CisJYXNtIHZvbGF0aWxlKCJtdHNwciAxMDA4LCAlMCIgOiA6ICJyIiAoaGlkMCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9oaWQxICh1bnNpZ25lZCBsb25nIGhpZDEpCit7CisJYXNtIHZvbGF0aWxlKCJtdHNwciAxMDA5LCAlMCIgOiA6ICJyIiAoaGlkMSkpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZ2V0X2wyY3IgKHZvaWQpCit7CisgICB1bnNpZ25lZCBsb25nIGwyY3JfdmFsOworICAgYXNtIHZvbGF0aWxlKCJtZnNwciAlMCwgMTAxNyIgOiAiPXIiIChsMmNyX3ZhbCkgOik7CisgICByZXR1cm4gbDJjcl92YWw7Cit9CisKKyNlbmRpZiAgLyogX0FTTUxBTkdVQUdFICovCisjZW5kaWYJLyogX19NUEM4Nnh4X0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uczE2NTUwLmggYi9pbmNsdWRlL25zMTY1NTAuaAppbmRleCA5OTZkOTE1Li4zNDg4OGExIDEwMDY0NAotLS0gYS9pbmNsdWRlL25zMTY1NTAuaAorKysgYi9pbmNsdWRlL25zMTY1NTAuaApAQCAtNyw3ICs3LDcgQEAKICAqIGFkZGVkIHByb3RvdHlwZXMgZm9yIG5zMTY1NTAuYwogICogcmVkdWNlZCBubyBvZiBjb20gcG9ydHMgdG8gMgogICogbW9kaWZpY2F0aW9ucyAoYykgUm9iIFRheWxvciwgRmx5aW5nIFBpZyBTeXN0ZW1zLiAyMDAwLgotICogCisgKgogICogYWRkZWQgc3VwcG9ydCBmb3IgcG9ydCBvbiA2NC1iaXQgYnVzCiAgKiBieSBSaWNoYXJkIERhbnRlciAocmljaGFyZC5kYW50ZXJAd2luZHJpdmVyLmNvbSksIChDKSAyMDA1IFdpbmQgUml2ZXIgU3lzdGVtcwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjaV9pZHMuaCBiL2luY2x1ZGUvcGNpX2lkcy5oCmluZGV4IDhjYzNlYzAuLjNiMTA0NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvcGNpX2lkcy5oCkBAIC0xMDQ1LDYgKzEwNDUsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOQkweDgxMzkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxNjkJMHg4MTY5CiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ETElOSwkJMHgxMTg2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRExJTktfODEzOQkweDEzMDAKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1hJTElOWAkJMHgxMGVlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFVSQk9QQU0JCTB4NDAyMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS5oIGIvaW5jbHVkZS9wY21jaWEuaAppbmRleCA0M2Q0NTEwLi44ZjU2NGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS5oCisrKyBiL2luY2x1ZGUvcGNtY2lhLmgKQEAgLTMwOCw0ICszMDgsMTQgQEAKIAogI2VuZGlmCS8qIENGR19DTURfUENNQ0lBIHx8IENGR19DTURfSURFICYmIChDT05GSUdfSURFXzh4eF9QQ0NBUkQgfHwgQ09ORklHX0lERV84eHhfRElSRUNUKSAqLwogCisjaWZkZWYJQ09ORklHXzh4eAorZXh0ZXJuIHVfaW50ICpwY21jaWFfcGdjcnhbXTsKKyNkZWZpbmUJUENNQ0lBX1BHQ1JYKHNsb3QpCSgqcGNtY2lhX3BnY3J4W3Nsb3RdKQorI2VuZGlmCisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpICYmIGRlZmluZWQoQ09ORklHX0lERV84eHhfUENDQVJEKSBcCisJfHwgZGVmaW5lZChDT05GSUdfUFhBX1BDTUNJQSkKK2V4dGVybiBpbnQgY2hlY2tfaWRlX2RldmljZShpbnQgc2xvdCk7CisjZW5kaWYKKwogI2VuZGlmIC8qIF9QQ01DSUFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcGM0NDAuaCBiL2luY2x1ZGUvcHBjNDQwLmgKaW5kZXggNTNmMTRiNS4uYzRhM2VkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wcGM0NDAuaAorKysgYi9pbmNsdWRlL3BwYzQ0MC5oCkBAIC0yNSw2ICsyNSw4IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVycwkJCQkJCSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZQkgeGVyX3JlZyAweDAwMQorI2RlZmluZQkgbHJfcmVnCTB4MDA4CiAjZGVmaW5lCSBkZWMJMHgwMTYJLyogZGVjcmVtZW50ZXIgKi8KICNkZWZpbmUJIHNycjAJMHgwMWEJLyogc2F2ZS9yZXN0b3JlIHJlZ2lzdGVyIDAgKi8KICNkZWZpbmUJIHNycjEJMHgwMWIJLyogc2F2ZS9yZXN0b3JlIHJlZ2lzdGVyIDEgKi8KQEAgLTM3LDYgKzM5LDggQEAKICNkZWZpbmUJIGl2cHIJMHgwM2YJLyogaW50ZXJydXB0IHByZWZpeCByZWdpc3RlciAqLwogI2RlZmluZQkgdXNwcmcwIDB4MTAwCS8qIHVzZXIgc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVyIGdlbmVyYWwgMCAqLwogI2RlZmluZQkgdXNwcmcxIDB4MTEwCS8qIHVzZXIgc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVyIGdlbmVyYWwgMSAqLworI2RlZmluZQkgdGJscgkweDEwYwkvKiB0aW1lIGJhc2UgbG93ZXIsIHJlYWQgb25seSAqLworI2RlZmluZQkgdGJ1cgkweDEwZAkvKiB0aW1lIGJhc2UgdXBwZXIsIHJlYWQgb25seSAqLwogI2RlZmluZQkgc3ByZzEJMHgxMTEJLyogc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVyIGdlbmVyYWwgMSAqLwogI2RlZmluZQkgc3ByZzIJMHgxMTIJLyogc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVyIGdlbmVyYWwgMiAqLwogI2RlZmluZQkgc3ByZzMJMHgxMTMJLyogc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVyIGdlbmVyYWwgMyAqLwpAQCAtNzgsNyArODIsMTAgQEAKICNkZWZpbmUJIGl2b3IxMyAweDE5ZAkvKiBpbnRlcnJ1cHQgdmVjdG9yIG9mZnNldCByZWdpc3RlciAxMyAqLwogI2RlZmluZQkgaXZvcjE0IDB4MTllCS8qIGludGVycnVwdCB2ZWN0b3Igb2Zmc2V0IHJlZ2lzdGVyIDE0ICovCiAjZGVmaW5lCSBpdm9yMTUgMHgxOWYJLyogaW50ZXJydXB0IHZlY3RvciBvZmZzZXQgcmVnaXN0ZXIgMTUgKi8KLSNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwU1ApIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKICNkZWZpbmUJIG1jc3JyMCAweDIzYQkvKiBtYWNoaW5lIGNoZWNrIHNhdmUvcmVzdG9yZSByZWdpc3RlciAwICovCiAjZGVmaW5lCSBtY3NycjEgMHgyM2IJLyogbWFoY2luZSBjaGVjayBzYXZlL3Jlc3RvcmUgcmVnaXN0ZXIgMSAqLwogI2RlZmluZQkgbWNzcgkweDIzYwkvKiBtYWNoaW5lIGNoZWNrIHN0YXR1cyByZWdpc3RlciAqLwpAQCAtMTQ3LDcgKzE1NCwxOCBAQAogI2RlZmluZSBzZHJfZWNpZDEJMHgwMDgxCiAjZGVmaW5lIHNkcl9lY2lkMgkweDAwODIKICNkZWZpbmUgc2RyX2p0YWcJMHgwMGMwCisjaWYgIWRlZmluZWQoQ09ORklHXzQ0MEVQWCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MEdSWCkKICNkZWZpbmUgc2RyX2RkcmRsCTB4MDBlMAorI2Vsc2UKKyNkZWZpbmUgc2RyX2NmZwkJMHgwMGUwCisjZGVmaW5lIFNEUl9DRkdfTFQyX01BU0sgICAgICAgICAgMHgwMTAwMDAwMCAvKiBMZWFrYWdlIHRlc3QgMiovCisjZGVmaW5lIFNEUl9DRkdfNjRfMzJCSVRTX01BU0sgICAgMHgwMTAwMDAwMCAvKiBTd2l0Y2ggRERSIDY0IGJpdHMgb3IgMzIgYml0cyAqLworI2RlZmluZSBTRFJfQ0ZHXzMyQklUUyAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8qIDMyIGJpdHMgKi8KKyNkZWZpbmUgU0RSX0NGR182NEJJVFMgICAgICAgICAgICAweDAxMDAwMDAwICAvKiA2NCBiaXRzICovCisjZGVmaW5lIFNEUl9DRkdfTUNfVjI1MThfTUFTSyAgICAgMHgwMjAwMDAwMCAvKiBMb3cgVkREMjUxOCAoMi41IG9yIDEuOFYpICovCisjZGVmaW5lIFNEUl9DRkdfTUNfVjI1ICAgICAgICAgICAgMHgwMDAwMDAwMCAgLyogMi41IFYgKi8KKyNkZWZpbmUgU0RSX0NGR19NQ19WMTggICAgICAgICAgICAweDAyMDAwMDAwICAvKiAxLjggViAqLworI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR180NDBFUFgpICYmICFkZWZpbmVkKENPTkZJR180NDBHUlgpICovCiAjZGVmaW5lIHNkcl9lYmMJCTB4MDEwMAogI2RlZmluZSBzZHJfdWFydDAJMHgwMTIwCS8qIFVBUlQwIENvbmZpZyAqLwogI2RlZmluZSBzZHJfdWFydDEJMHgwMTIxCS8qIFVBUlQxIENvbmZpZyAqLwpAQCAtMTY3LDE3ICsxODUsNjMgQEAKICNkZWZpbmUgc2RyX21hbHJibAkweDAyYTAKICNkZWZpbmUgc2RyX21hbHRicwkweDAyYzAKICNkZWZpbmUgc2RyX21hbHJicwkweDAyZTAKLSNkZWZpbmUgc2RyX3BjaTAgICAgICAgIDB4MDMwMAotI2RlZmluZSBzZHJfdXNiMCAgICAgICAgMHgwMzIwCisjZGVmaW5lIHNkcl9wY2kwCTB4MDMwMAorI2RlZmluZSBzZHJfdXNiMAkweDAzMjAKICNkZWZpbmUgc2RyX2N1c3QwCTB4NDAwMAotI2RlZmluZSBzZHJfc2RzdHAyCTB4NDAwMQogI2RlZmluZSBzZHJfY3VzdDEJMHg0MDAyCi0jZGVmaW5lIHNkcl9zZHN0cDMJMHg0MDAzCiAjZGVmaW5lIHNkcl9wZmMwCTB4NDEwMAkvKiBQaW4gRnVuY3Rpb24gMCAqLwogI2RlZmluZSBzZHJfcGZjMQkweDQxMDEJLyogUGluIEZ1bmN0aW9uIDEgKi8KICNkZWZpbmUgc2RyX3BsYnRyCTB4NDIwMAogI2RlZmluZSBzZHJfbWZyCQkweDQzMDAJLyogU0RSMF9NRlIgcmVnICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkgLyogdGVzdC1vbmx5ISEhISAqLworI2RlZmluZSBERFIwXzAwCTB4MDAKKyNkZWZpbmUgRERSMF8wMQkweDAxCisjZGVmaW5lIEREUjBfMDIJMHgwMgorI2RlZmluZSBERFIwXzAzCTB4MDMKKyNkZWZpbmUgRERSMF8wNAkweDA0CisjZGVmaW5lIEREUjBfMDUJMHgwNQorI2RlZmluZSBERFIwXzA2CTB4MDYKKyNkZWZpbmUgRERSMF8wNwkweDA3CisjZGVmaW5lIEREUjBfMDgJMHgwOAorI2RlZmluZSBERFIwXzA5CTB4MDkKKyNkZWZpbmUgRERSMF8xMAkweDBBCisjZGVmaW5lIEREUjBfMTEJMHgwQgorI2RlZmluZSBERFIwXzEyCTB4MEMKKyNkZWZpbmUgRERSMF8xMwkweDBECisjZGVmaW5lIEREUjBfMTQJMHgwRQorI2RlZmluZSBERFIwXzE1CTB4MEYKKyNkZWZpbmUgRERSMF8xNgkweDEwCisjZGVmaW5lIEREUjBfMTcJMHgxMQorI2RlZmluZSBERFIwXzE4CTB4MTIKKyNkZWZpbmUgRERSMF8xOQkweDEzCisjZGVmaW5lIEREUjBfMjAJMHgxNAorI2RlZmluZSBERFIwXzIxCTB4MTUKKyNkZWZpbmUgRERSMF8yMgkweDE2CisjZGVmaW5lIEREUjBfMjMJMHgxNworI2RlZmluZSBERFIwXzI0CTB4MTgKKyNkZWZpbmUgRERSMF8yNQkweDE5CisjZGVmaW5lIEREUjBfMjYJMHgxQQorI2RlZmluZSBERFIwXzI3CTB4MUIKKyNkZWZpbmUgRERSMF8yOAkweDFDCisjZGVmaW5lIEREUjBfMjkJMHgxRAorI2RlZmluZSBERFIwXzMwCTB4MUUKKyNkZWZpbmUgRERSMF8zMQkweDFGCisjZGVmaW5lIEREUjBfMzIJMHgyMAorI2RlZmluZSBERFIwXzMzCTB4MjEKKyNkZWZpbmUgRERSMF8zNAkweDIyCisjZGVmaW5lIEREUjBfMzUJMHgyMworI2RlZmluZSBERFIwXzM2CTB4MjQKKyNkZWZpbmUgRERSMF8zNwkweDI1CisjZGVmaW5lIEREUjBfMzgJMHgyNgorI2RlZmluZSBERFIwXzM5CTB4MjcKKyNkZWZpbmUgRERSMF80MAkweDI4CisjZGVmaW5lIEREUjBfNDEJMHgyOQorI2RlZmluZSBERFIwXzQyCTB4MkEKKyNkZWZpbmUgRERSMF80MwkweDJCCisjZGVmaW5lIEREUjBfNDQJMHgyQworI2VuZGlmIC8qQ09ORklHXzQ0MEVQWCovCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICB8IFNEUkFNIENvbnRyb2xsZXIKICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMTIsNiArMjc2LDU1MSBAQAogI2RlZmluZSBtZW1fZGx5Y2FsCTB4MDA4NAkvKiBkZWxheSBsaW5lIGNhbGlicmF0aW9uIHJlZ2lzdGVyCSAgICAqLwogI2RlZmluZSBtZW1fZWNjZXNyCTB4MDA5OAkvKiBFQ0MgZXJyb3Igc3RhdHVzCQkJICAgICovCiAKKyNpZmRlZiBDT05GSUdfNDQwR1gKKyNkZWZpbmUgc2RyX2FtcAkJMHgwMjQwCisjZGVmaW5lIHNkcl94cGxsYwkweDAxYzEKKyNkZWZpbmUgc2RyX3hwbGxkCTB4MDFjMgorI2RlZmluZSBzZHJfeGNyCQkweDAxYzAKKyNkZWZpbmUgc2RyX3Nkc3RwMgkweDQwMDEKKyNkZWZpbmUgc2RyX3Nkc3RwMwkweDQwMDMKKyNlbmRpZgkvKiBDT05GSUdfNDQwR1ggKi8KKworI2lmZGVmIENPTkZJR180NDBTUEUKKyN1bmRlZiBzZHJfc2RzdHAyCisjZGVmaW5lIHNkcl9zZHN0cDIJMHgwMDIyCisjdW5kZWYgc2RyX3Nkc3RwMworI2RlZmluZSBzZHJfc2RzdHAzCTB4MDAyMworI2RlZmluZSBzZHJfZGRyMAkweDAwRTEKKyNkZWZpbmUgc2RyX3VhcnQyCTB4MDEyMgorI2RlZmluZSBzZHJfeGNyMAkweDAxYzAKKy8qICNkZWZpbmUgc2RyX3hjcjEJMHgwMWMzCW9ubHkgb25lIFBDSVggLSBTRyAqLworLyogI2RlZmluZSBzZHJfeGNyMgkweDAxYzYJb25seSBvbmUgUENJWCAtIFNHICovCisjZGVmaW5lIHNkcl94cGxsYzAJMHgwMWMxCisjZGVmaW5lIHNkcl94cGxsZDAJMHgwMWMyCisjZGVmaW5lIHNkcl94cGxsYzEJMHgwMWM0CS8qbm90UkNXICAtIFNHICovCisjZGVmaW5lIHNkcl94cGxsZDEJMHgwMWM1CS8qbm90UkNXICAtIFNHICovCisjZGVmaW5lIHNkcl94cGxsYzIJMHgwMWM3CS8qbm90UkNXICAtIFNHICovCisjZGVmaW5lIHNkcl94cGxsZDIJMHgwMWM4CS8qbm90UkNXICAtIFNHICovCisjZGVmaW5lIHNkcl9hbXAwCTB4MDI0MAorI2RlZmluZSBzZHJfYW1wMQkweDAyNDEKKyNkZWZpbmUgc2RyX2N1c3QyCTB4NDAwNAorI2RlZmluZSBzZHJfY3VzdDMJMHg0MDA2CisjZGVmaW5lIHNkcl9zZHN0cDQJMHg0MDAxCisjZGVmaW5lIHNkcl9zZHN0cDUJMHg0MDAzCisjZGVmaW5lIHNkcl9zZHN0cDYJMHg0MDA1CisjZGVmaW5lIHNkcl9zZHN0cDcJMHg0MDA3CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgQ29yZSBDb25maWd1cmF0aW9uL01NVSBjb25maWd1cmF0aW9uIGZvciA0NDAgKENDUjEgZm9yIDQ0MHg1IG9ubHkpLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDQ1IwX1BSRQkJMHg0MDAwMDAwMAorI2RlZmluZSBDQ1IwX0NSUEUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgQ0NSMF9EU1RHCQkweDAwMjAwMDAwCisjZGVmaW5lIENDUjBfREFQVUlCCQkweDAwMTAwMDAwCisjZGVmaW5lIENDUjBfRFRCCQkweDAwMDA4MDAwCisjZGVmaW5lIENDUjBfR0lDQlQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgQ0NSMF9HRENCVAkJMHgwMDAwMjAwMAorI2RlZmluZSBDQ1IwX0ZMU1RBCQkweDAwMDAwMTAwCisjZGVmaW5lIENDUjBfSUNTTENfTUFTSwkJMHgwMDAwMDAwQworI2RlZmluZSBDQ1IwX0lDU0xUX01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgQ0NSMV9UQ1NfTUFTSwkJMHgwMDAwMDA4MAorI2RlZmluZSBDQ1IxX1RDU19JTlRDTEsJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0NSMV9UQ1NfRVhUQ0xLCQkweDAwMDAwMDgwCisjZGVmaW5lIE1NVUNSX1NFT0EJCTB4MDEwMDAwMDAKKyNkZWZpbmUgTU1VQ1JfVTFURQkJMHgwMDQwMDAwMAorI2RlZmluZSBNTVVDUl9VMlNXT0FFCQkweDAwMjAwMDAwCisjZGVmaW5lIE1NVUNSX0RVTFhFCQkweDAwODAwMDAwCisjZGVmaW5lIE1NVUNSX0lVTFhFCQkweDAwNDAwMDAwCisjZGVmaW5lIE1NVUNSX1NUUwkJMHgwMDEwMDAwMAorI2RlZmluZSBNTVVDUl9TVElEX01BU0sJCTB4MDAwMDAwRkYKKworI2RlZmluZSBTRFIwX0NGR0FERFIJCTB4MDBFCisjZGVmaW5lIFNEUjBfQ0ZHREFUQQkJMHgwMEYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUENJIGV4cHJlc3MgZGVmaW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU0RSMF9QRTBVVExTRVQxCQkweDAwMDAwMzAwCS8qIFBFMCBVcHBlciB0cmFuc2FjdGlvbiBsYXllciBjb25mIHNldHRpbmcgKi8KKyNkZWZpbmUgU0RSMF9QRTBVVExTRVQyCQkweDAwMDAwMzAxCS8qIFBFMCBVcHBlciB0cmFuc2FjdGlvbiBsYXllciBjb25mIHNldHRpbmcgMiAqLworI2RlZmluZSBTRFIwX1BFMERMUFNFVAkJMHgwMDAwMDMwMgkvKiBQRTAgRGF0YSBsaW5rICYgbG9naWNhbCBwaHlzaWNhbCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFNEUjBfUEUwTE9PUAkJMHgwMDAwMDMwMwkvKiBQRTAgTG9vcGJhY2sgaW50ZXJmYWNlIHN0YXR1cyAqLworI2RlZmluZSBTRFIwX1BFMFJDU1NFVAkJMHgwMDAwMDMwNAkvKiBQRTAgUmVzZXQsIGNsb2NrICYgc2h1dGRvd24gc2V0dGluZyAqLworI2RlZmluZSBTRFIwX1BFMFJDU1NUUwkJMHgwMDAwMDMwNQkvKiBQRTAgUmVzZXQsIGNsb2NrICYgc2h1dGRvd24gc3RhdHVzICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMUwwCTB4MDAwMDAzMDYJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMkwwCTB4MDAwMDAzMDcJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU1RTTDAJMHgwMDAwMDMwOAkvKiBQRTAgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMUwxCTB4MDAwMDAzMDkJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMkwxCTB4MDAwMDAzMEEJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU1RTTDEJMHgwMDAwMDMwQgkvKiBQRTAgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMUwyCTB4MDAwMDAzMEMJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMkwyCTB4MDAwMDAzMEQJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU1RTTDIJMHgwMDAwMDMwRQkvKiBQRTAgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMUwzCTB4MDAwMDAzMEYJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMkwzCTB4MDAwMDAzMTAJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU1RTTDMJMHgwMDAwMDMxMQkvKiBQRTAgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMUw0CTB4MDAwMDAzMTIJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSA0ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMkw0CTB4MDAwMDAzMTMJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSA0ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU1RTTDQJMHgwMDAwMDMxNAkvKiBQRTAgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSA0ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMUw1CTB4MDAwMDAzMTUJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSA1ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMkw1CTB4MDAwMDAzMTYJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSA1ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU1RTTDUJMHgwMDAwMDMxNwkvKiBQRTAgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSA1ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMUw2CTB4MDAwMDAzMTgJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSA2ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMkw2CTB4MDAwMDAzMTkJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSA2ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU1RTTDYJMHgwMDAwMDMxQQkvKiBQRTAgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSA2ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMUw3CTB4MDAwMDAzMUIJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSA3ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VUMkw3CTB4MDAwMDAzMUMJLyogUEUwIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSA3ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU1RTTDcJMHgwMDAwMDMxRAkvKiBQRTAgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSA3ICovCisjZGVmaW5lIFNEUjBfUEUwSFNTU0VSRU4JMHgwMDAwMDMxRQkvKiBQRTAgU2VyZGVzIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBTRFIwX1BFMExBTkVBQkNECTB4MDAwMDAzMUYJLyogUEUwIExhbmVzIEFCQ0QgYWZmZWN0YXRpb24gKi8KKyNkZWZpbmUgU0RSMF9QRTBMQU5FRUZHSAkweDAwMDAwMzIwCS8qIFBFMCBMYW5lcyBFRkdIIGFmZmVjdGF0aW9uICovCisKKyNkZWZpbmUgU0RSMF9QRTFVVExTRVQxCQkweDAwMDAwMzQwCS8qIFBFMSBVcHBlciB0cmFuc2FjdGlvbiBsYXllciBjb25mIHNldHRpbmcgKi8KKyNkZWZpbmUgU0RSMF9QRTFVVExTRVQyCQkweDAwMDAwMzQxCS8qIFBFMSBVcHBlciB0cmFuc2FjdGlvbiBsYXllciBjb25mIHNldHRpbmcgMiAqLworI2RlZmluZSBTRFIwX1BFMURMUFNFVAkJMHgwMDAwMDM0MgkvKiBQRTEgRGF0YSBsaW5rICYgbG9naWNhbCBwaHlzaWNhbCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFNEUjBfUEUxTE9PUAkJMHgwMDAwMDM0MwkvKiBQRTEgTG9vcGJhY2sgaW50ZXJmYWNlIHN0YXR1cyAqLworI2RlZmluZSBTRFIwX1BFMVJDU1NFVAkJMHgwMDAwMDM0NAkvKiBQRTEgUmVzZXQsIGNsb2NrICYgc2h1dGRvd24gc2V0dGluZyAqLworI2RlZmluZSBTRFIwX1BFMVJDU1NUUwkJMHgwMDAwMDM0NQkvKiBQRTEgUmVzZXQsIGNsb2NrICYgc2h1dGRvd24gc3RhdHVzICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VUMUwwCTB4MDAwMDAzNDYJLyogUEUxIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VUMkwwCTB4MDAwMDAzNDcJLyogUEUxIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU1RTTDAJMHgwMDAwMDM0OAkvKiBQRTEgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VUMUwxCTB4MDAwMDAzNDkJLyogUEUxIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VUMkwxCTB4MDAwMDAzNEEJLyogUEUxIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU1RTTDEJMHgwMDAwMDM0QgkvKiBQRTEgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VUMUwyCTB4MDAwMDAzNEMJLyogUEUxIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VUMkwyCTB4MDAwMDAzNEQJLyogUEUxIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU1RTTDIJMHgwMDAwMDM0RQkvKiBQRTEgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VUMUwzCTB4MDAwMDAzNEYJLyogUEUxIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VUMkwzCTB4MDAwMDAzNTAJLyogUEUxIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU1RTTDMJMHgwMDAwMDM1MQkvKiBQRTEgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUxSFNTU0VSRU4JMHgwMDAwMDM1MgkvKiBQRTEgU2VyZGVzIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBTRFIwX1BFMUxBTkVBQkNECTB4MDAwMDAzNTMJLyogUEUxIExhbmVzIEFCQ0QgYWZmZWN0YXRpb24gKi8KKyNkZWZpbmUgU0RSMF9QRTJVVExTRVQxCQkweDAwMDAwMzcwCS8qIFBFMiBVcHBlciB0cmFuc2FjdGlvbiBsYXllciBjb25mIHNldHRpbmcgKi8KKyNkZWZpbmUgU0RSMF9QRTJVVExTRVQyCQkweDAwMDAwMzcxCS8qIFBFMiBVcHBlciB0cmFuc2FjdGlvbiBsYXllciBjb25mIHNldHRpbmcgMiAqLworI2RlZmluZSBTRFIwX1BFMkRMUFNFVAkJMHgwMDAwMDM3MgkvKiBQRTIgRGF0YSBsaW5rICYgbG9naWNhbCBwaHlzaWNhbCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFNEUjBfUEUyTE9PUAkJMHgwMDAwMDM3MwkvKiBQRTIgTG9vcGJhY2sgaW50ZXJmYWNlIHN0YXR1cyAqLworI2RlZmluZSBTRFIwX1BFMlJDU1NFVAkJMHgwMDAwMDM3NAkvKiBQRTIgUmVzZXQsIGNsb2NrICYgc2h1dGRvd24gc2V0dGluZyAqLworI2RlZmluZSBTRFIwX1BFMlJDU1NUUwkJMHgwMDAwMDM3NQkvKiBQRTIgUmVzZXQsIGNsb2NrICYgc2h1dGRvd24gc3RhdHVzICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VUMUwwCTB4MDAwMDAzNzYJLyogUEUyIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VUMkwwCTB4MDAwMDAzNzcJLyogUEUyIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUySFNTU1RTTDAJMHgwMDAwMDM3OAkvKiBQRTIgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAwICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VUMUwxCTB4MDAwMDAzNzkJLyogUEUyIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VUMkwxCTB4MDAwMDAzN0EJLyogUEUyIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUySFNTU1RTTDEJMHgwMDAwMDM3QgkvKiBQRTIgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAxICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VUMUwyCTB4MDAwMDAzN0MJLyogUEUyIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VUMkwyCTB4MDAwMDAzN0QJLyogUEUyIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUySFNTU1RTTDIJMHgwMDAwMDM3RQkvKiBQRTIgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAyICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VUMUwzCTB4MDAwMDAzN0YJLyogUEUyIEhTUyBDb250cm9sIFNldHRpbmcgMTogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VUMkwzCTB4MDAwMDAzODAJLyogUEUyIEhTUyBDb250cm9sIFNldHRpbmcgMjogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUySFNTU1RTTDMJMHgwMDAwMDM4MQkvKiBQRTIgSFNTIENvbnRyb2wgU3RhdHVzIDogTGFuZSAzICovCisjZGVmaW5lIFNEUjBfUEUySFNTU0VSRU4JMHgwMDAwMDM4MgkvKiBQRTIgU2VyZGVzIFRyYW5zbWl0dGVyIEVuYWJsZSAqLworI2RlZmluZSBTRFIwX1BFMkxBTkVBQkNECTB4MDAwMDAzODMJLyogUEUyIExhbmVzIEFCQ0QgYWZmZWN0YXRpb24gKi8KKyNkZWZpbmUgU0RSMF9QRUdQTExTRVQxCQkweDAwMDAwM0EwCS8qIFBFIFBsbCBMQyBUYW5rIFNldHRpbmcxICovCisjZGVmaW5lIFNEUjBfUEVHUExMU0VUMgkJMHgwMDAwMDNBMQkvKiBQRSBQbGwgTEMgVGFuayBTZXR0aW5nMiAqLworI2RlZmluZSBTRFIwX1BFR1BMTFNUUwkJMHgwMDAwMDNBMgkvKiBQRSBQbGwgTEMgVGFuayBTdGF0dXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBTRFJBTSBDb250cm9sbGVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBTRFJBTSBETFlDQUwgT3B0aW9ucworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU0RSQU1fRExZQ0FMX0RMQ1ZfTUFTSwkJMHgwMDAwMDNGQworI2RlZmluZSBTRFJBTV9ETFlDQUxfRExDVl9FTkNPREUoeCkJKCgoeCk8PDIpICYgU0RSQU1fRExZQ0FMX0RMQ1ZfTUFTSykKKyNkZWZpbmUgU0RSQU1fRExZQ0FMX0RMQ1ZfREVDT0RFKHgpCSgoKHgpICYgU0RSQU1fRExZQ0FMX0RMQ1ZfTUFTSyk+PjIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgTWVtb3J5IHF1ZXVlIGRlZmluZXMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEEgUkVWT0lSIHZlcnN1cyBSV0MgIC0gU0cqLworI2RlZmluZSBTRFJBTVFfRENSX0JBU0UJMHgwNDAKKworI2RlZmluZSBTRFJBTV9SMEJBUwkoU0RSQU1RX0RDUl9CQVNFKzB4MCkJLyogcmFuayAwIGJhc2UgYWRkcmVzcyAmIHNpemUgICovCisjZGVmaW5lIFNEUkFNX1IxQkFTCShTRFJBTVFfRENSX0JBU0UrMHgxKQkvKiByYW5rIDEgYmFzZSBhZGRyZXNzICYgc2l6ZSAgKi8KKyNkZWZpbmUgU0RSQU1fUjJCQVMJKFNEUkFNUV9EQ1JfQkFTRSsweDIpCS8qIHJhbmsgMiBiYXNlIGFkZHJlc3MgJiBzaXplICAqLworI2RlZmluZSBTRFJBTV9SM0JBUwkoU0RSQU1RX0RDUl9CQVNFKzB4MykJLyogcmFuayAzIGJhc2UgYWRkcmVzcyAmIHNpemUgICovCisjZGVmaW5lIFNEUkFNX0NPTkYxSEIJKFNEUkFNUV9EQ1JfQkFTRSsweDUpCS8qIGNvbmZpZ3VyYXRpb24gMSBIQiAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9FUlJTVEFUSEIJKFNEUkFNUV9EQ1JfQkFTRSsweDcpCS8qIGVycm9yIHN0YXR1cyBIQiAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9FUlJBRERVSEIJKFNEUkFNUV9EQ1JfQkFTRSsweDgpCS8qIGVycm9yIGFkZHJlc3MgdXBwZXIgMzIgSEIgICAqLworI2RlZmluZSBTRFJBTV9FUlJBRERMSEIJKFNEUkFNUV9EQ1JfQkFTRSsweDkpCS8qIGVycm9yIGFkZHJlc3MgbG93ZXIgMzIgSEIgICAqLworI2RlZmluZSBTRFJBTV9QTEJBRERVTEwJKFNEUkFNUV9EQ1JfQkFTRSsweEEpCS8qIFBMQiBiYXNlIGFkZHJlc3MgdXBwZXIgMzIgTEwgKi8KKyNkZWZpbmUgU0RSQU1fQ09ORjFMTAkoU0RSQU1RX0RDUl9CQVNFKzB4QikJLyogY29uZmlndXJhdGlvbiAxIExMICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX0VSUlNUQVRMTAkoU0RSQU1RX0RDUl9CQVNFKzB4QykJLyogZXJyb3Igc3RhdHVzIExMICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX0VSUkFERFVMTAkoU0RSQU1RX0RDUl9CQVNFKzB4RCkJLyogZXJyb3IgYWRkcmVzcyB1cHBlciAzMiBMTCAgICovCisjZGVmaW5lIFNEUkFNX0VSUkFERExMTAkoU0RSQU1RX0RDUl9CQVNFKzB4RSkJLyogZXJyb3IgYWRkcmVzcyBsb3dlciAzMiBMTCAgICovCisjZGVmaW5lIFNEUkFNX0NPTkZQQVRIQgkoU0RSQU1RX0RDUl9CQVNFKzB4RikJLyogY29uZmlndXJhdGlvbiBiZXR3ZWVuIHBhdGhzICovCisjZGVmaW5lIFNEUkFNX1BMQkFERFVIQgkoU0RSQU1RX0RDUl9CQVNFKzB4MTApCS8qIFBMQiBiYXNlIGFkZHJlc3MgdXBwZXIgMzIgTEwgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIE1lbW9yeSBCYW5rIDAtNyBjb25maWd1cmF0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9SWEJBU19TREJBX01BU0sJCTB4RkY4MDAwMDAJLyogQmFzZSBhZGRyZXNzCSovCisjZGVmaW5lIFNEUkFNX1JYQkFTX1NEQkFfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHhGRkUwMDAwMCk+PjIpCisjZGVmaW5lIFNEUkFNX1JYQkFTX1NEQkFfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHhGRkUwMDAwMCk8PDIpCisjZGVmaW5lIFNEUkFNX1JYQkFTX1NEU1pfTUFTSwkJMHgwMDAwRkZDMAkvKiBTaXplCQkqLworI2RlZmluZSBTRFJBTV9SWEJBU19TRFNaX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4M0ZGKTw8NikKKyNkZWZpbmUgU0RSQU1fUlhCQVNfU0RTWl9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+NikmMHgzRkYpCisjZGVmaW5lIFNEUkFNX1JYQkFTX1NEU1pfMAkJMHgwMDAwMDAwMAkvKiAgIDBNCQkqLworI2RlZmluZSBTRFJBTV9SWEJBU19TRFNaXzgJCTB4MDAwMEZGQzAJLyogICA4TQkJKi8KKyNkZWZpbmUgU0RSQU1fUlhCQVNfU0RTWl8xNgkJMHgwMDAwRkY4MAkvKiAgMTZNCQkqLworI2RlZmluZSBTRFJBTV9SWEJBU19TRFNaXzMyCQkweDAwMDBGRjAwCS8qICAzMk0JCSovCisjZGVmaW5lIFNEUkFNX1JYQkFTX1NEU1pfNjQJCTB4MDAwMEZFMDAJLyogIDY0TQkJKi8KKyNkZWZpbmUgU0RSQU1fUlhCQVNfU0RTWl8xMjgJCTB4MDAwMEZDMDAJLyogMTI4TQkJKi8KKyNkZWZpbmUgU0RSQU1fUlhCQVNfU0RTWl8yNTYJCTB4MDAwMEY4MDAJLyogMjU2TQkJKi8KKyNkZWZpbmUgU0RSQU1fUlhCQVNfU0RTWl81MTIJCTB4MDAwMEYwMDAJLyogNTEyTQkJKi8KKyNkZWZpbmUgU0RSQU1fUlhCQVNfU0RTWl8xMDI0CQkweDAwMDBFMDAwCS8qIDEwMjRNCSovCisjZGVmaW5lIFNEUkFNX1JYQkFTX1NEU1pfMjA0OAkJMHgwMDAwQzAwMAkvKiAyMDQ4TQkqLworI2RlZmluZSBTRFJBTV9SWEJBU19TRFNaXzQwOTYJCTB4MDAwMDgwMDAJLyogNDA5Nk0JKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBNZW1vcnkgY29udHJvbGxlciBkZWZpbmVzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNEUkFNQ19EQ1JfQkFTRQkweDAxMAorI2RlZmluZSBTRFJBTUNfQ0ZHQUREUgkoU0RSQU1DX0RDUl9CQVNFKzB4MCkgICAvKiBNZW1vcnkgY29uZmlndXJhdGlvbiBhZGQgICovCisjZGVmaW5lIFNEUkFNQ19DRkdEQVRBCShTRFJBTUNfRENSX0JBU0UrMHgxKSAgIC8qIE1lbW9yeSBjb25maWd1cmF0aW9uIGRhdGEgKi8KKworLyogQSBSRVZPSVIgdmVyc3VzIHNwZWNzIDQgYmFuayAgLSBTRyovCisjZGVmaW5lIFNEUkFNX01DU1RBVAkweDE0CS8qIG1lbW9yeSBjb250cm9sbGVyIHN0YXR1cyAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMQkweDIwCS8qIG1lbW9yeSBjb250cm9sbGVyIG9wdGlvbnMgMSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMgkweDIxCS8qIG1lbW9yeSBjb250cm9sbGVyIG9wdGlvbnMgMiAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX01PRFQwCTB4MjIJLyogb24gZGllIHRlcm1pbmF0aW9uIGZvciBiYW5rIDAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTU9EVDEJMHgyMwkvKiBvbiBkaWUgdGVybWluYXRpb24gZm9yIGJhbmsgMSAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9NT0RUMgkweDI0CS8qIG9uIGRpZSB0ZXJtaW5hdGlvbiBmb3IgYmFuayAyICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX01PRFQzCTB4MjUJLyogb24gZGllIHRlcm1pbmF0aW9uIGZvciBiYW5rIDMgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fQ09EVAkweDI2CS8qIG9uIGRpZSB0ZXJtaW5hdGlvbiBmb3IgY29udHJvbGxlciAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX1ZWUFIJMHgyNwkvKiB2YXJpYWJsZSBWUmVmIHByb2dyYW1tbWluZyAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9PUEFSUwkweDI4CS8qIG9uIGNoaXAgZHJpdmVyIGNvbnRyb2wgc2V0dXAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX09QQVJUCTB4MjkJLyogb24gY2hpcCBkcml2ZXIgY29udHJvbCB0cmlnZ2VyICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fUlRSCTB4MzAJLyogcmVmcmVzaCB0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fUE1JVAkweDM0CS8qIHBvd2VyIG1hbmFnZW1lbnQgaWRsZSB0aW1lciAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX01CMENGCTB4NDAJLyogbWVtb3J5IGJhbmsgMCBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTUIxQ0YJMHg0NAkvKiBtZW1vcnkgYmFuayAxIGNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9NQjJDRgkweDQ4CisjZGVmaW5lIFNEUkFNX01CM0NGCTB4NEMKKyNkZWZpbmUgU0RSQU1fSU5JVFBMUjAJMHg1MAkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSMQkweDUxCS8qIG1hbnVhbCBpbml0aWFsaXphdGlvbiBjb250cm9sICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX0lOSVRQTFIyCTB4NTIJLyogbWFudWFsIGluaXRpYWxpemF0aW9uIGNvbnRyb2wgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fSU5JVFBMUjMJMHg1MwkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSNAkweDU0CS8qIG1hbnVhbCBpbml0aWFsaXphdGlvbiBjb250cm9sICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX0lOSVRQTFI1CTB4NTUJLyogbWFudWFsIGluaXRpYWxpemF0aW9uIGNvbnRyb2wgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fSU5JVFBMUjYJMHg1NgkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSNwkweDU3CS8qIG1hbnVhbCBpbml0aWFsaXphdGlvbiBjb250cm9sICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX0lOSVRQTFI4CTB4NTgJLyogbWFudWFsIGluaXRpYWxpemF0aW9uIGNvbnRyb2wgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fSU5JVFBMUjkJMHg1OQkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSMTAJMHg1YQkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSMTEJMHg1YgkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSMTIJMHg1YwkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSMTMJMHg1ZAkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSMTQJMHg1ZQkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9JTklUUExSMTUJMHg1ZgkvKiBtYW51YWwgaW5pdGlhbGl6YXRpb24gY29udHJvbCAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9SUURDCTB4NzAJLyogcmVhZCBEUVMgZGVsYXkgY29udHJvbCAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fUkZEQwkweDc0CS8qIHJlYWQgZmVlZGJhY2sgZGVsYXkgY29udHJvbCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX1JEQ0MJMHg3OAkvKiByZWFkIGRhdGEgY2FwdHVyZSBjb250cm9sICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9ETENSCTB4N0EJLyogZGVsYXkgbGluZSBjYWxpYnJhdGlvbiAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fQ0xLVFIJMHg4MAkvKiBERFIgY2xvY2sgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9XUkRUUgkweDgxCS8qIHdyaXRlIGRhdGEsIERRUywgRE0gY2xvY2ssIHRpbWluZyAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX1NEVFIxCTB4ODUJLyogRERSIFNEUkFNIHRpbWluZyAxICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fU0RUUjIJMHg4NgkvKiBERFIgU0RSQU0gdGltaW5nIDIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9TRFRSMwkweDg3CS8qIEREUiBTRFJBTSB0aW1pbmcgMyAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNEUkFNX01NT0RFCTB4ODgJLyogbWVtb3J5IG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTUVNT0RFCTB4ODkJLyogbWVtb3J5IGV4dGVuZGVkIG1vZGUgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU0RSQU1fRUNDQ1IJMHg5OAkvKiBFQ0MgZXJyb3Igc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9DSUQJMHhBNAkvKiBjb3JlIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTRFJBTV9SSUQJMHhBOAkvKiByZXZpc2lvbiBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgTWVtb3J5IENvbnRyb2xsZXIgU3RhdHVzCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9NQ1NUQVRfTUlDX01BU0sJCTB4ODAwMDAwMDAJLyogTWVtb3J5IGluaXQgc3RhdHVzIG1hc2sJKi8KKyNkZWZpbmUgU0RSQU1fTUNTVEFUX01JQ19OT1RDT01QCTB4MDAwMDAwMDAJLyogTWVtIGluaXQgbm90IGNvbXBsZXRlCSovCisjZGVmaW5lIFNEUkFNX01DU1RBVF9NSUNfQ09NUAkJMHg4MDAwMDAwMAkvKiBNZW0gaW5pdCBjb21wbGV0ZQkJKi8KKyNkZWZpbmUgU0RSQU1fTUNTVEFUX1NSTVNfTUFTSwkJMHg4MDAwMDAwMAkvKiBNZW0gc2VsZiByZWZyZXNoIHN0YXQgbWFzawkqLworI2RlZmluZSBTRFJBTV9NQ1NUQVRfU1JNU19OT1RfU0YJMHgwMDAwMDAwMAkvKiBNZW0gbm90IGluIHNlbGYgcmVmcmVzaAkqLworI2RlZmluZSBTRFJBTV9NQ1NUQVRfU1JNU19TRgkJMHg4MDAwMDAwMAkvKiBNZW0gaW4gc2VsZiByZWZyZXNoCQkqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgTWVtb3J5IENvbnRyb2xsZXIgT3B0aW9ucyAxCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19NQVNLCQkweDMwMDAwMDAwIC8qIE1lbW9yeSBkYXRhIGVyciBjaGVjayBtYXNrKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX01DSEtfTk9OCQkweDAwMDAwMDAwIC8qIE5vIEVDQyBnZW5lcmF0aW9uCQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19HRU4JCTB4MjAwMDAwMDAgLyogRUNDIGdlbmVyYXRpb24JCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX0NISwkJMHgxMDAwMDAwMCAvKiBFQ0MgZ2VuZXJhdGlvbiBhbmQgY2hlY2sJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX01DSEtfQ0hLX1JFUAkweDMwMDAwMDAwIC8qIEVDQyBnZW5lcmF0aW9uLCBjaGssIHJlcG9ydCovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX0NIS19ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjgpJjB4MykKKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1JERU5fTUFTSwkJMHgwODAwMDAwMCAvKiBSZWdpc3RlcmVkIERJTU0gbWFzawkqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfUkRFTgkJMHgwODAwMDAwMCAvKiBSZWdpc3RlcmVkIERJTU0gZW5hYmxlCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9QTVVfTUFTSwkJMHgwNjAwMDAwMCAvKiBQYWdlIG1hbmFnZW1lbnQgdW5pdCBtYXNrCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9QTVVfQ0xPU0UJCTB4MDAwMDAwMDAgLyogUE1VIENsb3NlCQkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1BNVV9PUEVOCQkweDA0MDAwMDAwIC8qIFBNVSBPcGVuCQkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1BNVV9BVVRPQ0xPU0UJMHgwMjAwMDAwMCAvKiBQTVUgQXV0b0Nsb3NlCQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfRE1XRF9NQVNLCQkweDAxMDAwMDAwIC8qIERSQU0gd2lkdGggbWFzawkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX0RNV0RfMzIJCTB4MDAwMDAwMDAgLyogMzIgYml0cwkJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ETVdEXzY0CQkweDAxMDAwMDAwIC8qIDY0IGJpdHMJCQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfVUlPU19NQVNLCQkweDAwQzAwMDAwIC8qIFVudXNlZCBJTyBTdGF0ZQkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX0JDTlRfTUFTSwkJMHgwMDIwMDAwMCAvKiBCYW5rIGNvdW50CQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfNF9CQU5LUwkJMHgwMDAwMDAwMCAvKiA0IEJhbmtzCQkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxXzhfQkFOS1MJCTB4MDAyMDAwMDAgLyogOCBCYW5rcwkJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFJfVFlQRV9NQVNLCTB4MDAxMDAwMDAgLyogRERSIE1lbW9yeSBUeXBlIG1hc2sJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX0REUjFfVFlQRQkJMHgwMDAwMDAwMCAvKiBERFIxIE1lbW9yeSBUeXBlCQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfRERSMl9UWVBFCQkweDAwMTAwMDAwIC8qIEREUjIgTWVtb3J5IFR5cGUJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9RREVQCQkweDAwMDIwMDAwIC8qIDQgY29tbWFuZHMgZGVlcAkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1JXT09fTUFTSwkJMHgwMDAwODAwMCAvKiBPdXQgb2YgT3JkZXIgUmVhZCBtYXNrCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9SV09PX0RJU0FCTEVECTB4MDAwMDAwMDAgLyogZGlzYWJsZWQJCQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfUldPT19FTkFCTEVECTB4MDAwMDgwMDAgLyogZW5hYmxlZAkJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9XT09PX01BU0sJCTB4MDAwMDQwMDAgLyogT3V0IG9mIE9yZGVyIFdyaXRlIG1hc2sJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1dPT09fRElTQUJMRUQJMHgwMDAwMDAwMCAvKiBkaXNhYmxlZAkJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9XT09PX0VOQUJMRUQJMHgwMDAwNDAwMCAvKiBlbmFibGVkCQkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX0RDT09fTUFTSwkJMHgwMDAwMjAwMCAvKiBBbGwgT3V0IG9mIE9yZGVyIG1hc2sJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX0RDT09fRElTQUJMRUQJMHgwMDAwMjAwMCAvKiBkaXNhYmxlZAkJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9EQ09PX0VOQUJMRUQJMHgwMDAwMDAwMCAvKiBlbmFibGVkCQkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX0RSRUZfTUFTSwkJMHgwMDAwMTAwMCAvKiBEZWZlcnJlZCByZWZyZXNoIG1hc2sJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX0RSRUZfTk9STUFMCTB4MDAwMDAwMDAgLyogbm9ybWFsIHJlZnJlc2gJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9EUkVGX0RFRkVSXzQJMHgwMDAwMTAwMCAvKiBkZWZlciB1cCB0byA0IHJlZnJlc2ggY21kCSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICBNZW1vcnkgQ29udHJvbGxlciBPcHRpb25zIDIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNEUkFNX01DT1BUMl9TUkVOX01BU0sJCTB4ODAwMDAwMDAgLyogU2VsZiBUZXN0IG1hc2sJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMl9TUkVOX0VYSVQJCTB4MDAwMDAwMDAgLyogU2VsZiBUZXN0IGV4aXQJCSovCisjZGVmaW5lIFNEUkFNX01DT1BUMl9TUkVOX0VOVEVSCQkweDgwMDAwMDAwIC8qIFNlbGYgVGVzdCBlbnRlcgkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQyX1BNRU5fTUFTSwkJMHg0MDAwMDAwMCAvKiBQb3dlciBNYW5hZ2VtZW50IG1hc2sJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQyX1BNRU5fRElTQUJMRQkweDAwMDAwMDAwIC8qIGRpc2FibGUJCQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDJfUE1FTl9FTkFCTEUJMHg0MDAwMDAwMCAvKiBlbmFibGUJCQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDJfSVBUUl9NQVNLCQkweDIwMDAwMDAwIC8qIEluaXQgVHJpZ2dlciBSZWcgbWFzawkqLworI2RlZmluZSBTRFJBTV9NQ09QVDJfSVBUUl9JRExFCQkweDAwMDAwMDAwIC8qIGlkbGUJCQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDJfSVBUUl9FWEVDVVRFCTB4MjAwMDAwMDAgLyogZXhlY3V0ZSBwcmVsb2FkZWQgaW5pdAkqLworI2RlZmluZSBTRFJBTV9NQ09QVDJfWFNSUF9NQVNLCQkweDEwMDAwMDAwIC8qIEV4aXQgU2VsZiBSZWZyZXNoIFByZXZlbnQJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQyX1hTUlBfQUxMT1cJCTB4MDAwMDAwMDAgLyogYWxsb3cgc2VsZiByZWZyZXNoIGV4aXQJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQyX1hTUlBfUFJFVkVOVAkweDEwMDAwMDAwIC8qIHByZXZlbnQgc2VsZiByZWZyZXNoIGV4aXQJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQyX0RDRU5fTUFTSwkJMHgwODAwMDAwMCAvKiBTRFJBTSBDb250cm9sbGVyIEVuYWJsZQkqLworI2RlZmluZSBTRFJBTV9NQ09QVDJfRENFTl9ESVNBQkxFCTB4MDAwMDAwMDAgLyogU0RSQU0gQ29udHJvbGxlciBFbmFibGUJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQyX0RDRU5fRU5BQkxFCTB4MDgwMDAwMDAgLyogU0RSQU0gQ29udHJvbGxlciBFbmFibGUJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQyX0lTSUVfTUFTSwkJMHgwNDAwMDAwMCAvKiBJbml0IFNlcSBJbnRlcnJ1cHRhYmxlIG1hcyovCisjZGVmaW5lIFNEUkFNX01DT1BUMl9JU0lFX0RJU0FCTEUJMHgwMDAwMDAwMCAvKiBkaXNhYmxlCQkJKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQyX0lTSUVfRU5BQkxFCTB4MDQwMDAwMDAgLyogZW5hYmxlCQkJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIFNEUkFNIFJlZnJlc2ggVGltZXIgUmVnaXN0ZXIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNEUkFNX1JUUl9SSU5UX01BU0sJCTB4RkZGODAwMDAKKyNkZWZpbmUgU0RSQU1fUlRSX1JJTlRfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHhGRkY4KTw8MTYpCisjZGVmaW5lIFNEUkFNX1JUUl9SSU5UX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4xNikmMHhGRkY4KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgU0RSQU0gUmVhZCBEUVMgRGVsYXkgQ29udHJvbCBSZWdpc3RlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU0RSQU1fUlFEQ19SUURFX01BU0sJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fUlFEQ19SUURFX0RJU0FCTEUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fUlFEQ19SUURFX0VOQUJMRQkJMHg4MDAwMDAwMAorI2RlZmluZSBTRFJBTV9SUURDX1JRRkRfTUFTSwkJMHgwMDAwMDFGRgorI2RlZmluZSBTRFJBTV9SUURDX1JRRkRfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgxRkYpPDwwKQorCisjZGVmaW5lIFNEUkFNX1JRRENfUlFGRF9NQVgJCTB4MUZGCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICBTRFJBTSBSZWFkIERhdGEgQ2FwdHVyZSBDb250cm9sIFJlZ2lzdGVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9SRENDX1JEU1NfTUFTSwkJMHhDMDAwMDAwMAorI2RlZmluZSBTRFJBTV9SRENDX1JEU1NfVDEJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fUkRDQ19SRFNTX1QyCQkweDQwMDAwMDAwCisjZGVmaW5lIFNEUkFNX1JEQ0NfUkRTU19UMwkJMHg4MDAwMDAwMAorI2RlZmluZSBTRFJBTV9SRENDX1JEU1NfVDQJCTB4QzAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fUkRDQ19SU0FFX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0RSQU1fUkRDQ19SU0FFX0RJU0FCTEUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0RSQU1fUkRDQ19SU0FFX0VOQUJMRQkJMHgwMDAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgU0RSQU0gUmVhZCBGZWVkYmFjayBEZWxheSBDb250cm9sIFJlZ2lzdGVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9SRkRDX0FSU0VfTUFTSwkJMHg4MDAwMDAwMAorI2RlZmluZSBTRFJBTV9SRkRDX0FSU0VfRElTQUJMRQkJMHg4MDAwMDAwMAorI2RlZmluZSBTRFJBTV9SRkRDX0FSU0VfRU5BQkxFCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUkFNX1JGRENfUkZPU19NQVNLCQkweDAwN0YwMDAwCisjZGVmaW5lIFNEUkFNX1JGRENfUkZPU19FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDdGKTw8MTYpCisjZGVmaW5lIFNEUkFNX1JGRENfUkZGRF9NQVNLCQkweDAwMDAwM0ZGCisjZGVmaW5lIFNEUkFNX1JGRENfUkZGRF9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDNGRik8PDApCisKKyNkZWZpbmUgU0RSQU1fUkZEQ19SRkZEX01BWAkJMHg3RkYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIFNEUkFNIERlbGF5IExpbmUgQ2FsaWJyYXRpb24gUmVnaXN0ZXIKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNEUkFNX0RMQ1JfRENMTV9NQVNLCQkweDgwMDAwMDAwCisjZGVmaW5lIFNEUkFNX0RMQ1JfRENMTV9NQU5VRUwJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fRExDUl9EQ0xNX0FVVE8JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fRExDUl9ETENSX01BU0sJCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0RSQU1fRExDUl9ETENSX0NBTElCUkFURQkweDA4MDAwMDAwCisjZGVmaW5lIFNEUkFNX0RMQ1JfRExDUl9JRExFCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUkFNX0RMQ1JfRExDU19NQVNLCQkweDA3MDAwMDAwCisjZGVmaW5lIFNEUkFNX0RMQ1JfRExDU19OT1RfUlVOCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUkFNX0RMQ1JfRExDU19JTl9QUk9HUkVTUwkweDAxMDAwMDAwCisjZGVmaW5lIFNEUkFNX0RMQ1JfRExDU19DT01QTEVURQkweDAyMDAwMDAwCisjZGVmaW5lIFNEUkFNX0RMQ1JfRExDU19DT05UX0RPTkUJMHgwMzAwMDAwMAorI2RlZmluZSBTRFJBTV9ETENSX0RMQ1NfRVJST1IJCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0RSQU1fRExDUl9ETENWX01BU0sJCTB4MDAwMDAxRkYKKyNkZWZpbmUgU0RSQU1fRExDUl9ETENWX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MUZGKTw8MCkKKyNkZWZpbmUgU0RSQU1fRExDUl9ETENWX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4wKSYweDFGRikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIFNEUkFNIENvbnRyb2xsZXIgT24gRGllIFRlcm1pbmF0aW9uIFJlZ2lzdGVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9DT0RUX09EVF9PTgkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ09EVF9PRFRfT0ZGCQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFJBTV9DT0RUX0RRU19WT0xUQUdFX0REUl9NQVNLCQkweDAwMDAwMDIwCisjZGVmaW5lIFNEUkFNX0NPRFRfRFFTXzJfNV9WX0REUjEJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ09EVF9EUVNfMV84X1ZfRERSMgkJMHgwMDAwMDAyMAorI2RlZmluZSBTRFJBTV9DT0RUX0RRU19NQVNLCQkJMHgwMDAwMDAxMAorI2RlZmluZSBTRFJBTV9DT0RUX0RRU19ESUZGRVJFTlRJQUwJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ09EVF9EUVNfU0lOR0xFX0VORAkJMHgwMDAwMDAxMAorI2RlZmluZSBTRFJBTV9DT0RUX0NLU0VfRElGRkVSRU5USUFMCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUkFNX0NPRFRfQ0tTRV9TSU5HTEVfRU5ECQkweDAwMDAwMDA4CisjZGVmaW5lIFNEUkFNX0NPRFRfRkVFQkJBQ0tfUkNWX1NJTkdMRV9FTkQJMHgwMDAwMDAwNAorI2RlZmluZSBTRFJBTV9DT0RUX0ZFRUJCQUNLX0RSVl9TSU5HTEVfRU5ECTB4MDAwMDAwMDIKKyNkZWZpbmUgU0RSQU1fQ09EVF9JT19ISVogIAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ09EVF9JT19OTU9ERSAgCQkJMHgwMDAwMDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgU0RSQU0gTW9kZSBSZWdpc3RlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU0RSQU1fTU1PREVfV1JfTUFTSwkJMHgwMDAwMEUwMAorI2RlZmluZSBTRFJBTV9NTU9ERV9XUl9ERFIxCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUkFNX01NT0RFX1dSX0REUjJfM19DWUMJMHgwMDAwMDQwMAorI2RlZmluZSBTRFJBTV9NTU9ERV9XUl9ERFIyXzRfQ1lDCTB4MDAwMDA2MDAKKyNkZWZpbmUgU0RSQU1fTU1PREVfV1JfRERSMl81X0NZQwkweDAwMDAwODAwCisjZGVmaW5lIFNEUkFNX01NT0RFX1dSX0REUjJfNl9DWUMJMHgwMDAwMEEwMAorI2RlZmluZSBTRFJBTV9NTU9ERV9EQ0xfTUFTSwkJMHgwMDAwMDA3MAorI2RlZmluZSBTRFJBTV9NTU9ERV9EQ0xfRERSMV8yXzBfQ0xLCTB4MDAwMDAwMjAKKyNkZWZpbmUgU0RSQU1fTU1PREVfRENMX0REUjFfMl81X0NMSwkweDAwMDAwMDYwCisjZGVmaW5lIFNEUkFNX01NT0RFX0RDTF9ERFIxXzNfMF9DTEsJMHgwMDAwMDAzMAorI2RlZmluZSBTRFJBTV9NTU9ERV9EQ0xfRERSMl8yXzBfQ0xLCTB4MDAwMDAwMjAKKyNkZWZpbmUgU0RSQU1fTU1PREVfRENMX0REUjJfM18wX0NMSwkweDAwMDAwMDMwCisjZGVmaW5lIFNEUkFNX01NT0RFX0RDTF9ERFIyXzRfMF9DTEsJMHgwMDAwMDA0MAorI2RlZmluZSBTRFJBTV9NTU9ERV9EQ0xfRERSMl81XzBfQ0xLCTB4MDAwMDAwNTAKKyNkZWZpbmUgU0RSQU1fTU1PREVfRENMX0REUjJfNl8wX0NMSwkweDAwMDAwMDYwCisjZGVmaW5lIFNEUkFNX01NT0RFX0RDTF9ERFIyXzdfMF9DTEsJMHgwMDAwMDA3MAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgU0RSQU0gRXh0ZW5kZWQgTW9kZSBSZWdpc3RlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU0RSQU1fTUVNT0RFX0RJQ19NQVNLCQkweDAwMDAwMDAyCisjZGVmaW5lIFNEUkFNX01FTU9ERV9ESUNfTk9STUFMCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUkFNX01FTU9ERV9ESUNfV0VBSwkJMHgwMDAwMDAwMgorI2RlZmluZSBTRFJBTV9NRU1PREVfRExMX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0RSQU1fTUVNT0RFX0RMTF9ESVNBQkxFCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0RSQU1fTUVNT0RFX0RMTF9FTkFCTEUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fTUVNT0RFX1JUVF9NQVNLCQkweDAwMDAwMDQ0CisjZGVmaW5lIFNEUkFNX01FTU9ERV9SVFRfRElTQUJMRUQJMHgwMDAwMDAwMAorI2RlZmluZSBTRFJBTV9NRU1PREVfUlRUXzc1T0hNCQkweDAwMDAwMDA0CisjZGVmaW5lIFNEUkFNX01FTU9ERV9SVFRfMTUwT0hNCQkweDAwMDAwMDQwCisjZGVmaW5lIFNEUkFNX01FTU9ERV9EUVNfTUFTSwkJMHgwMDAwMDQwMAorI2RlZmluZSBTRFJBTV9NRU1PREVfRFFTX0RJU0FCTEUJMHgwMDAwMDQwMAorI2RlZmluZSBTRFJBTV9NRU1PREVfRFFTX0VOQUJMRQkJMHgwMDAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgU0RSQU0gQ2xvY2sgVGltaW5nIFJlZ2lzdGVyCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9DTEtUUl9DTEtQX01BU0sJCTB4QzAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fQ0xLVFJfQ0xLUF8wX0RFRwkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFJBTV9DTEtUUl9DTEtQXzE4MF9ERUdfQURWCTB4ODAwMDAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIFNEUkFNIFdyaXRlIFRpbWluZyBSZWdpc3RlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU0RSQU1fV1JEVFJfTExXUF9NQVNLCQkweDEwMDAwMDAwCisjZGVmaW5lIFNEUkFNX1dSRFRSX0xMV1BfRElTCQkweDEwMDAwMDAwCisjZGVmaW5lIFNEUkFNX1dSRFRSX0xMV1BfMV9DWUMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fV1JEVFJfV1RSX01BU0sJCTB4MEUwMDAwMDAKKyNkZWZpbmUgU0RSQU1fV1JEVFJfV1RSXzBfREVHCQkweDA2MDAwMDAwCisjZGVmaW5lIFNEUkFNX1dSRFRSX1dUUl8xODBfREVHX0FEVgkweDAyMDAwMDAwCisjZGVmaW5lIFNEUkFNX1dSRFRSX1dUUl8yNzBfREVHX0FEVgkweDAwMDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICBTRFJBTSBTRFRSMSBPcHRpb25zCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9TRFRSMV9MRE9GX01BU0sJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjFfTERPRl8xX0NMSwkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFJBTV9TRFRSMV9MRE9GXzJfQ0xLCQkweDgwMDAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIxX1JUV19NQVNLCQkweDAwRjAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIxX1JUV18yX0NMSwkJMHgwMDIwMDAwMAorI2RlZmluZSBTRFJBTV9TRFRSMV9SVFdfM19DTEsJCTB4MDAzMDAwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjFfV1RXT19NQVNLCQkweDAwMEYwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIxX1dUV09fMF9DTEsJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjFfV1RXT18xX0NMSwkJMHgwMDAxMDAwMAorI2RlZmluZSBTRFJBTV9TRFRSMV9SVFJPX01BU0sJCTB4MDAwMEYwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjFfUlRST18xX0NMSwkJMHgwMDAwMTAwMAorI2RlZmluZSBTRFJBTV9TRFRSMV9SVFJPXzJfQ0xLCQkweDAwMDAyMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICBTRFJBTSBTRFRSMiBPcHRpb25zCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9TRFRSMl9SQ0RfTUFTSwkJMHhGMDAwMDAwMAorI2RlZmluZSBTRFJBTV9TRFRSMl9SQ0RfMV9DTEsJCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjJfUkNEXzJfQ0xLCQkweDIwMDAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JDRF8zX0NMSwkJMHgzMDAwMDAwMAorI2RlZmluZSBTRFJBTV9TRFRSMl9SQ0RfNF9DTEsJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjJfUkNEXzVfQ0xLCQkweDUwMDAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1dUUl9NQVNLCQkweDBGMDAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1dUUl8xX0NMSwkJMHgwMTAwMDAwMAorI2RlZmluZSBTRFJBTV9TRFRSMl9XVFJfMl9DTEsJCTB4MDIwMDAwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjJfV1RSXzNfQ0xLCQkweDAzMDAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1dUUl80X0NMSwkJMHgwNDAwMDAwMAorI2RlZmluZSBTRFJBTV9TRFRSM19XVFJfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHhGKTw8MjQpCisjZGVmaW5lIFNEUkFNX1NEVFIyX1hTTlJfTUFTSwkJMHgwMEZGMDAwMAorI2RlZmluZSBTRFJBTV9TRFRSMl9YU05SXzhfQ0xLCQkweDAwMDgwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1hTTlJfMTZfQ0xLCQkweDAwMTAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1hTTlJfMzJfQ0xLCQkweDAwMjAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1hTTlJfNjRfQ0xLCQkweDAwNDAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1dQQ19NQVNLCQkweDAwMDBGMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1dQQ18yX0NMSwkJMHgwMDAwMjAwMAorI2RlZmluZSBTRFJBTV9TRFRSMl9XUENfM19DTEsJCTB4MDAwMDMwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjJfV1BDXzRfQ0xLCQkweDAwMDA0MDAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1dQQ181X0NMSwkJMHgwMDAwNTAwMAorI2RlZmluZSBTRFJBTV9TRFRSMl9XUENfNl9DTEsJCTB4MDAwMDYwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjNfV1BDX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4Rik8PDEyKQorI2RlZmluZSBTRFJBTV9TRFRSMl9SUENfTUFTSwkJMHgwMDAwMEYwMAorI2RlZmluZSBTRFJBTV9TRFRSMl9SUENfMl9DTEsJCTB4MDAwMDAyMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjJfUlBDXzNfQ0xLCQkweDAwMDAwMzAwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JQQ180X0NMSwkJMHgwMDAwMDQwMAorI2RlZmluZSBTRFJBTV9TRFRSMl9SUF9NQVNLCQkweDAwMDAwMEYwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JQXzNfQ0xLCQkweDAwMDAwMDMwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JQXzRfQ0xLCQkweDAwMDAwMDQwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JQXzVfQ0xLCQkweDAwMDAwMDUwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JQXzZfQ0xLCQkweDAwMDAwMDYwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JQXzdfQ0xLCQkweDAwMDAwMDcwCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JSRF9NQVNLCQkweDAwMDAwMDBGCisjZGVmaW5lIFNEUkFNX1NEVFIyX1JSRF8yX0NMSwkJMHgwMDAwMDAwMgorI2RlZmluZSBTRFJBTV9TRFRSMl9SUkRfM19DTEsJCTB4MDAwMDAwMDMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIFNEUkFNIFNEVFIzIE9wdGlvbnMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNEUkFNX1NEVFIzX1JBU19NQVNLCQkweDFGMDAwMDAwCisjZGVmaW5lIFNEUkFNX1NEVFIzX1JBU19FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDFGKTw8MjQpCisjZGVmaW5lIFNEUkFNX1NEVFIzX1JDX01BU0sJCTB4MDAxRjAwMDAKKyNkZWZpbmUgU0RSQU1fU0RUUjNfUkNfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgxRik8PDE2KQorI2RlZmluZSBTRFJBTV9TRFRSM19YQ1NfTUFTSwkJMHgwMDAwMUYwMAorI2RlZmluZSBTRFJBTV9TRFRSM19YQ1MJCQkweDAwMDAwRDAwCisjZGVmaW5lIFNEUkFNX1NEVFIzX1JGQ19NQVNLCQkweDAwMDAwMDNGCisjZGVmaW5lIFNEUkFNX1NEVFIzX1JGQ19FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDNGKTw8MCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIE1lbW9yeSBCYW5rIDAtMSBjb25maWd1cmF0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTRFJBTV9CWENGX01fQU1fTUFTSwkJMHgwMDAwMEYwMAkvKiBBZGRyZXNzaW5nIG1vZGUJKi8KKyNkZWZpbmUgU0RSQU1fQlhDRl9NX0FNXzAJCTB4MDAwMDAwMDAJLyogICBNb2RlIDAJCSovCisjZGVmaW5lIFNEUkFNX0JYQ0ZfTV9BTV8xCQkweDAwMDAwMTAwCS8qICAgTW9kZSAxCQkqLworI2RlZmluZSBTRFJBTV9CWENGX01fQU1fMgkJMHgwMDAwMDIwMAkvKiAgIE1vZGUgMgkJKi8KKyNkZWZpbmUgU0RSQU1fQlhDRl9NX0FNXzMJCTB4MDAwMDAzMDAJLyogICBNb2RlIDMJCSovCisjZGVmaW5lIFNEUkFNX0JYQ0ZfTV9BTV80CQkweDAwMDAwNDAwCS8qICAgTW9kZSA0CQkqLworI2RlZmluZSBTRFJBTV9CWENGX01fQU1fNQkJMHgwMDAwMDUwMAkvKiAgIE1vZGUgNQkJKi8KKyNkZWZpbmUgU0RSQU1fQlhDRl9NX0FNXzYJCTB4MDAwMDA2MDAJLyogICBNb2RlIDYJCSovCisjZGVmaW5lIFNEUkFNX0JYQ0ZfTV9BTV83CQkweDAwMDAwNzAwCS8qICAgTW9kZSA3CQkqLworI2RlZmluZSBTRFJBTV9CWENGX01fQU1fOAkJMHgwMDAwMDgwMAkvKiAgIE1vZGUgOAkJKi8KKyNkZWZpbmUgU0RSQU1fQlhDRl9NX0FNXzkJCTB4MDAwMDA5MDAJLyogICBNb2RlIDkJCSovCisjZGVmaW5lIFNEUkFNX0JYQ0ZfTV9CRV9NQVNLCQkweDAwMDAwMDAxCS8qIE1lbW9yeSBCYW5rIEVuYWJsZQkqLworI2RlZmluZSBTRFJBTV9CWENGX01fQkVfRElTQUJMRQkJMHgwMDAwMDAwMAkvKiBNZW1vcnkgQmFuayBFbmFibGUJKi8KKyNkZWZpbmUgU0RSQU1fQlhDRl9NX0JFX0VOQUJMRQkJMHgwMDAwMDAwMQkvKiBNZW1vcnkgQmFuayBFbmFibGUJKi8KKyNlbmRpZiAvKiBDT05GSUdfNDQwU1BFICovCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICB8IEV4dGVybmFsIEJ1cyBDb250cm9sbGVyCiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjQwLDcgKzg0OSw4IEBACiAjZGVmaW5lIHhiY2ZnCQkweDIzCS8qIGV4dGVybmFsIGJ1cyBjb25maWd1cmF0aW9uIHJlZwkqLwogI2RlZmluZSB4YmNpZAkJMHgyNAkvKiBleHRlcm5hbCBidXMgY29yZSBpZCByZWcJCSovCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpCisjaWYgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCiAKIC8qIFBMQjQgdG8gUExCMyBCcmlkZ2UgT1VUICovCiAjZGVmaW5lIFA0UDNfRENSX0JBU0UgICAgICAgICAgIDB4MDIwCkBAIC0zMzAsNiArOTQwLDcgQEAKICNkZWZpbmUgcGxiMV9iZWFybCAgICAgICAgICAgICAgICAoUExCX0FSQklURVJfQkFTRSsgMHgwQykKICNkZWZpbmUgcGxiMV9iZWFyaCAgICAgICAgICAgICAgICAoUExCX0FSQklURVJfQkFTRSsgMHgwRCkKIAorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKIC8qIFBpbiBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyIDEgKi8KICNkZWZpbmUgU0RSMF9QRkMxICAgICAgICAgICAgICAgICAgICAweDQxMDEKICNkZWZpbmUgICBTRFIwX1BGQzFfVTFNRV9NQVNLICAgICAgICAgMHgwMjAwMDAwMCAgICAvKiBVQVJUMSBNb2RlIEVuYWJsZSAqLwpAQCAtMzcxLDYgKzk4MiwxNzggQEAKICNkZWZpbmUgICBTRFIwX1VTQjBfTEVFTl9ESVNBQkxFICAgICAgMHgwMDAwMDAwMCAgICAgIC8qIExpdHRsZSBFbmRpYW4gRGlzYWJsZSAqLwogI2RlZmluZSAgIFNEUjBfVVNCMF9MRUVOX0VOQUJMRSAgICAgICAweDAwMDAwMDAxICAgICAgLyogTGl0dGxlIEVuZGlhbiBFbmFibGUgKi8KIAorLyogTWlzY2VhbGxlbmVhb3VzIEZ1bmN0aW9uIFJlZy4gKi8KKyNkZWZpbmUgU0RSMF9NRlIgICAgICAgICAgICAgICAgICAgICAweDQzMDAKKyNkZWZpbmUgICBTRFIwX01GUl9FVEgwX0NMS19TRUxfTUFTSyAgIDB4MDgwMDAwMDAgICAvKiBFdGhlcm5ldDAgQ2xvY2sgU2VsZWN0ICovCisjZGVmaW5lICAgU0RSMF9NRlJfRVRIMF9DTEtfU0VMX0VYVCAgICAweDAwMDAwMDAwCisjZGVmaW5lICAgU0RSMF9NRlJfRVRIMV9DTEtfU0VMX01BU0sgICAweDA0MDAwMDAwICAgLyogRXRoZXJuZXQxIENsb2NrIFNlbGVjdCAqLworI2RlZmluZSAgIFNEUjBfTUZSX0VUSDFfQ0xLX1NFTF9FWFQgICAgMHgwMDAwMDAwMAorI2RlZmluZSAgIFNEUjBfTUZSX1pNSUlfTU9ERV9NQVNLICAgICAgMHgwMzAwMDAwMCAgIC8qIFpNSUkgTW9kZSBNYXNrICovCisjZGVmaW5lICAgU0RSMF9NRlJfWk1JSV9NT0RFX01JSSAgICAgICAweDAwMDAwMDAwICAgICAvKiBaTUlJIE1vZGUgTUlJICovCisjZGVmaW5lICAgU0RSMF9NRlJfWk1JSV9NT0RFX1NNSUkgICAgICAweDAxMDAwMDAwICAgICAvKiBaTUlJIE1vZGUgU01JSSAqLworI2RlZmluZSAgIFNEUjBfTUZSX1pNSUlfTU9ERV9STUlJXzEwTSAgMHgwMjAwMDAwMCAgICAgLyogWk1JSSBNb2RlIFJNSUkgLSAxMCBNYnMgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9aTUlJX01PREVfUk1JSV8xMDBNIDB4MDMwMDAwMDAgICAgIC8qIFpNSUkgTW9kZSBSTUlJIC0gMTAwIE1icyAqLworI2RlZmluZSAgIFNEUjBfTUZSX1pNSUlfTU9ERV9CSVQwICAgICAgMHgwMjAwMDAwMCAgICAgLyogWk1JSSBNb2RlIEJpdDAgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9aTUlJX01PREVfQklUMSAgICAgIDB4MDEwMDAwMDAgICAgIC8qIFpNSUkgTW9kZSBCaXQxICovCisjZGVmaW5lICAgU0RSMF9NRlJfWk1fRU5DT0RFKG4pICAgICAgICAoKCgodW5zaWduZWQgbG9uZykobikpJjB4Myk8PDI0KQorI2RlZmluZSAgIFNEUjBfTUZSX1pNX0RFQ09ERShuKSAgICAgICAgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKTw8MjQpJjB4MykKKworI2RlZmluZSAgIFNEUjBfTUZSX0VSUkFUQTNfRU4wICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSAgIFNEUjBfTUZSX0VSUkFUQTNfRU4xICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSAgIFNEUjBfTUZSX1BLVF9SRUpfTUFTSyAgICAgICAgMHgwMDE4MDAwMCAgIC8qIFBrdCBSZWouIEVuYWJsZSBNYXNrICovCisjZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9FTiAgICAgICAgICAweDAwMTgwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIG9uIGJvdGggRU1BQzMgMC0xICovCisjZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9FTjAgICAgICAgICAweDAwMTAwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIG9uIEVNQUMzKDApICovCisjZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9FTjEgICAgICAgICAweDAwMDgwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIG9uIEVNQUMzKDEpICovCisjZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9QT0wgICAgICAgICAweDAwMjAwMDAwICAgLyogUGFja2V0IFJlamVjdCBQb2xhcml0eSAqLworCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCisjZGVmaW5lIFNEUl9VU0IyRDBDUiAgICAgICAgICAgICAgICAgMHgwMzIwCisjZGVmaW5lICAgU0RSMF9VU0IyRDBDUl9VU0IyREVWX0VCQ19TRUxfTUFTSyAgIDB4MDAwMDAwMDQgICAgLyogVVNCIDIuMCBEZXZpY2UvRUJDIE1hc3RlciBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJEMENSX1VTQjJERVZfU0VMRUNUSU9OICAgICAgMHgwMDAwMDAwNCAgICAvKiBVU0IgMi4wIERldmljZSBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJEMENSX0VCQ19TRUxFQ1RJT04gICAgICAgICAgMHgwMDAwMDAwMCAgICAvKiBFQkMgU2VsZWN0aW9uICovCisKKyNkZWZpbmUgICBTRFIwX1VTQjJEMENSX1VTQl9ERVZfSU5UX1NFTF9NQVNLICAgMHgwMDAwMDAwMiAgICAvKiBVU0IgRGV2aWNlIEludGVyZmFjZSBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJEMENSX1VTQjIwRF9ERVZTRUwgICAgICAgICAgMHgwMDAwMDAwMCAgICAgIC8qIFVTQjIuMCBEZXZpY2UgU2VsZWN0ZWQgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJEMENSX1VTQjExRF9ERVZTRUwgICAgICAgICAgMHgwMDAwMDAwMiAgICAgIC8qIFVTQjEuMSBEZXZpY2UgU2VsZWN0ZWQgKi8KKworI2RlZmluZSAgIFNEUjBfVVNCMkQwQ1JfTEVFTl9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAxICAgIC8qIExpdHRsZSBFbmRpYW4gc2VsZWN0aW9uICovCisjZGVmaW5lICAgU0RSMF9VU0IyRDBDUl9MRUVOX0RJU0FCTEUgICAgICAgICAgIDB4MDAwMDAwMDAgICAgICAvKiBMaXR0bGUgRW5kaWFuIERpc2FibGUgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJEMENSX0xFRU5fRU5BQkxFICAgICAgICAgICAgMHgwMDAwMDAwMSAgICAgIC8qIExpdHRsZSBFbmRpYW4gRW5hYmxlICovCisKKy8qIFVTQjIgSG9zdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNEUjBfVVNCMkgwQ1IgICAgICAgICAgICAgICAgMHgwMzQwCisjZGVmaW5lICAgU0RSMF9VU0IySDBDUl9XRElOVF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogSG9zdCBVVE1JIFdvcmQgSW50ZXJmYWNlICovCisjZGVmaW5lICAgU0RSMF9VU0IySDBDUl9XRElOVF84QklUXzYwTUhaICAgICAgIDB4MDAwMDAwMDAgIC8qIDgtYml0LzYwTUh6ICovCisjZGVmaW5lICAgU0RSMF9VU0IySDBDUl9XRElOVF8xNkJJVF8zME1IWiAgICAgIDB4MDAwMDAwMDEgIC8qIDE2LWJpdC8zME1IeiAqLworI2RlZmluZSAgIFNEUjBfVVNCMkgwQ1JfRUZMQURKX01BU0sgICAgICAgICAgICAweDAwMDAwMDdlIC8qIEVIQ0kgRnJhbWUgTGVuZ3RoIEFkanVzdG1lbnQgKi8KKworLyogUGluIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTRFIwX1BGQzEgICAgICAgICAgICAgICAgICAgIDB4NDEwMQorI2RlZmluZSAgIFNEUjBfUEZDMV9VMU1FX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwICAgIC8qIFVBUlQxIE1vZGUgRW5hYmxlICovCisjZGVmaW5lICAgU0RSMF9QRkMxX1UxTUVfRFNSX0RUUiAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgICAgICAvKiBVQVJUMSBpbiBEU1IvRFRSIE1vZGUgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfVTFNRV9DVFNfUlRTICAgICAgICAgICAgICAgMHgwMjAwMDAwMCAgICAgIC8qIFVBUlQxIGluIENUUy9SVFMgTW9kZSAqLworCisjZGVmaW5lICAgU0RSMF9QRkMxX1NFTEVDVF9NQVNLICAgICAgICAgICAgICAgIDB4MDFDMDAwMDAgLyogRXRoZXJuZXQgUGluIFNlbGVjdCBFTUFDIDAgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfU0VMRUNUX0NPTkZJR18xXzEgICAgICAgICAgMHgwMEMwMDAwMCAgIC8qIDF4TUlJICAgdXNpbmcgUkdNSUkgYnJpZGdlICovCisjZGVmaW5lICAgU0RSMF9QRkMxX1NFTEVDVF9DT05GSUdfMV8yICAgICAgICAgIDB4MDAwMDAwMDAgICAvKiAxeE1JSSAgIHVzaW5nICBaTUlJIGJyaWRnZSAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9TRUxFQ1RfQ09ORklHXzIgICAgICAgICAgICAweDAwQzAwMDAwICAgLyogMXhHTUlJICB1c2luZyBSR01JSSBicmlkZ2UgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfU0VMRUNUX0NPTkZJR18zICAgICAgICAgICAgMHgwMTAwMDAwMCAgIC8qIDF4VEJJICAgdXNpbmcgUkdNSUkgYnJpZGdlICovCisjZGVmaW5lICAgU0RSMF9QRkMxX1NFTEVDVF9DT05GSUdfNCAgICAgICAgICAgIDB4MDE0MDAwMDAgICAvKiAyeFJHTUlJIHVzaW5nIFJHTUlJIGJyaWRnZSAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9TRUxFQ1RfQ09ORklHXzUgICAgICAgICAgICAweDAxODAwMDAwICAgLyogMnhSVEJJICB1c2luZyBSR01JSSBicmlkZ2UgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfU0VMRUNUX0NPTkZJR182ICAgICAgICAgICAgMHgwMDgwMDAwMCAgIC8qIDJ4U01JSSAgdXNpbmcgIFpNSUkgYnJpZGdlICovCisKKyNkZWZpbmUgICBTRFIwX1BGQzFfVTBNRV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMCAgICAvKiBVQVJUMCBNb2RlIEVuYWJsZSAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9VME1FX0RTUl9EVFIgICAgICAgICAgICAgICAweDAwMDAwMDAwICAgICAgLyogVUFSVDAgaW4gRFNSL0RUUiBNb2RlICovCisjZGVmaW5lICAgU0RSMF9QRkMxX1UwTUVfQ1RTX1JUUyAgICAgICAgICAgICAgIDB4MDAwODAwMDAgICAgICAvKiBVQVJUMCBpbiBDVFMvUlRTIE1vZGUgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfVTBJTV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMCAgICAvKiBVQVJUMCBJbnRlcmZhY2UgTW9kZSAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9VMElNXzhQSU5TICAgICAgICAgICAgICAgICAweDAwMDAwMDAwICAgICAgLyogVUFSVDAgSW50ZXJmYWNlIE1vZGUgOCBwaW5zICovCisjZGVmaW5lICAgU0RSMF9QRkMxX1UwSU1fNFBJTlMgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAvKiBVQVJUMCBJbnRlcmZhY2UgTW9kZSA0IHBpbnMgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfU0lTX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMCAgICAvKiBTQ1Agb3IgSUlDMSBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfU0lTX1NDUF9TRUwgICAgICAgICAgICAgICAgMHgwMDAwMDAwMCAgICAgIC8qIFNDUCBTZWxlY3RlZCAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9TSVNfSUlDMV9TRUwgICAgICAgICAgICAgICAweDAwMDIwMDAwICAgICAgLyogSUlDMSBTZWxlY3RlZCAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9VRVNfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwICAgIC8qIFVTQjJEX1JYX0FjdGl2ZSAvIEVCQ19Ib2xkIFJlcSBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfVUVTX1VTQjJEX1NFTCAgICAgICAgICAgICAgMHgwMDAwMDAwMCAgICAgIC8qIFVTQjJEX1JYX0FjdGl2ZSBTZWxlY3RlZCAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9VRVNfRUJDSFJfU0VMICAgICAgICAgICAgICAweDAwMDEwMDAwICAgICAgLyogRUJDX0hvbGQgUmVxIFNlbGVjdGVkICovCisjZGVmaW5lICAgU0RSMF9QRkMxX0RJU19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAgICAgLyogRE1BX1JlcSgxKSAvIFVJQ19JUlEoNSkgU2VsZWN0aW9uICovCisjZGVmaW5lICAgU0RSMF9QRkMxX0RJU19ETUFSX1NFTCAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgICAgICAvKiBETUFfUmVxKDEpIFNlbGVjdGVkICovCisjZGVmaW5lICAgU0RSMF9QRkMxX0RJU19VSUNJUlE1X1NFTCAgICAgICAgICAgIDB4MDAwMDgwMDAgICAgICAvKiBVSUNfSVJRKDUpIFNlbGVjdGVkICovCisjZGVmaW5lICAgU0RSMF9QRkMxX0VSRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAgICAgLyogRUJDIE1hc3QuRXh0LlJlcS5Fbi4vR1BJTzAoMjcpIFNlbGVjdGlvbiAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9FUkVfRVhUUl9TRUwgICAgICAgICAgICAgICAweDAwMDAwMDAwICAgICAgLyogRUJDIE1hc3QuRXh0LlJlcS5Fbi4gU2VsZWN0ZWQgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfRVJFX0dQSU8wXzI3X1NFTCAgICAgICAgICAgMHgwMDAwNDAwMCAgICAgIC8qIEdQSU8wKDI3KSBTZWxlY3RlZCAqLworI2RlZmluZSAgIFNEUjBfUEZDMV9VUFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwICAgIC8qIFVTQjIgRGV2aWNlIFBhY2tldCBSZWplY3QgU2VsZWN0aW9uICovCisjZGVmaW5lICAgU0RSMF9QRkMxX1VQUl9ESVNBQkxFICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgICAgICAvKiBVU0IyIERldmljZSBQYWNrZXQgUmVqZWN0IERpc2FibGUgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzFfVVBSX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMCAgICAgIC8qIFVTQjIgRGV2aWNlIFBhY2tldCBSZWplY3QgRW5hYmxlICovCisKKyNkZWZpbmUgICBTRFIwX1BGQzFfUExCX1BNRV9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMTAwMCAgICAvKiBQTEIzL1BMQjQgUGVyZi4gTW9uaXRvciBFbi4gU2VsZWN0aW9uICovCisjZGVmaW5lICAgU0RSMF9QRkMxX1BMQl9QTUVfUExCM19TRUwgICAgICAgICAgIDB4MDAwMDAwMDAgICAgICAvKiBQTEIzIFBlcmZvcm1hbmNlIE1vbml0b3IgRW5hYmxlICovCisjZGVmaW5lICAgU0RSMF9QRkMxX1BMQl9QTUVfUExCNF9TRUwgICAgICAgICAgIDB4MDAwMDEwMDAgICAgICAvKiBQTEIzIFBlcmZvcm1hbmNlIE1vbml0b3IgRW5hYmxlICovCisjZGVmaW5lICAgU0RSMF9QRkMxX0dGR0dJX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYgICAgLyogR1BUIEZyZXF1ZW5jeSBHZW5lcmF0aW9uIEdhdGVkIEluICovCisKKy8qIEV0aGVybmV0IFBMTCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFNEUjBfUEZDMiAgICAgICAgICAgICAgICAgICAgMHg0MTAyCisjZGVmaW5lICAgU0RSMF9QRkMyX1RVTkVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDFGRjgwMDAgIC8qIExvb3Agc3RhYmlsaXR5IHR1bmluZyBiaXRzICovCisjZGVmaW5lICAgU0RSMF9QRkMyX01VTFRJX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDdDMDAgIC8qIEZyZXF1ZW5jeSBtdWx0aXBsaWNhdGlvbiBzZWxlY3RvciAqLworI2RlZmluZSAgIFNEUjBfUEZDMl9SQU5HRUJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMzgwICAvKiBQTExPVVRCL0MgZnJlcXVlbmN5IHNlbGVjdG9yICovCisjZGVmaW5lICAgU0RSMF9QRkMyX1JBTkdFQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwNzEgIC8qIFBMTE9VVEEgZnJlcXVlbmN5IHNlbGVjdG9yICovCisKKyNkZWZpbmUgICBTRFIwX1BGQzJfU0VMRUNUX01BU0sgICAgICAgICAgICAgICAgMHhFMDAwMDAwMCAgLyogRXRoZXJuZXQgUGluIHNlbGVjdCBFTUFDMSAqLworI2RlZmluZSAgIFNEUjBfUEZDMl9TRUxFQ1RfQ09ORklHXzFfMSAgICAgICAgICAweDYwMDAwMDAwICAgLyogMXhNSUkgICB1c2luZyBSR01JSSBicmlkZ2UgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzJfU0VMRUNUX0NPTkZJR18xXzIgICAgICAgICAgMHgwMDAwMDAwMCAgIC8qIDF4TUlJICAgdXNpbmcgIFpNSUkgYnJpZGdlICovCisjZGVmaW5lICAgU0RSMF9QRkMyX1NFTEVDVF9DT05GSUdfMiAgICAgICAgICAgIDB4NjAwMDAwMDAgICAvKiAxeEdNSUkgIHVzaW5nIFJHTUlJIGJyaWRnZSAqLworI2RlZmluZSAgIFNEUjBfUEZDMl9TRUxFQ1RfQ09ORklHXzMgICAgICAgICAgICAweDgwMDAwMDAwICAgLyogMXhUQkkgICB1c2luZyBSR01JSSBicmlkZ2UgKi8KKyNkZWZpbmUgICBTRFIwX1BGQzJfU0VMRUNUX0NPTkZJR180ICAgICAgICAgICAgMHhBMDAwMDAwMCAgIC8qIDJ4UkdNSUkgdXNpbmcgUkdNSUkgYnJpZGdlICovCisjZGVmaW5lICAgU0RSMF9QRkMyX1NFTEVDVF9DT05GSUdfNSAgICAgICAgICAgIDB4QzAwMDAwMDAgICAvKiAyeFJUQkkgIHVzaW5nIFJHTUlJIGJyaWRnZSAqLworI2RlZmluZSAgIFNEUjBfUEZDMl9TRUxFQ1RfQ09ORklHXzYgICAgICAgICAgICAweDQwMDAwMDAwICAgLyogMnhTTUlJICB1c2luZyAgWk1JSSBicmlkZ2UgKi8KKworLyogVVNCMlBIWTAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTRFIwX1VTQjJQSFkwQ1IgICAgICAgICAgICAgICAweDQxMDMKKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfVVRNSUNOX01BU0sgICAgICAgICAgMHgwMDEwMDAwMCAvKiAgUEhZIFVUTUkgaW50ZXJmYWNlIGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfVVRNSUNOX0RFViAgICAgICAgICAgMHgwMDAwMDAwMCAgLyogRGV2aWNlIHN1cHBvcnQgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfVVRNSUNOX0hPU1QgICAgICAgICAgMHgwMDEwMDAwMCAgLyogSG9zdCBzdXBwb3J0ICovCisKKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfRFdOU1RSX01BU0sgICAgICAgICAgMHgwMDQwMDAwMCAvKiBTZWxlY3QgZG93bnN0cmVhbSBwb3J0IG1vZGUgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfRFdOU1RSX0RFViAgICAgICAgICAgMHgwMDAwMDAwMCAgLyogRGV2aWNlICovCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX0RXTlNUUl9IT1NUICAgICAgICAgIDB4MDA0MDAwMDAgIC8qIEhvc3QgICAqLworCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX0RWQlVTX01BU0sgICAgICAgICAgIDB4MDA4MDAwMDAgLyogVkJ1cyBkZXRlY3QgKERldmljZSBtb2RlIG9ubHkpICAqLworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9EVkJVU19QVVJESVMgICAgICAgICAweDAwMDAwMDAwICAvKiBQdWxsLXVwIHJlc2lzdGFuY2Ugb24gRCsgaXMgZGlzYWJsZWQgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfRFZCVVNfUFVSRU4gICAgICAgICAgMHgwMDgwMDAwMCAgLyogUHVsbC11cCByZXNpc3RhbmNlIG9uIEQrIGlzIGVuYWJsZWQgKi8KKworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9XRElOVF9NQVNLICAgICAgICAgICAweDAxMDAwMDAwIC8qIFBIWSBVVE1JIGRhdGEgd2lkdGggYW5kIGNsb2NrIHNlbGVjdCAgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfV0RJTlRfOEJJVF82ME1IWiAgICAgMHgwMDAwMDAwMCAgLyogOC1iaXQgZGF0YS82ME1IeiAqLworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9XRElOVF8xNkJJVF8zME1IWiAgICAweDAxMDAwMDAwICAvKiAxNi1iaXQgZGF0YS8zME1IeiAqLworCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX0xPT1BFTl9NQVNLICAgICAgICAgIDB4MDIwMDAwMDAgLyogTG9vcCBiYWNrIHRlc3QgZW5hYmxlICAqLworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9MT09QX0VOQUJMRSAgICAgICAgICAweDAwMDAwMDAwICAvKiBMb29wIGJhY2sgZGlzYWJsZWQgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfTE9PUF9ESVNBQkxFICAgICAgICAgMHgwMjAwMDAwMCAgLyogTG9vcCBiYWNrIGVuYWJsZWQgKG9ubHkgdGVzdCBwdXJwb3NlcykgKi8KKworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9YT09OX01BU0sgICAgICAgICAgICAweDA0MDAwMDAwIC8qIEZvcmNlIFhPIGJsb2NrIG9uIGR1cmluZyBhIHN1c3BlbmQgICovCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX1hPX09OICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgIC8qIFBIWSBYTyBibG9jayBpcyBwb3dlcmVkLW9uICovCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX1hPX09GRiAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgIC8qIFBIWSBYTyBibG9jayBpcyBwb3dlcmVkLW9mZiB3aGVuIGFsbCBwb3J0cyBhcmUgc3VzcGVuZGVkICovCisKKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfUFdSU0FWX01BU0sgICAgICAgICAgMHgwODAwMDAwMCAvKiBTZWxlY3QgUEhZIHBvd2VyLXNhdmUgbW9kZSAgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfUFdSU0FWX09GRiAgICAgICAgICAgMHgwMDAwMDAwMCAgLyogTm9uLXBvd2VyLXNhdmUgbW9kZSAqLworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9QV1JTQVZfT04gICAgICAgICAgICAweDA4MDAwMDAwICAvKiBQb3dlci1zYXZlIG1vZGUuIFZhbGlkIG9ubHkgZm9yIGZ1bGwtc3BlZWQgb3BlcmF0aW9uICovCisKKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfWE9SRUZfTUFTSyAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBTZWxlY3QgcmVmZXJlbmNlIGNsb2NrIHNvdXJjZSAgKi8KKyNkZWZpbmUgICBTRFIwX1VTQjJQSFkwQ1JfWE9SRUZfSU5URVJOQUwgICAgICAgMHgwMDAwMDAwMCAgLyogUEhZIFBMTCB1c2VzIGNoaXAgaW50ZXJuYWwgNDhNIGNsb2NrIGFzIGEgcmVmZXJlbmNlICovCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX1hPUkVGX1hPICAgICAgICAgICAgIDB4MTAwMDAwMDAgIC8qIFBIWSBQTEwgdXNlcyBpbnRlcm5hbCBYTyBibG9jayBvdXRwdXQgYXMgYSByZWZlcmVuY2UgKi8KKworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9YT0NMS19NQVNLICAgICAgICAgICAweDIwMDAwMDAwIC8qIFNlbGVjdCBjbG9jayBmb3IgWE8gYmxvY2sgICovCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX1hPQ0xLX0VYVEVSTkFMICAgICAgIDB4MDAwMDAwMDAgIC8qIFBIWSBtYWNybyB1c2VkIGFuIGV4dGVybmFsIGNsb2NrICovCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX1hPQ0xLX0NSWVNUQUwgICAgICAgIDB4MjAwMDAwMDAgIC8qIFBIWSBtYWNybyB1c2VzIHRoZSBjbG9jayBmcm9tIGEgY3J5c3RhbCAqLworCisjZGVmaW5lICAgU0RSMF9VU0IyUEhZMENSX0NMS1NFTF9NQVNLICAgICAgICAgIDB4YzAwMDAwMDAgLyogU2VsZWN0IHJlZiBjbGsgZnJlcSAqLworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9DTEtTRUxfMTJNSFogICAgICAgICAweDAwMDAwMDAwIC8qIFNlbGVjdCByZWYgY2xrIGZyZXEgPSAxMiBNSHoqLworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9DTEtTRUxfNDhNSFogICAgICAgICAweDQwMDAwMDAwIC8qIFNlbGVjdCByZWYgY2xrIGZyZXEgPSA0OCBNSHoqLworI2RlZmluZSAgIFNEUjBfVVNCMlBIWTBDUl9DTEtTRUxfMjRNSFogICAgICAgICAweDgwMDAwMDAwIC8qIFNlbGVjdCByZWYgY2xrIGZyZXEgPSAyNCBNSHoqLworCisvKiBNaXNjZWFsbGVuZWFvdXMgRnVuY3Rpb24gUmVnLiAqLworI2RlZmluZSBTRFIwX01GUiAgICAgICAgICAgICAgICAgICAgIDB4NDMwMAorI2RlZmluZSAgIFNEUjBfTUZSX0VUSDBfQ0xLX1NFTF9NQVNLICAgMHgwODAwMDAwMCAgIC8qIEV0aGVybmV0MCBDbG9jayBTZWxlY3QgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9FVEgwX0NMS19TRUxfRVhUICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICBTRFIwX01GUl9FVEgxX0NMS19TRUxfTUFTSyAgIDB4MDQwMDAwMDAgICAvKiBFdGhlcm5ldDEgQ2xvY2sgU2VsZWN0ICovCisjZGVmaW5lICAgU0RSMF9NRlJfRVRIMV9DTEtfU0VMX0VYVCAgICAweDAwMDAwMDAwCisjZGVmaW5lICAgU0RSMF9NRlJfWk1JSV9NT0RFX01BU0sgICAgICAweDAzMDAwMDAwICAgLyogWk1JSSBNb2RlIE1hc2sgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9aTUlJX01PREVfTUlJICAgICAgIDB4MDAwMDAwMDAgICAgIC8qIFpNSUkgTW9kZSBNSUkgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9aTUlJX01PREVfU01JSSAgICAgIDB4MDEwMDAwMDAgICAgIC8qIFpNSUkgTW9kZSBTTUlJICovCisjZGVmaW5lICAgU0RSMF9NRlJfWk1JSV9NT0RFX0JJVDAgICAgICAweDAyMDAwMDAwICAgICAvKiBaTUlJIE1vZGUgQml0MCAqLworI2RlZmluZSAgIFNEUjBfTUZSX1pNSUlfTU9ERV9CSVQxICAgICAgMHgwMTAwMDAwMCAgICAgLyogWk1JSSBNb2RlIEJpdDEgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9aTV9FTkNPREUobikgICAgICAgICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgzKTw8MjQpCisjZGVmaW5lICAgU0RSMF9NRlJfWk1fREVDT0RFKG4pICAgICAgICAoKCgodW5zaWduZWQgbG9uZykobikpPDwyNCkmMHgzKQorCisjZGVmaW5lICAgU0RSMF9NRlJfRVJSQVRBM19FTjAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lICAgU0RSMF9NRlJfRVJSQVRBM19FTjEgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9NQVNLICAgICAgICAweDAwMTgwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIE1hc2sgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9QS1RfUkVKX0VOICAgICAgICAgIDB4MDAxODAwMDAgICAvKiBQa3QgUmVqLiBFbmFibGUgb24gYm90aCBFTUFDMyAwLTEgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9QS1RfUkVKX0VOMCAgICAgICAgIDB4MDAxMDAwMDAgICAvKiBQa3QgUmVqLiBFbmFibGUgb24gRU1BQzMoMCkgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9QS1RfUkVKX0VOMSAgICAgICAgIDB4MDAwODAwMDAgICAvKiBQa3QgUmVqLiBFbmFibGUgb24gRU1BQzMoMSkgKi8KKyNkZWZpbmUgICBTRFIwX01GUl9QS1RfUkVKX1BPTCAgICAgICAgIDB4MDAyMDAwMDAgICAvKiBQYWNrZXQgUmVqZWN0IFBvbGFyaXR5ICovCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkgKi8KKwogLyogQ1VTVDAgQ3VzdG9tZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcjAgKi8KICNkZWZpbmUgU0RSMF9DVVNUMCAgICAgICAgICAgICAgICAgICAweDQwMDAKICNkZWZpbmUgICBTRFIwX0NVU1QwX01VWF9FX05fR19NQVNLICAgMHhDMDAwMDAwMCAgICAgLyogTXV4X0VtYWNfTkRGQ19HUElPICovCkBAIC00NjAsMjcgKzEyNDMsMTggQEAKICNkZWZpbmUgICBTRFIwX1BGQzFfUExCX1BNRV9QTEI0X1NFTCAgMHgwMDAwMTAwMCAgICAgIC8qIFBMQjMgUGVyZm9ybWFuY2UgTW9uaXRvciBFbmFibGUgKi8KICNkZWZpbmUgICBTRFIwX1BGQzFfR0ZHR0lfTUFTSyAgICAgICAgMHgwMDAwMDAwRiAgICAvKiBHUFQgRnJlcXVlbmN5IEdlbmVyYXRpb24gR2F0ZWQgSW4gKi8KIAotLyogTWlzY2VhbGxlbmVhb3VzIEZ1bmN0aW9uIFJlZy4gKi8KLSNkZWZpbmUgU0RSMF9NRlIgICAgICAgICAgICAgICAgICAgICAweDQzMDAKLSNkZWZpbmUgICBTRFIwX01GUl9FVEgwX0NMS19TRUwgICAgICAgIDB4MDgwMDAwMDAgICAvKiBFdGhlcm5ldDAgQ2xvY2sgU2VsZWN0ICovCi0jZGVmaW5lICAgU0RSMF9NRlJfRVRIMV9DTEtfU0VMICAgICAgICAweDA0MDAwMDAwICAgLyogRXRoZXJuZXQxIENsb2NrIFNlbGVjdCAqLwotI2RlZmluZSAgIFNEUjBfTUZSX1pNSUlfTU9ERV9NQVNLICAgICAgMHgwMzAwMDAwMCAgIC8qIFpNSUkgTW9kZSBNYXNrICovCi0jZGVmaW5lICAgU0RSMF9NRlJfWk1JSV9NT0RFX01JSSAgICAgICAweDAwMDAwMDAwICAgICAvKiBaTUlJIE1vZGUgTUlJICovCi0jZGVmaW5lICAgU0RSMF9NRlJfWk1JSV9NT0RFX1NNSUkgICAgICAweDAxMDAwMDAwICAgICAvKiBaTUlJIE1vZGUgU01JSSAqLwotI2RlZmluZSAgIFNEUjBfTUZSX1pNSUlfTU9ERV9STUlJXzEwTSAgMHgwMjAwMDAwMCAgICAgLyogWk1JSSBNb2RlIFJNSUkgLSAxMCBNYnMgKi8KLSNkZWZpbmUgICBTRFIwX01GUl9aTUlJX01PREVfUk1JSV8xMDBNIDB4MDMwMDAwMDAgICAgIC8qIFpNSUkgTW9kZSBSTUlJIC0gMTAwIE1icyAqLwotI2RlZmluZSAgIFNEUjBfTUZSX1pNSUlfTU9ERV9CSVQwICAgICAgMHgwMjAwMDAwMCAgICAgLyogWk1JSSBNb2RlIEJpdDAgKi8KLSNkZWZpbmUgICBTRFIwX01GUl9aTUlJX01PREVfQklUMSAgICAgIDB4MDEwMDAwMDAgICAgIC8qIFpNSUkgTW9kZSBCaXQxICovCi0jZGVmaW5lICAgU0RSMF9NRlJfWk1fRU5DT0RFKG4pICAgICAgICAoKCgodW5zaWduZWQgbG9uZykobikpJjB4Myk8PDI0KQotI2RlZmluZSAgIFNEUjBfTUZSX1pNX0RFQ09ERShuKSAgICAgICAgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKTw8MjQpJjB4MykKLQotI2RlZmluZSAgIFNEUjBfTUZSX0VSUkFUQTNfRU4wICAgICAgICAgMHgwMDgwMDAwMAotI2RlZmluZSAgIFNEUjBfTUZSX0VSUkFUQTNfRU4xICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSAgIFNEUjBfTUZSX1BLVF9SRUpfTUFTSyAgICAgICAgMHgwMDMwMDAwMCAgIC8qIFBrdCBSZWouIEVuYWJsZSBNYXNrICovCi0jZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9FTiAgICAgICAgICAweDAwMzAwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIG9uIGJvdGggRU1BQzMgMC0xICovCi0jZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9FTjAgICAgICAgICAweDAwMjAwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIG9uIEVNQUMzKDApICovCi0jZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9FTjEgICAgICAgICAweDAwMTAwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIG9uIEVNQUMzKDEpICovCi0jZGVmaW5lICAgU0RSMF9NRlJfUEtUX1JFSl9QT0wgICAgICAgICAweDAwMDgwMDAwICAgLyogUGFja2V0IFJlamVjdCBQb2xhcml0eSAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgSW50ZXJuYWwgU1JBTQorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgSVNSQU0wX0RDUl9CQVNFIDB4MzgwCisjZGVmaW5lIGlzcmFtMF9zYjBjcgkoSVNSQU0wX0RDUl9CQVNFKzB4MDApCS8qIFNSQU0gYmFuayBjb25maWcgMCovCisjZGVmaW5lIGlzcmFtMF9iZWFyCShJU1JBTTBfRENSX0JBU0UrMHgwNCkJLyogU1JBTSBidXMgZXJyb3IgYWRkciByZWcgKi8KKyNkZWZpbmUgaXNyYW0wX2Jlc3IwCShJU1JBTTBfRENSX0JBU0UrMHgwNSkJLyogU1JBTSBidXMgZXJyb3Igc3RhdHVzIHJlZyAwICovCisjZGVmaW5lIGlzcmFtMF9iZXNyMQkoSVNSQU0wX0RDUl9CQVNFKzB4MDYpCS8qIFNSQU0gYnVzIGVycm9yIHN0YXR1cyByZWcgMSAqLworI2RlZmluZSBpc3JhbTBfcG1lZwkoSVNSQU0wX0RDUl9CQVNFKzB4MDcpCS8qIFNSQU0gcG93ZXIgbWFuYWdlbWVudCAqLworI2RlZmluZSBpc3JhbTBfY2lkCShJU1JBTTBfRENSX0JBU0UrMHgwOCkJLyogU1JBTSBidXMgY29yZSBpZCByZWcgKi8KKyNkZWZpbmUgaXNyYW0wX3JldmlkCShJU1JBTTBfRENSX0JBU0UrMHgwOSkJLyogU1JBTSBidXMgcmV2aXNpb24gaWQgcmVnICovCisjZGVmaW5lIGlzcmFtMF9kcGMJKElTUkFNMF9EQ1JfQkFTRSsweDBhKQkvKiBTUkFNIGRhdGEgcGFyaXR5IGNoZWNrIHJlZyAqLwogCiAjZWxzZQogCkBAIC01MDMsNyArMTI3Nyw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgfCBMMiBDYWNoZQogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZiBkZWZpbmVkIChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKQorI2lmIGRlZmluZWQgKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKICNkZWZpbmUgTDJfQ0FDSEVfQkFTRQkweDAzMAogI2RlZmluZSBsMl9jYWNoZV9jZmcJKEwyX0NBQ0hFX0JBU0UrMHgwMCkJLyogTDIgQ2FjaGUgQ29uZmlnCSovCiAjZGVmaW5lIGwyX2NhY2hlX2NtZAkoTDJfQ0FDSEVfQkFTRSsweDAxKQkvKiBMMiBDYWNoZSBDb21tYW5kCSovCkBAIC01MjYsNyArMTMwMCw3IEBACiAgfCBDbG9ja2luZywgUG93ZXIgTWFuYWdlbWVudCBhbmQgQ2hpcCBDb250cm9sCiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZSBDTlRSTF9EQ1JfQkFTRSAweDBiMAotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKICNkZWZpbmUgY3BjMF9lcgkJKENOVFJMX0RDUl9CQVNFKzB4MDApCS8qIENQTSBlbmFibGUgcmVnaXN0ZXIJCSovCiAjZGVmaW5lIGNwYzBfZnIJCShDTlRSTF9EQ1JfQkFTRSsweDAxKQkvKiBDUE0gZm9yY2UgcmVnaXN0ZXIJCSovCiAjZGVmaW5lIGNwYzBfc3IJCShDTlRSTF9EQ1JfQkFTRSsweDAyKQkvKiBDUE0gc3RhdHVzIHJlZ2lzdGVyCQkqLwpAQCAtNTc0LDYgKzEzNDgsMzAgQEAKICNkZWZpbmUgdWljMXZyCShVSUMxX0RDUl9CQVNFKzB4NykgICAvKiBVSUMxIHZlY3RvcgkJCSAgICovCiAjZGVmaW5lIHVpYzF2Y3IgKFVJQzFfRENSX0JBU0UrMHg4KSAgIC8qIFVJQzEgdmVjdG9yIGNvbmZpZ3VyYXRpb24JICAgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCisjZGVmaW5lIFVJQzJfRENSX0JBU0UgMHhlMAorI2RlZmluZSB1aWMyc3IJKFVJQzBfRENSX0JBU0UrMHgwKSAgIC8qIFVJQzIgc3RhdHVzLVJlYWQgQ2xlYXIJCSovCisjZGVmaW5lIHVpYzJzcnMJKFVJQzBfRENSX0JBU0UrMHgxKSAgIC8qIFVJQzIgc3RhdHVzLVJlYWQgU2V0ICovCisjZGVmaW5lIHVpYzJlcgkoVUlDMF9EQ1JfQkFTRSsweDIpICAgLyogVUlDMiBlbmFibGUJCQkqLworI2RlZmluZSB1aWMyY3IJKFVJQzBfRENSX0JBU0UrMHgzKSAgIC8qIFVJQzIgY3JpdGljYWwJCQkqLworI2RlZmluZSB1aWMycHIJKFVJQzBfRENSX0JBU0UrMHg0KSAgIC8qIFVJQzIgcG9sYXJpdHkJCQkqLworI2RlZmluZSB1aWMydHIJKFVJQzBfRENSX0JBU0UrMHg1KSAgIC8qIFVJQzIgdHJpZ2dlcmluZwkJKi8KKyNkZWZpbmUgdWljMm1zciAoVUlDMF9EQ1JfQkFTRSsweDYpICAgLyogVUlDMiBtYXNrZWQgc3RhdHVzCQkqLworI2RlZmluZSB1aWMydnIJKFVJQzBfRENSX0JBU0UrMHg3KSAgIC8qIFVJQzIgdmVjdG9yCQkJKi8KKyNkZWZpbmUgdWljMnZjciAoVUlDMF9EQ1JfQkFTRSsweDgpICAgLyogVUlDMiB2ZWN0b3IgY29uZmlndXJhdGlvbgkqLworCisjZGVmaW5lIFVJQzNfRENSX0JBU0UgMHhmMAorI2RlZmluZSB1aWMzc3IJKFVJQzFfRENSX0JBU0UrMHgwKSAgIC8qIFVJQzMgc3RhdHVzLVJlYWQgQ2xlYXIJCSovCisjZGVmaW5lIHVpYzNzcnMJKFVJQzBfRENSX0JBU0UrMHgxKSAgIC8qIFVJQzMgc3RhdHVzLVJlYWQgU2V0ICovCisjZGVmaW5lIHVpYzNlcgkoVUlDMV9EQ1JfQkFTRSsweDIpICAgLyogVUlDMyBlbmFibGUJCQkqLworI2RlZmluZSB1aWMzY3IJKFVJQzFfRENSX0JBU0UrMHgzKSAgIC8qIFVJQzMgY3JpdGljYWwJCQkqLworI2RlZmluZSB1aWMzcHIJKFVJQzFfRENSX0JBU0UrMHg0KSAgIC8qIFVJQzMgcG9sYXJpdHkJCQkqLworI2RlZmluZSB1aWMzdHIJKFVJQzFfRENSX0JBU0UrMHg1KSAgIC8qIFVJQzMgdHJpZ2dlcmluZwkJKi8KKyNkZWZpbmUgdWljM21zciAoVUlDMV9EQ1JfQkFTRSsweDYpICAgLyogVUlDMyBtYXNrZWQgc3RhdHVzCQkqLworI2RlZmluZSB1aWMzdnIJKFVJQzFfRENSX0JBU0UrMHg3KSAgIC8qIFVJQzMgdmVjdG9yCQkJKi8KKyNkZWZpbmUgdWljM3ZjciAoVUlDMV9EQ1JfQkFTRSsweDgpICAgLyogVUlDMyB2ZWN0b3IgY29uZmlndXJhdGlvbgkqLworI2VuZGlmIC8qIENPTkZJR180NDBTUEUgKi8KKwogI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKQogI2RlZmluZSBVSUMyX0RDUl9CQVNFIDB4MjEwCiAjZGVmaW5lIHVpYzJzcgkoVUlDMl9EQ1JfQkFTRSsweDApICAgLyogVUlDMiBzdGF0dXMJCQkgICAqLwpAQCAtNjA3LDYgKzE0MDUsMTAzIEBACiAjZGVmaW5lIHVpY3ZyICB1aWMwdnIKICNkZWZpbmUgdWljdmNyIHVpYzB2Y3IKIAorI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgQ2xvY2sgLyBQb3dlci1vbi1yZXNldCBEQ1Incy4KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1BSMF9DRkdBRERSCQkJMHgwMEMKKyNkZWZpbmUgQ1BSMF9DRkdEQVRBCQkJMHgwMEQKKworI2RlZmluZSBDUFIwX0NMS1VQRAkJCTB4MjAKKyNkZWZpbmUgQ1BSMF9DTEtVUERfQlNZX01BU0sJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BSMF9DTEtVUERfQlNZX0NPTVBMRVRFRAkweDAwMDAwMDAwCisjZGVmaW5lIENQUjBfQ0xLVVBEX0JTWV9CVVNZCQkweDgwMDAwMDAwCisjZGVmaW5lIENQUjBfQ0xLVVBEX0NVSV9NQVNLCQkweDgwMDAwMDAwCisjZGVmaW5lIENQUjBfQ0xLVVBEX0NVSV9ESVNBQkxFCQkweDAwMDAwMDAwCisjZGVmaW5lIENQUjBfQ0xLVVBEX0NVSV9FTkFCTEUJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BSMF9DTEtVUERfQ1VEX01BU0sJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQ1BSMF9DTEtVUERfQ1VEX0RJU0FCTEUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ1BSMF9DTEtVUERfQ1VEX0VOQUJMRQkJMHg0MDAwMDAwMAorCisjZGVmaW5lIENQUjBfUExMQwkJCTB4NDAKKyNkZWZpbmUgQ1BSMF9QTExDX1JTVF9NQVNLCQkweDgwMDAwMDAwCisjZGVmaW5lIENQUjBfUExMQ19SU1RfUExMTE9DS0VECQkweDAwMDAwMDAwCisjZGVmaW5lIENQUjBfUExMQ19SU1RfUExMUkVTRVQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ1BSMF9QTExDX0VOR19NQVNLCQkweDQwMDAwMDAwCisjZGVmaW5lIENQUjBfUExMQ19FTkdfRElTQUJMRQkJMHgwMDAwMDAwMAorI2RlZmluZSBDUFIwX1BMTENfRU5HX0VOQUJMRQkJMHg0MDAwMDAwMAorI2RlZmluZSBDUFIwX1BMTENfRU5HX0VOQ09ERShuKQkJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAxKTw8MzApCisjZGVmaW5lIENQUjBfUExMQ19FTkdfREVDT0RFKG4pCQkoKCgodW5zaWduZWQgbG9uZykobikpPj4zMCkmMHgwMSkKKyNkZWZpbmUgQ1BSMF9QTExDX1NSQ19NQVNLCQkweDIwMDAwMDAwCisjZGVmaW5lIENQUjBfUExMQ19TUkNfUExMT1VUQQkJMHgwMDAwMDAwMAorI2RlZmluZSBDUFIwX1BMTENfU1JDX1BMTE9VVEIJCTB4MjAwMDAwMDAKKyNkZWZpbmUgQ1BSMF9QTExDX1NSQ19FTkNPREUobikJCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDI5KQorI2RlZmluZSBDUFIwX1BMTENfU1JDX0RFQ09ERShuKQkJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjkpJjB4MDEpCisjZGVmaW5lIENQUjBfUExMQ19TRUxfTUFTSwkJMHgwNzAwMDAwMAorI2RlZmluZSBDUFIwX1BMTENfU0VMX1BMTE9VVAkJMHgwMDAwMDAwMAorI2RlZmluZSBDUFIwX1BMTENfU0VMX0NQVQkJMHgwMTAwMDAwMAorI2RlZmluZSBDUFIwX1BMTENfU0VMX0VCQwkJMHgwNTAwMDAwMAorI2RlZmluZSBDUFIwX1BMTENfU0VMX0VOQ09ERShuKQkJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDA3KTw8MjQpCisjZGVmaW5lIENQUjBfUExMQ19TRUxfREVDT0RFKG4pCQkoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCkmMHgwNykKKyNkZWZpbmUgQ1BSMF9QTExDX1RVTkVfTUFTSwkJMHgwMDAwMDNGRgorI2RlZmluZSBDUFIwX1BMTENfVFVORV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDNGRik8PDApCisjZGVmaW5lIENQUjBfUExMQ19UVU5FX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4wKSYweDNGRikKKworI2RlZmluZSBDUFIwX1BMTEQJCQkweDYwCisjZGVmaW5lIENQUjBfUExMRF9GQkRWX01BU0sJCTB4MUYwMDAwMDAKKyNkZWZpbmUgQ1BSMF9QTExEX0ZCRFZfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgxRik8PDI0KQorI2RlZmluZSBDUFIwX1BMTERfRkJEVl9ERUNPREUobikJKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCktMSkmMHgxRikrMSkKKyNkZWZpbmUgQ1BSMF9QTExEX0ZXRFZBX01BU0sJCTB4MDAwRjAwMDAKKyNkZWZpbmUgQ1BSMF9QTExEX0ZXRFZBX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MEYpPDwxNikKKyNkZWZpbmUgQ1BSMF9QTExEX0ZXRFZBX0RFQ09ERShuKQkoKCgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjE2KS0xKSYweDBGKSsxKQorI2RlZmluZSBDUFIwX1BMTERfRldEVkJfTUFTSwkJMHgwMDAwMDcwMAorI2RlZmluZSBDUFIwX1BMTERfRldEVkJfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwNyk8PDgpCisjZGVmaW5lIENQUjBfUExMRF9GV0RWQl9ERUNPREUobikJKCgoKCgodW5zaWduZWQgbG9uZykobikpPj44KS0xKSYweDA3KSsxKQorI2RlZmluZSBDUFIwX1BMTERfTEZCRFZfTUFTSwkJMHgwMDAwMDAzRgorI2RlZmluZSBDUFIwX1BMTERfTEZCRFZfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgzRik8PDApCisjZGVmaW5lIENQUjBfUExMRF9MRkJEVl9ERUNPREUobikJKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4wKS0xKSYweDNGKSsxKQorCisjZGVmaW5lIENQUjBfUFJJTUFECQkJMHg4MAorI2RlZmluZSBDUFIwX1BSSU1BRF9QUkFEVjBfTUFTSwkJMHgwNzAwMDAwMAorI2RlZmluZSBDUFIwX1BSSU1BRF9QUkFEVjBfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwNyk8PDI0KQorI2RlZmluZSBDUFIwX1BSSU1BRF9QUkFEVjBfREVDT0RFKG4pCSgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjQpLTEpJjB4MDcpKzEpCisKKyNkZWZpbmUgQ1BSMF9QUklNQkQJCQkweEEwCisjZGVmaW5lIENQUjBfUFJJTUJEX1BSQkRWMF9NQVNLCQkweDA3MDAwMDAwCisjZGVmaW5lIENQUjBfUFJJTUJEX1BSQkRWMF9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDA3KTw8MjQpCisjZGVmaW5lIENQUjBfUFJJTUJEX1BSQkRWMF9ERUNPREUobikJKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCktMSkmMHgwNykrMSkKKworI2RlZmluZSBDUFIwX09QQkQJCQkweEMwCisjZGVmaW5lIENQUjBfT1BCRF9PUEJEVjBfTUFTSwkJMHgwMzAwMDAwMAorI2RlZmluZSBDUFIwX09QQkRfT1BCRFYwX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDMpPDwyNCkKKyNkZWZpbmUgQ1BSMF9PUEJEX09QQkRWMF9ERUNPREUobikJKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCktMSkmMHgwMykrMSkKKworI2RlZmluZSBDUFIwX1BFUkQJCQkweEUwCisjZGVmaW5lIENQUjBfUEVSRF9QRVJEVjBfTUFTSwkJMHgwMzAwMDAwMAorI2RlZmluZSBDUFIwX1BFUkRfUEVSRFYwX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDMpPDwyNCkKKyNkZWZpbmUgQ1BSMF9QRVJEX1BFUkRWMF9ERUNPREUobikJKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCktMSkmMHgwMykrMSkKKworI2RlZmluZSBDUFIwX01BTEQJCQkweDEwMAorI2RlZmluZSBDUFIwX01BTERfTUFMRFYwX01BU0sJCTB4MDMwMDAwMDAKKyNkZWZpbmUgQ1BSMF9NQUxEX01BTERWMF9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAzKTw8MjQpCisjZGVmaW5lIENQUjBfTUFMRF9NQUxEVjBfREVDT0RFKG4pCSgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjQpLTEpJjB4MDMpKzEpCisKKyNkZWZpbmUgQ1BSMF9JQ0ZHCQkJMHgxNDAKKyNkZWZpbmUgQ1BSMF9JQ0ZHX1JMSV9NQVNLCQkweDgwMDAwMDAwCisjZGVmaW5lIENQUjBfSUNGR19STElfUkVTRVRDUFIJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ1BSMF9JQ0ZHX1JMSV9QUkVTRVJWRUNQUgkweDgwMDAwMDAwCisjZGVmaW5lIENQUjBfSUNGR19JQ1NfTUFTSwkJMHgwMDAwMDAwNworI2RlZmluZSBDUFIwX0lDRkdfSUNTX0VOQ09ERShuKQkJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDNGKTw8MCkKKyNkZWZpbmUgQ1BSMF9JQ0ZHX0lDU19ERUNPREUobikJCSgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MCktMSkmMHgzRikrMSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIElJQyBkZWZpbmVzICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJSUMwX01NSU9fQkFTRSAweEEwMDAwNDAwCisjZGVmaW5lIElJQzFfTU1JT19CQVNFIDB4QTAwMDA1MDAKKworI2VuZGlmIC8qIENPTkZJR180NDBTUCAqLworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgfCBETUEKICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03MjIsNyArMTYxNyw3IEBACiAjZGVmaW5lIFVJQ19HUFRDVAkweDAwMDAwMDA0CS8qIEdQVCBjb3VudCB0aW1lcgkJICAgICovCiAjZGVmaW5lIFVJQ19VSUMxTkMJMHgwMDAwMDAwMgkvKiBVSUMxIG5vbi1jcml0aWNhbCBpbnRlcnJ1cHQJICAgICovCiAjZGVmaW5lIFVJQ19VSUMxQwkweDAwMDAwMDAxCS8qIFVJQzEgY3JpdGljYWwgaW50ZXJydXB0CSAgICAqLwotI2Vsc2UgIC8qIENPTkZJR180NDBTUCAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEVQKQogI2RlZmluZSBVSUNfVTAJCTB4ODAwMDAwMDAJLyogVUFSVCAwCQkJICAgICovCiAjZGVmaW5lIFVJQ19VMQkJMHg0MDAwMDAwMAkvKiBVQVJUIDEJCQkgICAgKi8KICNkZWZpbmUgVUlDX0lJQzAJMHgyMDAwMDAwMAkvKiBJSUMJCQkJICAgICovCkBAIC03NTUsNyArMTY1MCw4MCBAQAogI2RlZmluZSBVSUNfRUlSNgkweDAwMDAwMDA0CS8qIEV4dGVybmFsIGludGVycnVwdCA2CQkgICAgKi8KICNkZWZpbmUgVUlDX1VJQzFOQwkweDAwMDAwMDAyCS8qIFVJQzEgbm9uLWNyaXRpY2FsIGludGVycnVwdAkgICAgKi8KICNkZWZpbmUgVUlDX1VJQzFDCTB4MDAwMDAwMDEJLyogVUlDMSBjcml0aWNhbCBpbnRlcnJ1cHQJICAgICovCi0jZW5kaWYgLyogQ09ORklHXzQ0MFNQICovCisKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorCisjZGVmaW5lIFVJQ19VMCAgICAgICAgMHg4MDAwMDAwMCAgLyogVUFSVCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfVTEgICAgICAgIDB4NDAwMDAwMDAgIC8qIFVBUlQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0lJQzAgICAgICAweDIwMDAwMDAwICAvKiBJSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19LUkQgICAgICAgMHgxMDAwMDAwMCAgLyogS2FzdW1pIFJlYWR5IGZvciBkYXRhICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfS0RBICAgICAgIDB4MDgwMDAwMDAgIC8qIEthc3VtaSBEYXRhIEF2YWlsYWJsZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX1BDUlcgICAgICAweDA0MDAwMDAwICAvKiBQQ0kgY29tbWFuZCByZWdpc3RlciB3cml0ZSAgICAgICAgICovCisjZGVmaW5lIFVJQ19QUE0gICAgICAgMHgwMjAwMDAwMCAgLyogUENJIHBvd2VyIG1hbmFnZW1lbnQgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfSUlDMSAgICAgIDB4MDEwMDAwMDAgIC8qIElJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX1NQSSAgICAgICAweDAwODAwMDAwICAvKiBTUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19FUENJU0VSICAgMHgwMDQwMDAwMCAgLyogRXh0ZXJuYWwgUENJIFNFUlIgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfTVRFICAgICAgIDB4MDAyMDAwMDAgIC8qIE1BTCBUWEVPQiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX01SRSAgICAgICAweDAwMTAwMDAwICAvKiBNQUwgUlhFT0IgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19EMCAgICAgICAgMHgwMDA4MDAwMCAgLyogRE1BIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfRDEgICAgICAgIDB4MDAwNDAwMDAgIC8qIERNQSBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0QyICAgICAgICAweDAwMDIwMDAwICAvKiBETUEgY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19EMyAgICAgICAgMHgwMDAxMDAwMCAgLyogRE1BIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfVUQwICAgICAgIDB4MDAwMDgwMDAgIC8qIFVETUEgaXJxIDAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX1VEMSAgICAgICAweDAwMDA0MDAwICAvKiBVRE1BIGlycSAxICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19VRDIgICAgICAgMHgwMDAwMjAwMCAgLyogVURNQSBpcnEgMiAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfVUQzICAgICAgIDB4MDAwMDEwMDAgIC8qIFVETUEgaXJxIDMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0hTQjJEICAgICAweDAwMDAwODAwICAvKiBVU0IyLjAgRGV2aWNlICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19PSENJMSAgICAgMHgwMDAwMDQwMCAgLyogVVNCMi4wIEhvc3QgT0hDSSBpcnEgMSAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfT0hDSTIgICAgIDB4MDAwMDAyMDAgIC8qIFVTQjIuMCBIb3N0IE9IQ0kgaXJxIDIgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0VJUDk0ICAgICAweDAwMDAwMTAwICAvKiBTZWN1cml0eSBFSVA5NCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19FVEgwICAgICAgMHgwMDAwMDA4MCAgLyogRW1hYyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfRVRIMSAgICAgIDB4MDAwMDAwNDAgIC8qIEVtYWMgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0VIQ0kgICAgICAweDAwMDAwMDIwICAvKiBVU0IyLjAgSG9zdCBFSENJICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19FSVI0ICAgICAgMHgwMDAwMDAxMCAgLyogRXh0ZXJuYWwgaW50ZXJydXB0IDQgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfVUlDMk5DICAgIDB4MDAwMDAwMDggIC8qIFVJQzIgbm9uLWNyaXRpY2FsIGludGVycnVwdCAgICAgICAgKi8KKyNkZWZpbmUgVUlDX1VJQzJDICAgICAweDAwMDAwMDA0ICAvKiBVSUMyIGNyaXRpY2FsIGludGVycnVwdCAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19VSUMxTkMgICAgMHgwMDAwMDAwMiAgLyogVUlDMSBub24tY3JpdGljYWwgaW50ZXJydXB0ICAgICAgICAqLworI2RlZmluZSBVSUNfVUlDMUMgICAgIDB4MDAwMDAwMDEgIC8qIFVJQzEgY3JpdGljYWwgaW50ZXJydXB0ICAgICAgICAgICAgKi8KKworLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCA0MDUgY29kZSAqLworI2RlZmluZSBVSUNfTUFMX1RYRU9CCVVJQ19NVEUKKyNkZWZpbmUgVUlDX01BTF9SWEVPQglVSUNfTVJFCisKKyNlbGlmICFkZWZpbmVkKENPTkZJR180NDBTUEUpCisjZGVmaW5lIFVJQ19VMAkJMHg4MDAwMDAwMAkvKiBVQVJUIDAJCQkgICAgKi8KKyNkZWZpbmUgVUlDX1UxCQkweDQwMDAwMDAwCS8qIFVBUlQgMQkJCSAgICAqLworI2RlZmluZSBVSUNfSUlDMAkweDIwMDAwMDAwCS8qIElJQwkJCQkgICAgKi8KKyNkZWZpbmUgVUlDX0lJQzEJMHgxMDAwMDAwMAkvKiBJSUMJCQkJICAgICovCisjZGVmaW5lIFVJQ19QSU0JCTB4MDgwMDAwMDAJLyogUENJIGluYm91bmQgbWVzc2FnZQkJICAgICovCisjZGVmaW5lIFVJQ19QQ1JXCTB4MDQwMDAwMDAJLyogUENJIGNvbW1hbmQgcmVnaXN0ZXIgd3JpdGUJICAgICovCisjZGVmaW5lIFVJQ19QUE0JCTB4MDIwMDAwMDAJLyogUENJIHBvd2VyIG1hbmFnZW1lbnQJCSAgICAqLworI2RlZmluZSBVSUNfTVNJMAkweDAxMDAwMDAwCS8qIFBDSSBNU0kgbGV2ZWwgMAkJICAgICovCisjZGVmaW5lIFVJQ19NU0kxCTB4MDA4MDAwMDAJLyogUENJIE1TSSBsZXZlbCAxCQkgICAgKi8KKyNkZWZpbmUgVUlDX01TSTIJMHgwMDQwMDAwMAkvKiBQQ0kgTVNJIGxldmVsIDIJCSAgICAqLworI2RlZmluZSBVSUNfTVRFCQkweDAwMjAwMDAwCS8qIE1BTCBUWEVPQgkJCSAgICAqLworI2RlZmluZSBVSUNfTVJFCQkweDAwMTAwMDAwCS8qIE1BTCBSWEVPQgkJCSAgICAqLworI2RlZmluZSBVSUNfRDAJCTB4MDAwODAwMDAJLyogRE1BIGNoYW5uZWwgMAkJICAgICovCisjZGVmaW5lIFVJQ19EMQkJMHgwMDA0MDAwMAkvKiBETUEgY2hhbm5lbCAxCQkgICAgKi8KKyNkZWZpbmUgVUlDX0QyCQkweDAwMDIwMDAwCS8qIERNQSBjaGFubmVsIDIJCSAgICAqLworI2RlZmluZSBVSUNfRDMJCTB4MDAwMTAwMDAJLyogRE1BIGNoYW5uZWwgMwkJICAgICovCisjZGVmaW5lIFVJQ19SU1ZEMAkweDAwMDA4MDAwCS8qIFJlc2VydmVkCQkJICAgICovCisjZGVmaW5lIFVJQ19SU1ZEMQkweDAwMDA0MDAwCS8qIFJlc2VydmVkCQkJICAgICovCisjZGVmaW5lIFVJQ19DVDAJCTB4MDAwMDIwMDAJLyogR1BUIGNvbXBhcmUgdGltZXIgMAkJICAgICovCisjZGVmaW5lIFVJQ19DVDEJCTB4MDAwMDEwMDAJLyogR1BUIGNvbXBhcmUgdGltZXIgMQkJICAgICovCisjZGVmaW5lIFVJQ19DVDIJCTB4MDAwMDA4MDAJLyogR1BUIGNvbXBhcmUgdGltZXIgMgkJICAgICovCisjZGVmaW5lIFVJQ19DVDMJCTB4MDAwMDA0MDAJLyogR1BUIGNvbXBhcmUgdGltZXIgMwkJICAgICovCisjZGVmaW5lIFVJQ19DVDQJCTB4MDAwMDAyMDAJLyogR1BUIGNvbXBhcmUgdGltZXIgNAkJICAgICovCisjZGVmaW5lIFVJQ19FSVIwCTB4MDAwMDAxMDAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDAJCSAgICAqLworI2RlZmluZSBVSUNfRUlSMQkweDAwMDAwMDgwCS8qIEV4dGVybmFsIGludGVycnVwdCAxCQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjIJMHgwMDAwMDA0MAkvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMgkJICAgICovCisjZGVmaW5lIFVJQ19FSVIzCTB4MDAwMDAwMjAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDMJCSAgICAqLworI2RlZmluZSBVSUNfRUlSNAkweDAwMDAwMDEwCS8qIEV4dGVybmFsIGludGVycnVwdCA0CQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjUJMHgwMDAwMDAwOAkvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgNQkJICAgICovCisjZGVmaW5lIFVJQ19FSVI2CTB4MDAwMDAwMDQJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDYJCSAgICAqLworI2RlZmluZSBVSUNfVUlDMU5DCTB4MDAwMDAwMDIJLyogVUlDMSBub24tY3JpdGljYWwgaW50ZXJydXB0CSAgICAqLworI2RlZmluZSBVSUNfVUlDMUMJMHgwMDAwMDAwMQkvKiBVSUMxIGNyaXRpY2FsIGludGVycnVwdAkgICAgKi8KKyNlbmRpZiAvKiBDT05GSUdfNDQwR1ggKi8KIAogLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCA0MDUgY29kZSAqLwogI2RlZmluZSBVSUNfTUFMX1RYRU9CCVVJQ19NVEUKQEAgLTc5Nyw3ICsxNzY1LDgyIEBACiAjZGVmaW5lIFVJQ19FV1UwCTB4MDAwMDAwMDQJLyogRXRoZXJuZXQgMCB3YWtldXAJCSAgICAqLwogI2RlZmluZSBVSUNfRVRIMQkweDAwMDAwMDAyCS8qIFJlc2VydmVkCQkJICAgICovCiAjZGVmaW5lIFVJQ19YT1IJCTB4MDAwMDAwMDEJLyogWE9SCQkJCSAgICAqLwotI2Vsc2UgLyogQ09ORklHXzQ0MFNQICovCisjZWxpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVApCisjZGVmaW5lIFVJQ19NUwkJMHg4MDAwMDAwMAkvKiBNQUwgU0VSUgkJCSAgICAqLworI2RlZmluZSBVSUNfTVRERQkweDQwMDAwMDAwCS8qIE1BTCBUWERFCQkJICAgICovCisjZGVmaW5lIFVJQ19NUkRFCTB4MjAwMDAwMDAJLyogTUFMIFJYREUJCQkgICAgKi8KKyNkZWZpbmUgVUlDX0RFVUUJMHgxMDAwMDAwMAkvKiBERFIgU0RSQU0gRUNDIHVuY29ycmVjdGlibGUgZXJyb3IqLworI2RlZmluZSBVSUNfREVDRQkweDA4MDAwMDAwCS8qIEREUiBTRFJBTSBjb3JyZWN0aWJsZSBlcnJvcgkgICAgKi8KKyNkZWZpbmUgVUlDX0VCQ08JMHgwNDAwMDAwMAkvKiBFQkNPIGludGVycnVwdCBzdGF0dXMJICAgICovCisjZGVmaW5lIFVJQ19FQk1JCTB4MDIwMDAwMDAJLyogRUJNSSBpbnRlcnJ1cHQgc3RhdHVzCSAgICAqLworI2RlZmluZSBVSUNfT1BCCQkweDAxMDAwMDAwCS8qIE9QQiB0byBQTEIgYnJpZGdlIGludGVycnVwdCBzdGF0ICovCisjZGVmaW5lIFVJQ19NU0kzCTB4MDA4MDAwMDAJLyogUENJIE1TSSBsZXZlbCAzCQkgICAgKi8KKyNkZWZpbmUgVUlDX01TSTQJMHgwMDQwMDAwMAkvKiBQQ0kgTVNJIGxldmVsIDQJCSAgICAqLworI2RlZmluZSBVSUNfTVNJNQkweDAwMjAwMDAwCS8qIFBDSSBNU0kgbGV2ZWwgNQkJICAgICovCisjZGVmaW5lIFVJQ19NU0k2CTB4MDAxMDAwMDAJLyogUENJIE1TSSBsZXZlbCA2CQkgICAgKi8KKyNkZWZpbmUgVUlDX01TSTcJMHgwMDA4MDAwMAkvKiBQQ0kgTVNJIGxldmVsIDcJCSAgICAqLworI2RlZmluZSBVSUNfTVNJOAkweDAwMDQwMDAwCS8qIFBDSSBNU0kgbGV2ZWwgOAkJICAgICovCisjZGVmaW5lIFVJQ19NU0k5CTB4MDAwMjAwMDAJLyogUENJIE1TSSBsZXZlbCA5CQkgICAgKi8KKyNkZWZpbmUgVUlDX01TSTEwCTB4MDAwMTAwMDAJLyogUENJIE1TSSBsZXZlbCAxMAkJICAgICovCisjZGVmaW5lIFVJQ19NU0kxMQkweDAwMDA4MDAwCS8qIFBDSSBNU0kgbGV2ZWwgMTEJCSAgICAqLworI2RlZmluZSBVSUNfUFBNSQkweDAwMDA0MDAwCS8qIFBQTSBpbnRlcnJ1cHQgc3RhdHVzCQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjcJMHgwMDAwMjAwMAkvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgNwkJICAgICovCisjZGVmaW5lIFVJQ19FSVI4CTB4MDAwMDEwMDAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDgJCSAgICAqLworI2RlZmluZSBVSUNfRUlSOQkweDAwMDAwODAwCS8qIEV4dGVybmFsIGludGVycnVwdCA5CQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjEwCTB4MDAwMDA0MDAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDEwCSAgICAqLworI2RlZmluZSBVSUNfRUlSMTEJMHgwMDAwMDIwMAkvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMTEJICAgICovCisjZGVmaW5lIFVJQ19FSVIxMgkweDAwMDAwMTAwCS8qIEV4dGVybmFsIGludGVycnVwdCAxMgkgICAgKi8KKyNkZWZpbmUgVUlDX1NSRQkJMHgwMDAwMDA4MAkvKiBTZXJpYWwgUk9NIGVycm9yCQkgICAgKi8KKyNkZWZpbmUgVUlDX1JTVkQyCTB4MDAwMDAwNDAJLyogUmVzZXJ2ZWQJCQkgICAgKi8KKyNkZWZpbmUgVUlDX1JTVkQzCTB4MDAwMDAwMjAJLyogUmVzZXJ2ZWQJCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BBRQkJMHgwMDAwMDAxMAkvKiBQQ0kgYXN5bmNocm9ub3VzIGVycm9yCSAgICAqLworI2RlZmluZSBVSUNfRVRIMAkweDAwMDAwMDA4CS8qIEV0aGVybmV0IDAJCQkgICAgKi8KKyNkZWZpbmUgVUlDX0VXVTAJMHgwMDAwMDAwNAkvKiBFdGhlcm5ldCAwIHdha2V1cAkJICAgICovCisjZGVmaW5lIFVJQ19FVEgxCTB4MDAwMDAwMDIJLyogRXRoZXJuZXQgMQkJCSAgICAqLworI2RlZmluZSBVSUNfRVdVMQkweDAwMDAwMDAxCS8qIEV0aGVybmV0IDEgd2FrZXVwCQkgICAgKi8KKworI2VsaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCisKKyNkZWZpbmUgVUlDX01TICAgICAgICAweDgwMDAwMDAwICAvKiBNQUwgU0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19NVERFICAgICAgMHg0MDAwMDAwMCAgLyogTUFMIFRYREUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfTVJERSAgICAgIDB4MjAwMDAwMDAgIC8qIE1BTCBSWERFICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX1UyICAgICAgICAweDEwMDAwMDAwICAvKiBVQVJUIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19VMyAgICAgICAgMHgwODAwMDAwMCAgLyogVUFSVCAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfRUJDTyAgICAgIDB4MDQwMDAwMDAgIC8qIEVCQ08gaW50ZXJydXB0IHN0YXR1cyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX05ERkMgICAgICAweDAyMDAwMDAwICAvKiBOREZDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19LU0xFICAgICAgMHgwMTAwMDAwMCAgLyogS0FTVU1JIHNsYXZlIGVycm9yICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfQ1Q1ICAgICAgIDB4MDA4MDAwMDAgIC8qIEdQVCBjb21wYXJlIHRpbWVyIDUgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0NUNiAgICAgICAweDAwNDAwMDAwICAvKiBHUFQgY29tcGFyZSB0aW1lciA2ICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19QTEIzNEkwICAgMHgwMDIwMDAwMCAgLyogUExCM1g0WCBNSVJRMCAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfUExCMzRJMSAgIDB4MDAxMDAwMDAgIC8qIFBMQjNYNFggTUlSUTEgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX1BMQjM0STIgICAweDAwMDgwMDAwICAvKiBQTEIzWDRYIE1JUlEyICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19QTEIzNEkzICAgMHgwMDA0MDAwMCAgLyogUExCM1g0WCBNSVJRMyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfUExCMzRJNCAgIDB4MDAwMjAwMDAgIC8qIFBMQjNYNFggTUlSUTQgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX1BMQjM0STUgICAweDAwMDEwMDAwICAvKiBQTEIzWDRYIE1JUlE1ICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19DVDAgICAgICAgMHgwMDAwODAwMCAgLyogR1BUIGNvbXBhcmUgdGltZXIgMCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfQ1QxICAgICAgIDB4MDAwMDQwMDAgIC8qIEdQVCBjb21wYXJlIHRpbWVyIDEgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjcgICAgICAweDAwMDAyMDAwICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgNyAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19FSVI4ICAgICAgMHgwMDAwMTAwMCAgLyogRXh0ZXJuYWwgaW50ZXJydXB0IDggICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfRUlSOSAgICAgIDB4MDAwMDA4MDAgIC8qIEV4dGVybmFsIGludGVycnVwdCA5ICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0NUMiAgICAgICAweDAwMDAwNDAwICAvKiBHUFQgY29tcGFyZSB0aW1lciAyICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19DVDMgICAgICAgMHgwMDAwMDIwMCAgLyogR1BUIGNvbXBhcmUgdGltZXIgMyAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfQ1Q0ICAgICAgIDB4MDAwMDAxMDAgIC8qIEdQVCBjb21wYXJlIHRpbWVyIDQgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX1NSRSAgICAgICAweDAwMDAwMDgwICAvKiBTZXJpYWwgUk9NIGVycm9yICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19HUFREQyAgICAgMHgwMDAwMDA0MCAgLyogR1BUIGRlY3JlbWVudGVyIHB1bHNlICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfUlNWRDAgICAgIDB4MDAwMDAwMjAgIC8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0VQQ0lQRVIgICAweDAwMDAwMDEwICAvKiBFeHRlcm5hbCBQQ0kgUEVSUiAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19FSVIwICAgICAgMHgwMDAwMDAwOCAgLyogRXh0ZXJuYWwgaW50ZXJydXB0IDAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfRVdVMCAgICAgIDB4MDAwMDAwMDQgIC8qIEV0aGVybmV0IDAgd2FrZXVwICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjEgICAgICAweDAwMDAwMDAyICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19FV1UxICAgICAgMHgwMDAwMDAwMSAgLyogRXRoZXJuZXQgMSB3YWtldXAgICAgICAgICAgICAgICAgICAqLworCisvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIDQwNSBjb2RlICovCisjZGVmaW5lIFVJQ19NQUxfU0VSUglVSUNfTVMKKyNkZWZpbmUgVUlDX01BTF9UWERFCVVJQ19NVERFCisjZGVmaW5lIFVJQ19NQUxfUlhERQlVSUNfTVJERQorI2RlZmluZSBVSUNfRU5FVAlVSUNfRVRIMAorCisjZWxpZiAhZGVmaW5lZChDT05GSUdfNDQwU1BFKQogI2RlZmluZSBVSUNfTVMJCTB4ODAwMDAwMDAJLyogTUFMIFNFUlIJCQkgICAgKi8KICNkZWZpbmUgVUlDX01UREUJMHg0MDAwMDAwMAkvKiBNQUwgVFhERQkJCSAgICAqLwogI2RlZmluZSBVSUNfTVJERQkweDIwMDAwMDAwCS8qIE1BTCBSWERFCQkJICAgICovCkBAIC04NzQsNiArMTkxNywyMCBAQAogI2RlZmluZSBVSUNfUlNWRDI5CTB4MDAwMDAwMDQJLyogUmVzZXJ2ZWQJCQkgICAgKi8KICNkZWZpbmUgVUlDX1JTVkQzMAkweDAwMDAwMDAyCS8qIFJlc2VydmVkCQkJICAgICovCiAjZGVmaW5lIFVJQ19SU1ZEMzEJMHgwMDAwMDAwMQkvKiBSZXNlcnZlZAkJCSAgICAqLworCisjZWxpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkgLyogVUlDMiAqLworCisjZGVmaW5lIFVJQ19FSVI1ICAgIDB4ODAwMDAwMDAgIC8qIEV4dGVybmFsIGludGVycnVwdCA1ICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfRUlSNiAgICAweDQwMDAwMDAwICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgNiAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX09QQiAgICAgMHgyMDAwMDAwMCAgLyogT1BCIHRvIFBMQiBicmlkZ2UgaW50ZXJydXB0IHN0YXQgICAgICovCisjZGVmaW5lIFVJQ19FSVIyICAgIDB4MTAwMDAwMDAgIC8qIEV4dGVybmFsIGludGVycnVwdCAyICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfRUlSMyAgICAweDA4MDAwMDAwICAvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMyAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX0REUjIgICAgMHgwNDAwMDAwMCAgLyogRERSMiBzZHJhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19NQ1RYMCAgIDB4MDIwMDAwMDAgIC8qIE1BbCBpbnRwIGNvYWxlc2NlbmNlIFRYMCAgICAgICAgICAgICAqLworI2RlZmluZSBVSUNfTUNUWDEgICAweDAxMDAwMDAwICAvKiBNQWwgaW50cCBjb2FsZXNjZW5jZSBUWDEgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVUlDX01DVFIwICAgMHgwMDgwMDAwMCAgLyogTUFsIGludHAgY29hbGVzY2VuY2UgVFIwICAgICAgICAgICAgICovCisjZGVmaW5lIFVJQ19NQ1RSMSAgIDB4MDA0MDAwMDAgIC8qIE1BbCBpbnRwIGNvYWxlc2NlbmNlIFRSMSAgICAgICAgICAgICAqLworCiAjZW5kaWYJLyogQ09ORklHXzQ0MEdYICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtODg5LDcgKzE5NDYsMTI5IEBACiAKICNkZWZpbmUgVUlDQjBfQUxMCQkoVUlDQjBfVUlDMENJIHwgVUlDQjBfVUlDME5DSSB8IFVJQ0IwX1VJQzFDSSB8IFwKIAkJCQkJCSBVSUNCMF9VSUMxTkNJIHwgVUlDQjBfVUlDMkNJIHwgVUlDQjBfVUlDMk5DSSkKKworI2VsaWYgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUlgpCisKKyNkZWZpbmUgVUlDQjBfVUlDMUNJCTB4MDAwMDAwMDAJLyogVUlDMSBDcml0aWNhbCBJbnRlcnJ1cHQJICAgICovCisjZGVmaW5lIFVJQ0IwX1VJQzFOQ0kJMHgwMDAwMDAwMAkvKiBVSUMxIE5vbmNyaXRpY2FsIEludGVycnVwdAkgICAgKi8KKyNkZWZpbmUgVUlDQjBfVUlDMkNJCTB4MDAwMDAwMDAJLyogVUlDMiBDcml0aWNhbCBJbnRlcnJ1cHQJICAgICovCisjZGVmaW5lIFVJQ0IwX1VJQzJOQ0kJMHgwMDAwMDAwMAkvKiBVSUMyIE5vbmNyaXRpY2FsIEludGVycnVwdAkgICAgKi8KKworI2RlZmluZSBVSUNCMF9BTEwJCShVSUNCMF9VSUMxQ0kgfCBVSUNCMF9VSUMxTkNJIHwgXAorCQkJCQkJIFVJQ0IwX1VJQzFDSSB8IFVJQ0IwX1VJQzJOQ0kpCisKICNlbmRpZiAvKiBDT05GSUdfNDQwR1ggKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgVW5pdmVyc2FsIGludGVycnVwdCBjb250cm9sbGVyIGludGVycnVwdHMKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKKy8qI2RlZmluZSBVSUNCMF9VSUMwQ0kJMHg4MDAwMDAwMCovCS8qIFVJQzAgQ3JpdGljYWwgSW50ZXJydXB0CSAgICAqLworLyojZGVmaW5lIFVJQ0IwX1VJQzBOQ0kJMHg0MDAwMDAwMCovCS8qIFVJQzAgTm9uY3JpdGljYWwgSW50ZXJydXB0CSAgICAqLworI2RlZmluZSBVSUNCMF9VSUMxQ0kJMHgwMDAwMDAwMgkvKiBVSUMxIENyaXRpY2FsIEludGVycnVwdAkgICAgKi8KKyNkZWZpbmUgVUlDQjBfVUlDMU5DSQkweDAwMDAwMDAxCS8qIFVJQzEgTm9uY3JpdGljYWwgSW50ZXJydXB0CSAgICAqLworI2RlZmluZSBVSUNCMF9VSUMyQ0kJMHgwMDIwMDAwMAkvKiBVSUMyIENyaXRpY2FsIEludGVycnVwdAkgICAgKi8KKyNkZWZpbmUgVUlDQjBfVUlDMk5DSQkweDAwMTAwMDAwCS8qIFVJQzIgTm9uY3JpdGljYWwgSW50ZXJydXB0CSAgICAqLworI2RlZmluZSBVSUNCMF9VSUMzQ0kJMHgwMDAwODAwMAkvKiBVSUMzIENyaXRpY2FsIEludGVycnVwdAkgICAgKi8KKyNkZWZpbmUgVUlDQjBfVUlDM05DSQkweDAwMDA0MDAwCS8qIFVJQzMgTm9uY3JpdGljYWwgSW50ZXJydXB0CSAgICAqLworCisjZGVmaW5lIFVJQ0IwX0FMTAkJKFVJQ0IwX1VJQzFDSSB8IFVJQ0IwX1VJQzFOQ0kgfCBVSUNCMF9VSUMyQ0kgfCBcCisJCQkJCQkgVUlDQjBfVUlDMk5DSSB8IFVJQ0IwX1VJQzNDSSB8IFVJQ0IwX1VJQzNOQ0kpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgIFVuaXZlcnNhbCBpbnRlcnJ1cHQgY29udHJvbGxlciAwIGludGVycnVwdHMgKFVJQzApCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgVUlDX1UwCQkweDgwMDAwMDAwCS8qIFVBUlQgMAkJCSAgICAqLworI2RlZmluZSBVSUNfVTEJCTB4NDAwMDAwMDAJLyogVUFSVCAxCQkJICAgICovCisjZGVmaW5lIFVJQ19JSUMwCTB4MjAwMDAwMDAJLyogSUlDCQkJCSAgICAqLworI2RlZmluZSBVSUNfSUlDMQkweDEwMDAwMDAwCS8qIElJQwkJCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BJTQkJMHgwODAwMDAwMAkvKiBQQ0kgaW5ib3VuZCBtZXNzYWdlCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BDUlcJMHgwNDAwMDAwMAkvKiBQQ0kgY29tbWFuZCByZWdpc3RlciB3cml0ZQkgICAgKi8KKyNkZWZpbmUgVUlDX1BQTQkJMHgwMjAwMDAwMAkvKiBQQ0kgcG93ZXIgbWFuYWdlbWVudAkJICAgICovCisjZGVmaW5lIFVJQ19QVlBEQQkweDAxMDAwMDAwCS8qIFBDSXggMCB2cGQgYWNjZXNzCQkgICAgKi8KKyNkZWZpbmUgVUlDX01TSTAJMHgwMDgwMDAwMAkvKiBQQ0l4IE1TSSBsZXZlbCAwCQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjE1CTB4MDA0MDAwMDAJLyogRXh0ZXJuYWwgaW50cCAxNQkJICAgICovCisjZGVmaW5lIFVJQ19QRU1TSTAJMHgwMDA4MDAwMAkvKiBQQ0llIE1TSSBsZXZlbCAwCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BFTVNJMQkweDAwMDQwMDAwCS8qIFBDSWUgTVNJIGxldmVsIDEJCSAgICAqLworI2RlZmluZSBVSUNfUEVNU0kyCTB4MDAwMjAwMDAJLyogUENJZSBNU0kgbGV2ZWwgMgkJICAgICovCisjZGVmaW5lIFVJQ19QRU1TSTMJMHgwMDAxMDAwMAkvKiBQQ0llIE1TSSBsZXZlbCAzCQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjE0CTB4MDAwMDIwMDAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDE0CSAgICAqLworI2RlZmluZSBVSUNfRDBDUEZGCTB4MDAwMDEwMDAJLyogRE1BMCBjcCBmaWZvIGZ1bGwJCSAgICAqLworI2RlZmluZSBVSUNfRDBDU05TCTB4MDAwMDA4MDAJLyogRE1BMCBjcyBmaWZvIG5lZWRzIHNlcnZpY2UJICAgICovCisjZGVmaW5lIFVJQ19EMUNQRkYJMHgwMDAwMDQwMAkvKiBETUExIGNwIGZpZm8gZnVsbAkJICAgICovCisjZGVmaW5lIFVJQ19EMUNTTlMJMHgwMDAwMDIwMAkvKiBETUExIGNzIGZpZm8gbmVlZHMgc2VydmljZQkgICAgKi8KKyNkZWZpbmUgVUlDX0kyT0lECTB4MDAwMDAxMDAJLyogSTJPIGluYm91bmQgZG9vciBiZWxsCSAgICAqLworI2RlZmluZSBVSUNfSTJPTE5FCTB4MDAwMDAwODAJLyogSTJPIEluYm91bmQgUG9zdCBMaXN0IEZJRk8gTm90IEVtcHR5ICovCisjZGVmaW5lIFVJQ19JMjBSMExMCTB4MDAwMDAwNDAJLyogSTJPIFJlZ2lvbiAwIExvdyBMYXRlbmN5IFBMQiBXcml0ZSAqLworI2RlZmluZSBVSUNfSTJPUjFMTAkweDAwMDAwMDIwCS8qIEkyTyBSZWdpb24gMSBMb3cgTGF0ZW5jeSBQTEIgV3JpdGUgKi8KKyNkZWZpbmUgVUlDX0kyMFIwSEIJMHgwMDAwMDAxMAkvKiBJMk8gUmVnaW9uIDAgSGlnaCBCYW5kd2lkdGggUExCIFdyaXRlICovCisjZGVmaW5lIFVJQ19JMk9SMUhCCTB4MDAwMDAwMDgJLyogSTJPIFJlZ2lvbiAxIEhpZ2ggQmFuZHdpZHRoIFBMQiBXcml0ZSAqLworI2RlZmluZSBVSUNfQ1BUQ05UCTB4MDAwMDAwMDQJLyogR1BUIENvdW50IFRpbWVyCQkgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgVW5pdmVyc2FsIGludGVycnVwdCBjb250cm9sbGVyIDEgaW50ZXJydXB0cyAoVUlDMSkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVSUNfRUlSMTMJMHg4MDAwMDAwMAkvKiBleHRlcm5laSBpbnRwIDEzCQkgICAgKi8KKyNkZWZpbmUgVUlDX01TCQkweDQwMDAwMDAwCS8qIE1BTCBTRVJSCQkJICAgICovCisjZGVmaW5lIFVJQ19NVERFCTB4MjAwMDAwMDAJLyogTUFMIFRYREUJCQkgICAgKi8KKyNkZWZpbmUgVUlDX01SREUJMHgxMDAwMDAwMAkvKiBNQUwgUlhERQkJCSAgICAqLworI2RlZmluZSBVSUNfREVVRQkweDA4MDAwMDAwCS8qIEREUiBTRFJBTSBFQ0MgY29ycmVjdC91bmNvcnJlY3RhYmxlIGVycm9yICovCisjZGVmaW5lIFVJQ19FQkNPCTB4MDQwMDAwMDAJLyogRUJDTyBpbnRlcnJ1cHQgc3RhdHVzCSAgICAqLworI2RlZmluZSBVSUNfTVRFCQkweDAyMDAwMDAwCS8qIE1BTCBUWEVPQgkJCSAgICAqLworI2RlZmluZSBVSUNfTVJFCQkweDAxMDAwMDAwCS8qIE1BTCBSWEVPQgkJCSAgICAqLworI2RlZmluZSBVSUNfTVNJMQkweDAwODAwMDAwCS8qIFBDSSBNU0kgbGV2ZWwgMQkJICAgICovCisjZGVmaW5lIFVJQ19NU0kyCTB4MDA0MDAwMDAJLyogUENJIE1TSSBsZXZlbCAyCQkgICAgKi8KKyNkZWZpbmUgVUlDX01TSTMJMHgwMDIwMDAwMAkvKiBQQ0kgTVNJIGxldmVsIDMJCSAgICAqLworI2RlZmluZSBVSUNfTDJDCQkweDAwMTAwMDAwCS8qIEwyIGNhY2hlCQkJICAgICovCisjZGVmaW5lIFVJQ19DVDAJCTB4MDAwODAwMDAJLyogR1BUIGNvbXBhcmUgdGltZXIgMAkJICAgICovCisjZGVmaW5lIFVJQ19DVDEJCTB4MDAwNDAwMDAJLyogR1BUIGNvbXBhcmUgdGltZXIgMQkJICAgICovCisjZGVmaW5lIFVJQ19DVDIJCTB4MDAwMjAwMDAJLyogR1BUIGNvbXBhcmUgdGltZXIgMgkJICAgICovCisjZGVmaW5lIFVJQ19DVDMJCTB4MDAwMTAwMDAJLyogR1BUIGNvbXBhcmUgdGltZXIgMwkJICAgICovCisjZGVmaW5lIFVJQ19DVDQJCTB4MDAwMDgwMDAJLyogR1BUIGNvbXBhcmUgdGltZXIgNAkJICAgICovCisjZGVmaW5lIFVJQ19FSVIxMgkweDAwMDA0MDAwCS8qIEV4dGVybmFsIGludGVycnVwdCAxMgkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjExCTB4MDAwMDIwMDAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDExCSAgICAqLworI2RlZmluZSBVSUNfRUlSMTAJMHgwMDAwMTAwMAkvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMTAJICAgICovCisjZGVmaW5lIFVJQ19FSVI5CTB4MDAwMDA4MDAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDkJCSAgICAqLworI2RlZmluZSBVSUNfRUlSOAkweDAwMDAwNDAwCS8qIEV4dGVybmFsIGludGVycnVwdCA4CQkgICAgKi8KKyNkZWZpbmUgVUlDX0RNQUUJMHgwMDAwMDIwMAkvKiBkbWEgZXJyb3IJCQkgICAgKi8KKyNkZWZpbmUgVUlDX0kyT0UJMHgwMDAwMDEwMAkvKiBpMm8gZXJyb3IJCQkgICAgKi8KKyNkZWZpbmUgVUlDX1NSRQkJMHgwMDAwMDA4MAkvKiBTZXJpYWwgUk9NIGVycm9yCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BDSVhBRQkweDAwMDAwMDQwCS8qIFBjaXgwIGFzeW5jIGVycm9yCQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjcJMHgwMDAwMDAyMAkvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgNwkJICAgICovCisjZGVmaW5lIFVJQ19FSVI2CTB4MDAwMDAwMTAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDYJCSAgICAqLworI2RlZmluZSBVSUNfRVRIMAkweDAwMDAwMDA4CS8qIEV0aGVybmV0IDAJCQkgICAgKi8KKyNkZWZpbmUgVUlDX0VXVTAJMHgwMDAwMDAwNAkvKiBFdGhlcm5ldCAwIHdha2V1cAkJICAgICovCisjZGVmaW5lIFVJQ19FVEgxCTB4MDAwMDAwMDIJLyogcmVzZXJ2ZWQJCQkgICAgKi8KKyNkZWZpbmUgVUlDX1hPUgkJMHgwMDAwMDAwMQkvKiB4b3IJCQkJICAgICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgVW5pdmVyc2FsIGludGVycnVwdCBjb250cm9sbGVyIDIgaW50ZXJydXB0cyAoVUlDMikKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVSUNfUEVPQUwJMHg4MDAwMDAwMAkvKiBQRTAgIEFMCQkJICAgICovCisjZGVmaW5lIFVJQ19QRU9WQQkweDQwMDAwMDAwCS8qIFBFMCAgVlBEIGFjY2VzcwkJICAgICovCisjZGVmaW5lIFVJQ19QRU9IUlIJMHgyMDAwMDAwMAkvKiBQRTAgSG9zdCByZXNldCByZXF1ZXN0IHJpc2luZyAgICAqLworI2RlZmluZSBVSUNfUEUwSFJGCTB4MTAwMDAwMDAJLyogUEUwIEhvc3QgcmVzZXQgcmVxdWVzdCBmYWxsaW5nICAgKi8KKyNkZWZpbmUgVUlDX1BFMFRDUgkweDA4MDAwMDAwCS8qIFBFMCBUQ1IJCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BFMEJWQ08JMHgwNDAwMDAwMAkvKiBQRTAgQnVzbWFzdGVyIFZDTwkJICAgICovCisjZGVmaW5lIFVJQ19QRTBEQ1JFCTB4MDIwMDAwMDAJLyogUEUwIERDUiBlcnJvcgkJICAgICovCisjZGVmaW5lIFVJQ19QRTFBTAkweDAwODAwMDAwCS8qIFBFMSAgQUwJCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BFMVZBCTB4MDA0MDAwMDAJLyogUEUxICBWUEQgYWNjZXNzCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BFMUhSUgkweDAwMjAwMDAwCS8qIFBFMSBIb3N0IHJlc2V0IHJlcXVlc3QgcmlzaW5nICAgICovCisjZGVmaW5lIFVJQ19QRTFIUkYJMHgwMDEwMDAwMAkvKiBQRTEgSG9zdCByZXNldCByZXF1ZXN0IGZhbGxpbmcgICAqLworI2RlZmluZSBVSUNfUEUxVENSCTB4MDAwODAwMDAJLyogUEUxIFRDUgkJCSAgICAqLworI2RlZmluZSBVSUNfUEUxQlZDTwkweDAwMDQwMDAwCS8qIFBFMSBCdXNtYXN0ZXIgVkNPCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BFMURDUkUJMHgwMDAyMDAwMAkvKiBQRTEgRENSIGVycm9yCQkgICAgKi8KKyNkZWZpbmUgVUlDX1BFMkFMCTB4MDAwMDgwMDAJLyogUEUyICBBTAkJCSAgICAqLworI2RlZmluZSBVSUNfUEUyVkEJMHgwMDAwNDAwMAkvKiBQRTIgIFZQRCBhY2Nlc3MJCSAgICAqLworI2RlZmluZSBVSUNfUEUySFJSCTB4MDAwMDIwMDAJLyogUEUyIEhvc3QgcmVzZXQgcmVxdWVzdCByaXNpbmcgICAgKi8KKyNkZWZpbmUgVUlDX1BFMkhSRgkweDAwMDAxMDAwCS8qIFBFMiBIb3N0IHJlc2V0IHJlcXVlc3QgZmFsbGluZyAgICovCisjZGVmaW5lIFVJQ19QRTJUQ1IJMHgwMDAwMDgwMAkvKiBQRTIgVENSCQkJICAgICovCisjZGVmaW5lIFVJQ19QRTJCVkNPCTB4MDAwMDA0MDAJLyogUEUyIEJ1c21hc3RlciBWQ08JCSAgICAqLworI2RlZmluZSBVSUNfUEUyRENSRQkweDAwMDAwMjAwCS8qIFBFMiBEQ1IgZXJyb3IJCSAgICAqLworI2RlZmluZSBVSUNfRUlSNQkweDAwMDAwMDgwCS8qIEV4dGVybmFsIGludGVycnVwdCA1CQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjQJMHgwMDAwMDA0MAkvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgNAkJICAgICovCisjZGVmaW5lIFVJQ19FSVIzCTB4MDAwMDAwMjAJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDMJCSAgICAqLworI2RlZmluZSBVSUNfRUlSMgkweDAwMDAwMDEwCS8qIEV4dGVybmFsIGludGVycnVwdCAyCQkgICAgKi8KKyNkZWZpbmUgVUlDX0VJUjEJMHgwMDAwMDAwOAkvKiBFeHRlcm5hbCBpbnRlcnJ1cHQgMQkJICAgICovCisjZGVmaW5lIFVJQ19FSVIwCTB4MDAwMDAwMDQJLyogRXh0ZXJuYWwgaW50ZXJydXB0IDAJCSAgICAqLworI2VuZGlmIC8qIENPTkZJR180NDBTUEUgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgIEV4dGVybmFsIEJ1cyBDb250cm9sbGVyIEJpdCBTZXR0aW5ncwpAQCAtOTgxLDYgKzIxNjAsNDMyIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAgU0RSMCBCaXQgU2V0dGluZ3MKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1BFKQorI2RlZmluZSBTRFIwX0NQNDQwCQkJMHgwMTgwCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9NQVNLCQkweDMwMDAwMDAwCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9NQVNLX0hJCQkweDMwMDAKKyNkZWZpbmUgU0RSMF9DUDQ0MF9FUlBOX01BU0tfTE8JCTB4MDAwMAorI2RlZmluZSBTRFIwX0NQNDQwX0VSUE5fRUJDCQkweDEwMDAwMDAwCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9FQkNfSEkJCTB4MTAwMAorI2RlZmluZSBTRFIwX0NQNDQwX0VSUE5fRUJDX0xPCQkweDAwMDAKKyNkZWZpbmUgU0RSMF9DUDQ0MF9FUlBOX1BDSQkJMHgyMDAwMDAwMAorI2RlZmluZSBTRFIwX0NQNDQwX0VSUE5fUENJX0hJCQkweDIwMDAKKyNkZWZpbmUgU0RSMF9DUDQ0MF9FUlBOX1BDSV9MTwkJMHgwMDAwCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAzKTw8MjgpCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjgpJjB4MDMpCisjZGVmaW5lIFNEUjBfQ1A0NDBfTlRPMV9NQVNLCQkweDAwMDAwMDAyCisjZGVmaW5lIFNEUjBfQ1A0NDBfTlRPMV9OVE9QCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfQ1A0NDBfTlRPMV9OVE8xCQkweDAwMDAwMDAyCisjZGVmaW5lIFNEUjBfQ1A0NDBfTlRPMV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAxKTw8MSkKKyNkZWZpbmUgU0RSMF9DUDQ0MF9OVE8xX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4xKSYweDAxKQorI2RlZmluZSBTRFIwX0NGR0FERFIJCQkweDAwRQkvKmFscmVhZHkgZGVmaW5lZCBsaW5lIDI3NyAqLworI2RlZmluZSBTRFIwX0NGR0RBVEEJCQkweDAwRgorCisKKyNkZWZpbmUgU0RSMF9TRFNUUDAJCQkweDAwMjAKKyNkZWZpbmUgU0RSMF9TRFNUUDBfRU5HX01BU0sJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDBfRU5HX1BMTERJUwkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9FTkdfUExMRU5BQgkJMHg4MDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9FTkdfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDMxKQorI2RlZmluZSBTRFIwX1NEU1RQMF9FTkdfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjMxKSYweDAxKQorI2RlZmluZSBTRFIwX1NEU1RQMF9TUkNfTUFTSwkJMHg0MDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9TUkNfUExMT1VUQQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9TUkNfUExMT1VUQgkJMHg0MDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9TUkNfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDMwKQorI2RlZmluZSBTRFIwX1NEU1RQMF9TUkNfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjMwKSYweDAxKQorI2RlZmluZSBTRFIwX1NEU1RQMF9TRUxfTUFTSwkJMHgzODAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9TRUxfUExMT1VUCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAwX1NFTF9DUFUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDBfU0VMX0VCQwkJMHgyODAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9TRUxfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwNyk8PDI3KQorI2RlZmluZSBTRFIwX1NEU1RQMF9TRUxfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjI3KSYweDA3KQorI2RlZmluZSBTRFIwX1NEU1RQMF9UVU5FX01BU0sJCTB4MDdGRTAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDBfVFVORV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDNGRik8PDE3KQorI2RlZmluZSBTRFIwX1NEU1RQMF9UVU5FX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4xNykmMHgzRkYpCisjZGVmaW5lIFNEUjBfU0RTVFAwX0ZCRFZfTUFTSwkJMHgwMDAxRjAwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9GQkRWX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MUYpPDwxMikKKyNkZWZpbmUgU0RSMF9TRFNUUDBfRkJEVl9ERUNPREUobikJKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4xMiktMSkmMHgxRikrMSkKKyNkZWZpbmUgU0RSMF9TRFNUUDBfRldEVkFfTUFTSwkJMHgwMDAwMEYwMAorI2RlZmluZSBTRFIwX1NEU1RQMF9GV0RWQV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDBGKTw8OCkKKyNkZWZpbmUgU0RSMF9TRFNUUDBfRldEVkFfREVDT0RFKG4pCSgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+OCktMSkmMHgwRikrMSkKKyNkZWZpbmUgU0RSMF9TRFNUUDBfRldEVkJfTUFTSwkJMHgwMDAwMDBFMAorI2RlZmluZSBTRFIwX1NEU1RQMF9GV0RWQl9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDA3KTw8NSkKKyNkZWZpbmUgU0RSMF9TRFNUUDBfRldEVkJfREVDT0RFKG4pCSgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+NSktMSkmMHgwNykrMSkKKyNkZWZpbmUgU0RSMF9TRFNUUDBfUFJCRFYwX01BU0sJCTB4MDAwMDAwMUMKKyNkZWZpbmUgU0RSMF9TRFNUUDBfUFJCRFYwX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDcpPDwyKQorI2RlZmluZSBTRFIwX1NEU1RQMF9QUkJEVjBfREVDT0RFKG4pCSgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MiktMSkmMHgwNykrMSkKKyNkZWZpbmUgU0RSMF9TRFNUUDBfT1BCRFYwX01BU0sJCTB4MDAwMDAwMDMKKyNkZWZpbmUgU0RSMF9TRFNUUDBfT1BCRFYwX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDMpPDwwKQorI2RlZmluZSBTRFIwX1NEU1RQMF9PUEJEVjBfREVDT0RFKG4pCSgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MCktMSkmMHgwMykrMSkKKworCisjZGVmaW5lIFNEUjBfU0RTVFAxCQkJMHgwMDIxCisjZGVmaW5lIFNEUjBfU0RTVFAxX0xGQkRWX01BU0sJCTB4RkMwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDFfTEZCRFZfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgzRik8PDI2KQorI2RlZmluZSBTRFIwX1NEU1RQMV9MRkJEVl9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjYpJjB4M0YpCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BFUkRWMF9NQVNLCQkweDAzMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BFUkRWMF9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAzKTw8MjQpCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BFUkRWMF9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjQpJjB4MDMpCisjZGVmaW5lIFNEUjBfU0RTVFAxX01BTERWMF9NQVNLCQkweDAwQzAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAxX01BTERWMF9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAzKTw8MjIpCisjZGVmaW5lIFNEUjBfU0RTVFAxX01BTERWMF9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjIpJjB4MDMpCisjZGVmaW5lIFNEUjBfU0RTVFAxX0REUl9NT0RFX01BU0sJMHgwMDMwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9ERFIxX01PREUJCTB4MDAxMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDFfRERSMl9NT0RFCQkweDAwMjAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAxX0REUl9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAzKTw8MjApCisjZGVmaW5lIFNEUjBfU0RTVFAxX0REUl9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjApJjB4MDMpCisjZGVmaW5lIFNEUjBfU0RTVFAxX0VSUE5fTUFTSwkJMHgwMDA4MDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9FUlBOX0VCQwkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9FUlBOX1BDSQkJMHgwMDA4MDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QQUVfTUFTSwkJMHgwMDA0MDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QQUVfRElTQUJMRQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QQUVfRU5BQkxFCQkweDAwMDQwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BBRV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAxKTw8MTgpCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BBRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MTgpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BIQ0VfTUFTSwkJMHgwMDAyMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QSENFX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QSENFX0VOQUJMRQkJMHgwMDAyMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QSENFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwxNykKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUEhDRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MTcpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BJU0VfTUFTSwkJMHgwMDAxMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QSVNFX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QSVNFX0VOQUJMRQkJMHgwMDAwMTAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QSVNFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwxNikKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUElTRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MTYpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BDV0VfTUFTSwkJMHgwMDAwODAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QQ1dFX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QQ1dFX0VOQUJMRQkJMHgwMDAwODAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QQ1dFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwxNSkKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUENXRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MTUpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BQSU1fTUFTSwkJMHgwMDAwNzgwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QUElNX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MEYpPDwxMSkKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUFBJTV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MTEpJjB4MEYpCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BSNjRFX01BU0sJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUFI2NEVfRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BSNjRFX0VOQUJMRQkweDAwMDAwNDAwCisjZGVmaW5lIFNEUjBfU0RTVFAxX1BSNjRFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwxMCkKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUFI2NEVfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjEwKSYweDAxKQorI2RlZmluZSBTRFIwX1NEU1RQMV9QWEZTX01BU0sJCTB4MDAwMDAzMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUFhGU18xMDBfMTMzCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUFhGU182Nl8xMDAJCTB4MDAwMDAxMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUFhGU181MF82NgkJMHgwMDAwMDIwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9QWEZTXzBfNTAJCTB4MDAwMDAzMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUFhGU19FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAzKTw8OCkKKyNkZWZpbmUgU0RSMF9TRFNUUDFfUFhGU19ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+OCkmMHgwMykKKyNkZWZpbmUgU0RSMF9TRFNUUDFfRUJDV19NQVNLCQkweDAwMDAwMDgwIC8qIFNPUCAqLworI2RlZmluZSBTRFIwX1NEU1RQMV9FQkNXXzhfQklUUwkJMHgwMDAwMDAwMCAvKiBTT1AgKi8KKyNkZWZpbmUgU0RSMF9TRFNUUDFfRUJDV18xNl9CSVRTCTB4MDAwMDAwODAgLyogU09QICovCisjZGVmaW5lIFNEUjBfU0RTVFAxX0RCR0VOX01BU0sJCTB4MDAwMDAwMzAgLyogJDIxOEMgKi8KKyNkZWZpbmUgU0RSMF9TRFNUUDFfREJHRU5fRlVOQwkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9EQkdFTl9UUkFDRQkJMHgwMDAwMDAxMAorI2RlZmluZSBTRFIwX1NEU1RQMV9EQkdFTl9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAzKTw8NCkgLyogJDIxOEMgKi8KKyNkZWZpbmUgU0RSMF9TRFNUUDFfREJHRU5fREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjQpJjB4MDMpIC8qICQyMThDICovCisjZGVmaW5lIFNEUjBfU0RTVFAxX0VUSF9NQVNLCQkweDAwMDAwMDA0CisjZGVmaW5lIFNEUjBfU0RTVFAxX0VUSF8xMF8xMDAJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDFfRVRIX0dJR0EJCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0RSMF9TRFNUUDFfRVRIX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwyKQorI2RlZmluZSBTRFIwX1NEU1RQMV9FVEhfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjIpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAxX05UTzFfTUFTSwkJMHgwMDAwMDAwMQorI2RlZmluZSBTRFIwX1NEU1RQMV9OVE8xX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMV9OVE8xX0VOQUJMRQkJMHgwMDAwMDAwMQorI2RlZmluZSBTRFIwX1NEU1RQMV9OVE8xX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwwKQorI2RlZmluZSBTRFIwX1NEU1RQMV9OVE8xX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4wKSYweDAxKQorCisjZGVmaW5lIFNEUjBfU0RTVFAyCQkJMHgwMDIyCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxQUVfTUFTSwkJMHg4MDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMUFFX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMUFFX0VOQUJMRQkJMHg4MDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMUFFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwzMSkKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFBRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MzEpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxSENFX01BU0sJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFIQ0VfRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxSENFX0VOQUJMRQkweDQwMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxSENFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwzMCkKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFIQ0VfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjMwKSYweDAxKQorI2RlZmluZSBTRFIwX1NEU1RQMl9QMUlTRV9NQVNLCQkweDIwMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxSVNFX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMUlTRV9FTkFCTEUJMHgyMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMUlTRV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAxKTw8MjkpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxSVNFX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4yOSkmMHgwMSkKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFDV0VfTUFTSwkJMHgxMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMUNXRV9ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFDV0VfRU5BQkxFCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFDV0VfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDI4KQorI2RlZmluZSBTRFIwX1NEU1RQMl9QMUNXRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjgpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxUElNX01BU0sJCTB4MEYwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFQSU1fRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwRik8PDI0KQorI2RlZmluZSBTRFIwX1NEU1RQMl9QMVBJTV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjQpJjB4MEYpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxUjY0RV9NQVNLCQkweDAwODAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxUjY0RV9ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFSNjRFX0VOQUJMRQkweDAwODAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxUjY0RV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAxKTw8MjMpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxUjY0RV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjMpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxWEZTX01BU0sJCTB4MDA2MDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFYRlNfMTAwXzEzMwkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxWEZTXzY2XzEwMAkweDAwMjAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxWEZTXzUwXzY2CQkweDAwNDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AxWEZTXzBfNTAJCTB4MDA2MDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDFYRlNfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMyk8PDIxKQorI2RlZmluZSBTRFIwX1NEU1RQMl9QMVhGU19ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjEpJjB4MDMpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AyQUVfTUFTSwkJMHgwMDA0MDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMkFFX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMkFFX0VOQUJMRQkJMHgwMDA0MDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMkFFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwxOCkKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJBRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MTgpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AySENFX01BU0sJCTB4MDAwMjAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJIQ0VfRElTQUJMRQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AySENFX0VOQUJMRQkweDAwMDIwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AySENFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwxNykKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJIQ0VfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjE3KSYweDAxKQorI2RlZmluZSBTRFIwX1NEU1RQMl9QMklTRV9NQVNLCQkweDAwMDEwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AySVNFX0RJU0FCTEUJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMklTRV9FTkFCTEUJMHgwMDAxMDAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMklTRV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAxKTw8MTYpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AySVNFX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4xNikmMHgwMSkKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJDV0VfTUFTSwkJMHgwMDAwODAwMAorI2RlZmluZSBTRFIwX1NEU1RQMl9QMkNXRV9ESVNBQkxFCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJDV0VfRU5BQkxFCTB4MDAwMDgwMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJDV0VfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDE1KQorI2RlZmluZSBTRFIwX1NEU1RQMl9QMkNXRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MTUpJjB4MDEpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AyUElNX01BU0sJCTB4MDAwMDc4MDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJQSU1fRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwRik8PDExKQorI2RlZmluZSBTRFIwX1NEU1RQMl9QMlBJTV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MTEpJjB4MEYpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AyWEZTX01BU0sJCTB4MDAwMDAzMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJYRlNfMTAwXzEzMwkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AyWEZTXzY2XzEwMAkweDAwMDAwMTAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AyWEZTXzUwXzY2CQkweDAwMDAwMjAwCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AyWEZTXzBfNTAJCTB4MDAwMDAxMDAKKyNkZWZpbmUgU0RSMF9TRFNUUDJfUDJYRlNfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMyk8PDgpCisjZGVmaW5lIFNEUjBfU0RTVFAyX1AyWEZTX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj44KSYweDAzKQorCisjZGVmaW5lIFNEUjBfU0RTVFAzCQkJMHgwMDIzCisKKyNkZWZpbmUgU0RSMF9QSU5TVFAJCQkweDAwNDAKKyNkZWZpbmUgU0RSMF9QSU5TVFBfQk9PVFNUUkFQX01BU0sJMHhDMDAwMDAwMCAgLyogU3RyYXAgQml0cyAqLworI2RlZmluZSBTRFIwX1BJTlNUUF9CT09UU1RSQVBfU0VUVElOR1MwCTB4MDAwMDAwMDAgIC8qIERlZmF1bHQgc3RyYXAgc2V0dGluZ3MgMCAoRUJDIGJvb3QpICovCisjZGVmaW5lIFNEUjBfUElOU1RQX0JPT1RTVFJBUF9TRVRUSU5HUzEJMHg0MDAwMDAwMCAgLyogRGVmYXVsdCBzdHJhcCBzZXR0aW5ncyAxIChQQ0kgYm9vdCkgKi8KKyNkZWZpbmUgU0RSMF9QSU5TVFBfQk9PVFNUUkFQX0lJQ181NF9FTgkweDgwMDAwMDAwICAvKiBTZXJpYWwgRGV2aWNlIEVuYWJsZWQgLSBBZGRyID0gMHg1NCAqLworI2RlZmluZSBTRFIwX1BJTlNUUF9CT09UU1RSQVBfSUlDXzUwX0VOCTB4QzAwMDAwMDAgIC8qIFNlcmlhbCBEZXZpY2UgRW5hYmxlZCAtIEFkZHIgPSAweDUwICovCisjZGVmaW5lIFNEUjBfU0RDUwkJCTB4MDA2MAorI2RlZmluZSBTRFIwX0VDSUQwCQkJMHgwMDgwCisjZGVmaW5lIFNEUjBfRUNJRDEJCQkweDAwODEKKyNkZWZpbmUgU0RSMF9FQ0lEMgkJCTB4MDA4MgorI2RlZmluZSBTRFIwX0pUQUcJCQkweDAwQzAKKworI2RlZmluZSBTRFIwX0REUjAJCQkweDAwRTEKKyNkZWZpbmUgU0RSMF9ERFIwX0RQTExSU1QJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0RSMF9ERFIwX0REUk1fTUFTSwkJMHg2MDAwMDAwMAorI2RlZmluZSBTRFIwX0REUjBfRERSTV9ERFIxCQkweDIwMDAwMDAwCisjZGVmaW5lIFNEUjBfRERSMF9ERFJNX0REUjIJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9ERFIwX0REUk1fRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMyk8PDI5KQorI2RlZmluZSBTRFIwX0REUjBfRERSTV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjkpJjB4MDMpCisjZGVmaW5lIFNEUjBfRERSMF9UVU5FX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MkZGKTw8MCkKKyNkZWZpbmUgU0RSMF9ERFIwX1RVTkVfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjApJjB4MkZGKQorCisjZGVmaW5lIFNEUjBfVUFSVDAJCQkweDAxMjAKKyNkZWZpbmUgU0RSMF9VQVJUMQkJCTB4MDEyMQorI2RlZmluZSBTRFIwX1VBUlQyCQkJMHgwMTIyCisjZGVmaW5lIFNEUjBfVUFSVFhfVVhJQ1NfTUFTSwkJMHhGMDAwMDAwMAorI2RlZmluZSBTRFIwX1VBUlRYX1VYSUNTX1BMQgkJMHgyMDAwMDAwMAorI2RlZmluZSBTRFIwX1VBUlRYX1VYRUNfTUFTSwkJMHgwMDgwMDAwMAorI2RlZmluZSBTRFIwX1VBUlRYX1VYRUNfSU5UCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfVUFSVFhfVVhFQ19FWFQJCTB4MDA4MDAwMDAKKyNkZWZpbmUgU0RSMF9VQVJUWF9VWERJVl9NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIFNEUjBfVUFSVFhfVVhESVZfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHhGRik8PDApCisjZGVmaW5lIFNEUjBfVUFSVFhfVVhESVZfREVDT0RFKG4pCSgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MCktMSkmMHhGRikrMSkKKworI2RlZmluZSBTRFIwX0NQNDQwCQkJMHgwMTgwCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9NQVNLCQkweDMwMDAwMDAwCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9NQVNLX0hJCQkweDMwMDAKKyNkZWZpbmUgU0RSMF9DUDQ0MF9FUlBOX01BU0tfTE8JCTB4MDAwMAorI2RlZmluZSBTRFIwX0NQNDQwX0VSUE5fRUJDCQkweDEwMDAwMDAwCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9FQkNfSEkJCTB4MTAwMAorI2RlZmluZSBTRFIwX0NQNDQwX0VSUE5fRUJDX0xPCQkweDAwMDAKKyNkZWZpbmUgU0RSMF9DUDQ0MF9FUlBOX1BDSQkJMHgyMDAwMDAwMAorI2RlZmluZSBTRFIwX0NQNDQwX0VSUE5fUENJX0hJCQkweDIwMDAKKyNkZWZpbmUgU0RSMF9DUDQ0MF9FUlBOX1BDSV9MTwkJMHgwMDAwCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAzKTw8MjgpCisjZGVmaW5lIFNEUjBfQ1A0NDBfRVJQTl9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjgpJjB4MDMpCisjZGVmaW5lIFNEUjBfQ1A0NDBfTlRPMV9NQVNLCQkweDAwMDAwMDAyCisjZGVmaW5lIFNEUjBfQ1A0NDBfTlRPMV9OVE9QCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfQ1A0NDBfTlRPMV9OVE8xCQkweDAwMDAwMDAyCisjZGVmaW5lIFNEUjBfQ1A0NDBfTlRPMV9FTkNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDAxKTw8MSkKKyNkZWZpbmUgU0RSMF9DUDQ0MF9OVE8xX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4xKSYweDAxKQorCisjZGVmaW5lIFNEUjBfWENSMAkJCTB4MDFDMAorI2RlZmluZSBTRFIwX1hDUjEJCQkweDAxQzMKKyNkZWZpbmUgU0RSMF9YQ1IyCQkJMHgwMUM2CisjZGVmaW5lIFNEUjBfWENSbl9QQUVfTUFTSwkJMHg4MDAwMDAwMAorI2RlZmluZSBTRFIwX1hDUm5fUEFFX0RJU0FCTEUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BBRV9FTkFCTEUJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BBRV9FTkNPREUobikJCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDMxKQorI2RlZmluZSBTRFIwX1hDUm5fUEFFX0RFQ09ERShuKQkJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MzEpJjB4MDEpCisjZGVmaW5lIFNEUjBfWENSbl9QSENFX01BU0sJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BIQ0VfRElTQUJMRQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1hDUm5fUEhDRV9FTkFCTEUJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BIQ0VfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDMwKQorI2RlZmluZSBTRFIwX1hDUm5fUEhDRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MzApJjB4MDEpCisjZGVmaW5lIFNEUjBfWENSbl9QSVNFX01BU0sJCTB4MjAwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BJU0VfRElTQUJMRQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1hDUm5fUElTRV9FTkFCTEUJCTB4MjAwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BJU0VfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDI5KQorI2RlZmluZSBTRFIwX1hDUm5fUElTRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjkpJjB4MDEpCisjZGVmaW5lIFNEUjBfWENSbl9QQ1dFX01BU0sJCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BDV0VfRElTQUJMRQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1hDUm5fUENXRV9FTkFCTEUJCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BDV0VfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDI4KQorI2RlZmluZSBTRFIwX1hDUm5fUENXRV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjgpJjB4MDEpCisjZGVmaW5lIFNEUjBfWENSbl9QUElNX01BU0sJCTB4MEYwMDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BQSU1fRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwRik8PDI0KQorI2RlZmluZSBTRFIwX1hDUm5fUFBJTV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjQpJjB4MEYpCisjZGVmaW5lIFNEUjBfWENSbl9QUjY0RV9NQVNLCQkweDAwODAwMDAwCisjZGVmaW5lIFNEUjBfWENSbl9QUjY0RV9ESVNBQkxFCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfWENSbl9QUjY0RV9FTkFCTEUJCTB4MDA4MDAwMDAKKyNkZWZpbmUgU0RSMF9YQ1JuX1BSNjRFX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwyMykKKyNkZWZpbmUgU0RSMF9YQ1JuX1BSNjRFX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4yMykmMHgwMSkKKyNkZWZpbmUgU0RSMF9YQ1JuX1BYRlNfTUFTSwkJMHgwMDYwMDAwMAorI2RlZmluZSBTRFIwX1hDUm5fUFhGU18xMDBfMTMzCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfWENSbl9QWEZTXzY2XzEwMAkJMHgwMDIwMDAwMAorI2RlZmluZSBTRFIwX1hDUm5fUFhGU181MF82NgkJMHgwMDQwMDAwMAorI2RlZmluZSBTRFIwX1hDUm5fUFhGU18wXzMzCQkweDAwNjAwMDAwCisjZGVmaW5lIFNEUjBfWENSbl9QWEZTX0VOQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDMpPDwyMSkKKyNkZWZpbmUgU0RSMF9YQ1JuX1BYRlNfREVDT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjIxKSYweDAzKQorCisjZGVmaW5lIFNEUjBfWFBMTEMwCQkJMHgwMUMxCisjZGVmaW5lIFNEUjBfWFBMTEQwCQkJMHgwMUMyCisjZGVmaW5lIFNEUjBfWFBMTEMxCQkJMHgwMUM0CisjZGVmaW5lIFNEUjBfWFBMTEQxCQkJMHgwMUM1CisjZGVmaW5lIFNEUjBfWFBMTEMyCQkJMHgwMUM3CisjZGVmaW5lIFNEUjBfWFBMTEQyCQkJMHgwMUM4CisjZGVmaW5lIFNEUjBfU1JTVAkJCTB4MDIwMAorI2RlZmluZSBTRFIwX1NMUElQRQkJCTB4MDIyMAorCisjZGVmaW5lIFNEUjBfQU1QMAkJCTB4MDI0MAorI2RlZmluZSBTRFIwX0FNUDBfUFJJT1JJVFkJCTB4RkZGRjAwMDAKKyNkZWZpbmUgU0RSMF9BTVAwX0FMVEVSTkFURV9QUklPUklUWQkweDAwMDBGRjAwCisjZGVmaW5lIFNEUjBfQU1QMF9SRVNFUlZFRF9CSVRTX01BU0sJMHgwMDAwMDBGRgorCisjZGVmaW5lIFNEUjBfQU1QMQkJCTB4MDI0MQorI2RlZmluZSBTRFIwX0FNUDFfUFJJT1JJVFkJCTB4RkMwMDAwMDAKKyNkZWZpbmUgU0RSMF9BTVAxX0FMVEVSTkFURV9QUklPUklUWQkweDAwMDBFMDAwCisjZGVmaW5lIFNEUjBfQU1QMV9SRVNFUlZFRF9CSVRTX01BU0sJMHgwM0ZGMUZGRgorCisjZGVmaW5lIFNEUjBfTUlSUTAJCQkweDAyNjAKKyNkZWZpbmUgU0RSMF9NSVJRMQkJCTB4MDI2MQorI2RlZmluZSBTRFIwX01BTFRCTAkJCTB4MDI4MAorI2RlZmluZSBTRFIwX01BTFJCTAkJCTB4MDJBMAorI2RlZmluZSBTRFIwX01BTFRCUwkJCTB4MDJDMAorI2RlZmluZSBTRFIwX01BTFJCUwkJCTB4MDJFMAorCisvKiBSZXNlcnZlZCBmb3IgQ3VzdG9tZXIgVXNlICovCisjZGVmaW5lIFNEUjBfQ1VTVDAJCQkweDQwMDAKKyNkZWZpbmUgU0RSMF9DVVNUMF9BVVRPTkVHX01BU0sJCTB4ODAwMDAwMAorI2RlZmluZSBTRFIwX0NVU1QwX05PX0FVVE9ORUcJCTB4MDAwMDAwMAorI2RlZmluZSBTRFIwX0NVU1QwX0FVVE9ORUcJCTB4ODAwMDAwMAorI2RlZmluZSBTRFIwX0NVU1QwX0VUSF9GT1JDRV9NQVNLCTB4NjAwMDAwMAorI2RlZmluZSBTRFIwX0NVU1QwX0VUSF9GT1JDRV8xME1IWgkweDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9DVVNUMF9FVEhfRk9SQ0VfMTAwTUhaCTB4MjAwMDAwMAorI2RlZmluZSBTRFIwX0NVU1QwX0VUSF9GT1JDRV8xMDAwTUhaCTB4NDAwMDAwMAorI2RlZmluZSBTRFIwX0NVU1QwX0VUSF9EVVBMRVhfTUFTSwkweDEwMDAwMDAKKyNkZWZpbmUgU0RSMF9DVVNUMF9FVEhfSEFMRl9EVVBMRVgJMHgwMDAwMDAwCisjZGVmaW5lIFNEUjBfQ1VTVDBfRVRIX0ZVTExfRFVQTEVYCTB4MTAwMDAwMAorCisjZGVmaW5lIFNEUjBfU0RTVFA0CQkJMHg0MDAxCisjZGVmaW5lIFNEUjBfQ1VTVDEJCQkweDQwMDIKKyNkZWZpbmUgU0RSMF9TRFNUUDUJCQkweDQwMDMKKyNkZWZpbmUgU0RSMF9DVVNUMgkJCTB4NDAwNAorI2RlZmluZSBTRFIwX1NEU1RQNgkJCTB4NDAwNQorI2RlZmluZSBTRFIwX0NVU1QzCQkJMHg0MDA2CisjZGVmaW5lIFNEUjBfU0RTVFA3CQkJMHg0MDA3CisKKyNkZWZpbmUgU0RSMF9QRkMwCQkJMHg0MTAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzAJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSVgwUkVRMl9OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzEJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSVgwUkVRM19OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzIJCTB4MjAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSVgwR05UMl9OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzMJCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSVgwR05UM19OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzQJCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSVgxUkVRMl9OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzUJCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSVgxUkVRM19OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzYJCTB4MDIwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSVgxR05UMl9OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzcJCTB4MDEwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSVgxR05UM19OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzgJCTB4MDA4MDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BFUlJFQURZCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BFUkNTMV9OCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzEwCQkweDAwMjAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9QRVJDUzJfTgkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1BGQzBfR1BJT18xMQkJMHgwMDEwMDAwMAorI2RlZmluZSBTRFIwX1BGQzBfSVJRMAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMTIJCTB4MDAwODAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0lSUTEJCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzEzCQkweDAwMDQwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9JUlEyCQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1BGQzBfR1BJT18xNAkJMHgwMDAyMDAwMAorI2RlZmluZSBTRFIwX1BGQzBfSVJRMwkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMTUJCTB4MDAwMTAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0lSUTQJCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMF9HUElPXzE2CQkweDAwMDA4MDAwCisjZGVmaW5lIFNEUjBfUEZDMF9JUlE1CQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1BGQzBfR1BJT18xNwkJMHgwMDAwNDAwMAorI2RlZmluZSBTRFIwX1BGQzBfUEVSQkUwX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMTgJCTB4MDAwMDIwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTBHTlQwX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMTkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTBHTlQxX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjAJCTB4MDAwMDA4MDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTBSRVEwX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjEJCTB4MDAwMDA0MDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTBSRVExX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjIJCTB4MDAwMDAyMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTFHTlQwX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjMJCTB4MDAwMDAxMDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTFHTlQxX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjQJCTB4MDAwMDAwODAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTFSRVEwX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTFSRVExX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjYJCTB4MDAwMDAwMjAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTJHTlQwX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjcJCTB4MDAwMDAwMTAKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTJHTlQxX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjgJCTB4MDAwMDAwMDgKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTJSRVEwX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMjkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0RSMF9QRkMwX1BDSTJSRVExX04JCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMzAJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0RSMF9QRkMwX1VBUlQxUlgJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0RSMF9QRkMwX0dQSU9fMzEJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0RSMF9QRkMwX1VBUlQxVFgJCTB4MDAwMDAwMDAKKworI2RlZmluZSBTRFIwX1BGQzEJCQkweDQxMDEKKyNkZWZpbmUgU0RSMF9QRkMxX1VBUlQxX0NUU19SVFNfTUFTSwkweDAyMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMV9VQVJUMV9EU1JfRFRSCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMV9VQVJUMV9DVFNfUlRTCQkweDAyMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMV9VQVJUMl9JTl9TRVJWSUNFX01BU0sJMHgwMTAwMDAwMAorI2RlZmluZSBTRFIwX1BGQzFfVUFSVDJfTk9UX0lOX1NFUlZJQ0UJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1BGQzFfVUFSVDJfSU5fU0VSVklDRQkweDAxMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMV9FVEhfR0lHQV9NQVNLCQkweDAwMjAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMV9FVEhfMTBfMTAwCQkweDAwMDAwMDAwCisjZGVmaW5lIFNEUjBfUEZDMV9FVEhfR0lHQQkJMHgwMDIwMDAwMAorI2RlZmluZSBTRFIwX1BGQzFfRVRIX0dJR0FfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgxKTw8MjEpCisjZGVmaW5lIFNEUjBfUEZDMV9FVEhfR0lHQV9ERUNPREUobikJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjEpJjB4MDEpCisjZGVmaW5lIFNEUjBfUEZDMV9DUFVfVFJBQ0VfTUFTSwkweDAwMTgwMDAwICAgLyogJDIxOEMgKi8KKyNkZWZpbmUgU0RSMF9QRkMxX0NQVV9OT19UUkFDRQkJMHgwMDAwMDAwMAorI2RlZmluZSBTRFIwX1BGQzFfQ1BVX1RSQUNFCQkweDAwMDgwMDAwCisjZGVmaW5lIFNEUjBfUEZDMV9DUFVfVFJBQ0VfRU5DT0RFKG4pCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgzKTw8MTkpICAgICAvKiAkMjE4QyAqLworI2RlZmluZSBTRFIwX1BGQzFfQ1BVX1RSQUNFX0RFQ09ERShuKQkoKCgodW5zaWduZWQgbG9uZykobikpPj4xOSkmMHgwMykgICAgLyogJDIxOEMgKi8KKworI2RlZmluZSBTRFIwX01GUgkJCTB4NDMwMAorI2VuZGlmCS8qIENPTkZJR180NDBTUEUJKi8KKworCiAjZGVmaW5lIFNEUjBfU0RDU19TREQJCQkoMHg4MDAwMDAwMCA+PiAzMSkKIAogI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdQKQpAQCAtOTkxLDcgKzI1OTYsOCBAQAogI2RlZmluZSBTRFIwX1NEU1RQMV9QQUVfTUFTSwkJKDB4ODAwMDAwMDAgPj4gMTMpCiAjZGVmaW5lIFNEUjBfU0RTVFAxX1BJU0VfTUFTSwkJKDB4ODAwMDAwMDAgPj4gMTUpCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNDQwR1gpIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQKSAqLwotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKICNkZWZpbmUgU0RSMF9TRFNUUDFfUEFFX01BU0sJCSgweDgwMDAwMDAwID4+IDIxKQogI2RlZmluZSBTRFIwX1NEU1RQMV9QQU1FX01BU0sJCSgweDgwMDAwMDAwID4+IDI3KQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgKi8KQEAgLTExMTksMTEgKzI3MjUsODEgQEAKICNkZWZpbmUgU0RSMF9NRlJfWk1JSV9NT0RFX0JJVDEgICAgICAweDAxMDAwMDAwICAgICAvKiBaTUlJIE1vZGUgQml0MSAqLwogI2RlZmluZSBTRFIwX01GUl9FUlJBVEEzX0VOMCAgICAgICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgU0RSMF9NRlJfRVJSQVRBM19FTjEgICAgICAgICAweDAwNDAwMDAwCisjaWYgZGVmaW5lZChDT05GSUdfNDQwR1gpIC8qIHRlc3Qtb25seTogb25seSA0NDBHWCBvciA0NDBTUEU/Pz8gKi8KICNkZWZpbmUgU0RSMF9NRlJfUEtUX1JFSl9NQVNLICAgICAgICAweDAwMzAwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIE1hc2sgKi8KICNkZWZpbmUgU0RSMF9NRlJfUEtUX1JFSl9FTiAgICAgICAgICAweDAwMzAwMDAwICAgLyogUGt0IFJlai4gRW5hYmxlIG9uIGJvdGggRU1BQzMgMC0xICovCiAjZGVmaW5lIFNEUjBfTUZSX1BLVF9SRUpfRU4wICAgICAgICAgMHgwMDIwMDAwMCAgIC8qIFBrdCBSZWouIEVuYWJsZSBvbiBFTUFDMygwKSAqLwogI2RlZmluZSBTRFIwX01GUl9QS1RfUkVKX0VOMSAgICAgICAgIDB4MDAxMDAwMDAgICAvKiBQa3QgUmVqLiBFbmFibGUgb24gRU1BQzMoMSkgKi8KICNkZWZpbmUgU0RSMF9NRlJfUEtUX1JFSl9QT0wgICAgICAgICAweDAwMDgwMDAwICAgLyogUGFja2V0IFJlamVjdCBQb2xhcml0eSAgICAgICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorI2RlZmluZSBTRFIwX1BGQzFfRVBTX0VOQ09ERShuKQkJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDA3KTw8MjIpCisjZGVmaW5lIFNEUjBfUEZDMV9FUFNfREVDT0RFKG4pCQkoKCgodW5zaWduZWQgbG9uZykobikpPj4yMikmMHgwNykKKyNkZWZpbmUgU0RSMF9QRkMyX0VQU19FTkNPREUobikJCSgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwNyk8PDI5KQorI2RlZmluZSBTRFIwX1BGQzJfRVBTX0RFQ09ERShuKQkJKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjkpJjB4MDcpCisjZW5kaWYKKworI2RlZmluZSBTRFIwX01GUl9FQ1NfTUFTSwkJMHgxMDAwMDAwMAorI2RlZmluZSBTRFIwX01GUl9FQ1NfSU5URVJOQUwJCTB4MTAwMDAwMDAKKworI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorI2RlZmluZSBTRFIwX1NSU1QwICAgICAgICAweDIwMAorI2RlZmluZSBTRFIwX1NSU1QwX0JHTyAgICAgICAgICAweDgwMDAwMDAwIC8qIFBMQiB0byBPUEIgYnJpZGdlICovCisjZGVmaW5lIFNEUjBfU1JTVDBfUExCNCAgICAgICAgIDB4NDAwMDAwMDAgLyogUExCNCBhcmJpdGVyICovCisjZGVmaW5lIFNEUjBfU1JTVDBfRUJDICAgICAgICAgIDB4MjAwMDAwMDAgLyogRXh0ZXJuYWwgYnVzIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMF9PUEIgICAgICAgICAgMHgxMDAwMDAwMCAvKiBPUEIgYXJiaXRlciAqLworI2RlZmluZSBTRFIwX1NSU1QwX1VBUlQwICAgICAgICAweDA4MDAwMDAwIC8qIFVuaXZlcnNhbCBhc3luY2hyb25vdXMgcmVjZWl2ZXIvdHJhbnNtaXR0ZXIgMCAqLworI2RlZmluZSBTRFIwX1NSU1QwX1VBUlQxICAgICAgICAweDA0MDAwMDAwIC8qIFVuaXZlcnNhbCBhc3luY2hyb25vdXMgcmVjZWl2ZXIvdHJhbnNtaXR0ZXIgMSAqLworI2RlZmluZSBTRFIwX1NSU1QwX0lJQzAgICAgICAgICAweDAyMDAwMDAwIC8qIEludGVyIGludGVncmF0ZWQgY2lyY3VpdCAwICovCisjZGVmaW5lIFNEUjBfU1JTVDBfVVNCMkggICAgICAgIDB4MDEwMDAwMDAgLyogVVNCMi4wIEhvc3QgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMF9HUElPICAgICAgICAgMHgwMDgwMDAwMCAvKiBHZW5lcmFsIHB1cnBvc2UgSS9PICovCisjZGVmaW5lIFNEUjBfU1JTVDBfR1BUICAgICAgICAgIDB4MDA0MDAwMDAgLyogR2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCisjZGVmaW5lIFNEUjBfU1JTVDBfRE1DICAgICAgICAgIDB4MDAyMDAwMDAgLyogRERSIFNEUkFNIG1lbW9yeSBjb250cm9sbGVyICovCisjZGVmaW5lIFNEUjBfU1JTVDBfUENJICAgICAgICAgIDB4MDAxMDAwMDAgLyogUENJICovCisjZGVmaW5lIFNEUjBfU1JTVDBfRU1BQzAgICAgICAgIDB4MDAwODAwMDAgLyogRXRoZXJuZXQgbWVkaWEgYWNjZXNzIGNvbnRyb2xsZXIgMCAqLworI2RlZmluZSBTRFIwX1NSU1QwX0VNQUMxICAgICAgICAweDAwMDQwMDAwIC8qIEV0aGVybmV0IG1lZGlhIGFjY2VzcyBjb250cm9sbGVyIDEgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMF9DUE0wICAgICAgICAgMHgwMDAyMDAwMCAvKiBDbG9jayBhbmQgcG93ZXIgbWFuYWdlbWVudCAqLworI2RlZmluZSBTRFIwX1NSU1QwX1pNSUkgICAgICAgICAweDAwMDEwMDAwIC8qIFpNSUkgYnJpZGdlICovCisjZGVmaW5lIFNEUjBfU1JTVDBfVUlDMCAgICAgICAgIDB4MDAwMDgwMDAgLyogVW5pdmVyc2FsIGludGVycnVwdCBjb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMF9VSUMxICAgICAgICAgMHgwMDAwNDAwMCAvKiBVbml2ZXJzYWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgMSAqLworI2RlZmluZSBTRFIwX1NSU1QwX0lJQzEgICAgICAgICAweDAwMDAyMDAwIC8qIEludGVyIGludGVncmF0ZWQgY2lyY3VpdCAxICovCisjZGVmaW5lIFNEUjBfU1JTVDBfU0NQICAgICAgICAgIDB4MDAwMDEwMDAgLyogU2VyaWFsIGNvbW11bmljYXRpb25zIHBvcnQgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMF9CR0kgICAgICAgICAgMHgwMDAwMDgwMCAvKiBPUEIgdG8gUExCIGJyaWRnZSAqLworI2RlZmluZSBTRFIwX1NSU1QwX0RNQSAgICAgICAgICAweDAwMDAwNDAwIC8qIERpcmVjdCBtZW1vcnkgYWNjZXNzIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMF9ETUFDICAgICAgICAgMHgwMDAwMDIwMCAvKiBETUEgY2hhbm5lbCAqLworI2RlZmluZSBTRFIwX1NSU1QwX01BTCAgICAgICAgICAweDAwMDAwMTAwIC8qIE1lZGlhIGFjY2VzcyBsYXllciAqLworI2RlZmluZSBTRFIwX1NSU1QwX1VTQjJEICAgICAgICAweDAwMDAwMDgwIC8qIFVTQjIuMCBkZXZpY2UgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMF9HUFRSICAgICAgICAgMHgwMDAwMDA0MCAvKiBHZW5lcmFsIHB1cnBvc2UgdGltZXIgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMF9QNFAzICAgICAgICAgMHgwMDAwMDAxMCAvKiBQTEI0IHRvIFBMQjMgYnJpZGdlICovCisjZGVmaW5lIFNEUjBfU1JTVDBfUDNQNCAgICAgICAgIDB4MDAwMDAwMDggLyogUExCMyB0byBQTEI0IGJyaWRnZSAqLworI2RlZmluZSBTRFIwX1NSU1QwX1BMQjMgICAgICAgICAweDAwMDAwMDA0IC8qIFBMQjMgYXJiaXRlciAqLworI2RlZmluZSBTRFIwX1NSU1QwX1VBUlQyICAgICAgICAweDAwMDAwMDAyIC8qIFVuaXZlcnNhbCBhc3luY2hyb25vdXMgcmVjZWl2ZXIvdHJhbnNtaXR0ZXIgMiAqLworI2RlZmluZSBTRFIwX1NSU1QwX1VBUlQzICAgICAgICAweDAwMDAwMDAxIC8qIFVuaXZlcnNhbCBhc3luY2hyb25vdXMgcmVjZWl2ZXIvdHJhbnNtaXR0ZXIgMyAqLworCisjZGVmaW5lIFNEUjBfU1JTVDEgICAgICAgIDB4MjAxCisjZGVmaW5lIFNEUjBfU1JTVDFfTkRGQyAgICAgICAgIDB4ODAwMDAwMDAgLyogTmFuZCBmbGFzaCBjb250cm9sbGVyICovCisjZGVmaW5lIFNEUjBfU1JTVDFfT1BCQTEgICAgICAgIDB4NDAwMDAwMDAgLyogT1BCIEFyYml0ZXIgYXR0YWNoZWQgdG8gUExCNCAqLworI2RlZmluZSBTRFIwX1NSU1QxX1A0T1BCMCAgICAgICAweDIwMDAwMDAwIC8qIFBMQjQgdG8gT1BCIEJyaWRnZTAgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMV9QTEI0Mk9QQjAgICAgU0RSMF9TUlNUMV9QNE9QQjAKKyNkZWZpbmUgU0RSMF9TUlNUMV9ETUE0ICAgICAgICAgMHgxMDAwMDAwMCAvKiBETUEgdG8gUExCNCAqLworI2RlZmluZSBTRFIwX1NSU1QxX0RNQTRDSCAgICAgICAweDA4MDAwMDAwIC8qIERNQSBDaGFubmVsIHRvIFBMQjQgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMV9PUEJBMiAgICAgICAgMHgwNDAwMDAwMCAvKiBPUEIgQXJiaXRlciBhdHRhY2hlZCB0byBQTEI0IFVTQiAyLjAgSG9zdCAqLworI2RlZmluZSBTRFIwX1NSU1QxX09QQjJQTEI0MCAgICAweDAyMDAwMDAwIC8qIE9QQiB0byBQTEI0IEJyaWRnZSBhdHRhY2hlZCB0byBVU0IgMi4wIEhvc3QgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMV9QTEI0Mk9QQjEgICAgMHgwMTAwMDAwMCAvKiBQTEI0IHRvIE9QQiBCcmlkZ2UgYXR0YWNoZWQgdG8gVVNCIDIuMCBIb3N0ICovCisjZGVmaW5lIFNEUjBfU1JTVDFfQ1BNMSAgICAgICAgIDB4MDA4MDAwMDAgLyogQ2xvY2sgYW5kIFBvd2VyIG1hbmFnZW1lbnQgMSAqLworI2RlZmluZSBTRFIwX1NSU1QxX1VJQzIgICAgICAgICAweDAwNDAwMDAwIC8qIFVuaXZlcnNhbCBJbnRlcnJ1cHQgQ29udHJvbGxlciAyICovCisjZGVmaW5lIFNEUjBfU1JTVDFfQ1JZUDAgICAgICAgIDB4MDAyMDAwMDAgLyogU2VjdXJpdHkgRW5naW5lICovCisjZGVmaW5lIFNEUjBfU1JTVDFfVVNCMjBQSFkgICAgIDB4MDAxMDAwMDAgLyogVVNCIDIuMCBQaHkgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMV9VU0IySFVUTUkgICAgMHgwMDA4MDAwMCAvKiBVU0IgMi4wIEhvc3QgVVRNSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMV9VU0IySFBIWSAgICAgMHgwMDA0MDAwMCAvKiBVU0IgMi4wIEhvc3QgUGh5IEludGVyZmFjZSAqLworI2RlZmluZSBTRFIwX1NSU1QxX1NSQU0wICAgICAgICAweDAwMDIwMDAwIC8qIEludGVybmFsIFNSQU0gQ29udHJvbGxlciAqLworI2RlZmluZSBTRFIwX1NSU1QxX1JHTUlJMCAgICAgICAweDAwMDEwMDAwIC8qIFJHTUlJIEJyaWRnZSAqLworI2RlZmluZSBTRFIwX1NSU1QxX0VUSFBMTCAgICAgICAweDAwMDA4MDAwIC8qIEV0aGVybmV0IFBMTCAqLworI2RlZmluZSBTRFIwX1NSU1QxX0ZQVSAgICAgICAgICAweDAwMDA0MDAwIC8qIEZsb2F0aW5nIFBvaW50IFVuaXQgKi8KKyNkZWZpbmUgU0RSMF9TUlNUMV9LQVNVMCAgICAgICAgMHgwMDAwMjAwMCAvKiBLYXN1bWkgRW5naW5lICovCisKKyNlbHNlCiAKICNkZWZpbmUgU0RSMF9TUlNUX0JHTwkJCTB4ODAwMDAwMDAKICNkZWZpbmUgU0RSMF9TUlNUX1BMQgkJCTB4NDAwMDAwMDAKQEAgLTExNTYsMTAgKzI4MzIsMTUgQEAKICNkZWZpbmUgU0RSMF9TUlNUX0VNQUMzCQkJMHgwMDAwMDAwOAogI2RlZmluZSBTRFIwX1NSU1RfUkdNSUkJCQkweDAwMDAwMDAxCiAKKyNlbmRpZgorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAgQ2xvY2tpbmcKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jaWYgIWRlZmluZWQgKENPTkZJR180NDBHWCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MEVQKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1IpICYmICFkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiAhZGVmaW5lZCAoQ09ORklHXzQ0MEdYKSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHXzQ0MEVQKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1IpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfNDQwRVBYKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwR1JYKSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHXzQ0MFNQKSAmJiAhZGVmaW5lZChDT05GSUdfNDQwU1BFKQogI2RlZmluZSBQTExTWVMwX1RVTkVfTUFTSwkweGZmYzAwMDAwCS8qIFBMTCBUVU5FIGJpdHMJICAgICovCiAjZGVmaW5lIFBMTFNZUzBfRkJfRElWX01BU0sJMHgwMDNjMDAwMAkvKiBGZWVkYmFjayBkaXZpc29yCSAgICAqLwogI2RlZmluZSBQTExTWVMwX0ZXRF9ESVZfQV9NQVNLCTB4MDAwMzgwMDAJLyogRm9yd2FyZCBkaXZpc29yIEEJICAgICovCkBAIC0xMjI3LDYgKzI5MDgsMTIwIEBACiAjZGVmaW5lIFBMTFNZUzFfTlRPMV9NQVNLCTB4MDAwMDAwMDEJLyogQ1BVOlBMQiBOLXRvLTEgcmF0aW8gKi8KICNlbmRpZiAvKiBDT05GSUdfNDQwR1ggKi8KIAorI2lmIGRlZmluZWQgKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQgKENPTkZJR180NDBHUlgpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1BSMF9QTExDICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgICBDUFIwX1BMTENfUlNUX01BU0sgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1BMTENfUlNUX1BMTExPQ0tFRCAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1BMTENfUlNUX1BMTFJFU0VUICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1BMTENfRU5HX01BU0sgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1BMTENfRU5HX0RJU0FCTEUgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1BMTENfRU5HX0VOQUJMRSAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1BMTENfRU5HX0VOQ09ERShuKSAgICAgICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMSk8PDMwKQorI2RlZmluZSAgIENQUjBfUExMQ19FTkdfREVDT0RFKG4pICAgICAgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MzApJjB4MDEpCisjZGVmaW5lICAgQ1BSMF9QTExDX1NSQ19NQVNLICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lICAgQ1BSMF9QTExDX1NSQ19QTExPVVRBICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lICAgQ1BSMF9QTExDX1NSQ19QTExPVVRCICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lICAgQ1BSMF9QTExDX1NSQ19FTkNPREUobikgICAgICAoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDEpPDwyOSkKKyNkZWZpbmUgICBDUFIwX1BMTENfU1JDX0RFQ09ERShuKSAgICAgICgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjI5KSYweDAxKQorI2RlZmluZSAgIENQUjBfUExMQ19TRUxfTUFTSyAgICAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSAgIENQUjBfUExMQ19TRUxfUExMICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSAgIENQUjBfUExMQ19TRUxfQ1BVICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSAgIENQUjBfUExMQ19TRUxfUEVSICAgICAgICAgICAgMHgwNTAwMDAwMAorI2RlZmluZSAgIENQUjBfUExMQ19TRUxfRU5DT0RFKG4pICAgICAgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDA3KTw8MjQpCisjZGVmaW5lICAgQ1BSMF9QTExDX1NFTF9ERUNPREUobikgICAgICAoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCkmMHgwNykKKyNkZWZpbmUgICBDUFIwX1BMTENfVFVORV9NQVNLICAgICAgICAgIDB4MDAwMDAzRkYKKyNkZWZpbmUgICBDUFIwX1BMTENfVFVORV9FTkNPREUobikgICAgICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgzRkYpPDwwKQorI2RlZmluZSAgIENQUjBfUExMQ19UVU5FX0RFQ09ERShuKSAgICAgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MCkmMHgzRkYpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1BSMF9QTExEICAgICAgICAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgICBDUFIwX1BMTERfRkJEVl9NQVNLICAgICAgICAgIDB4MUYwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1BMTERfRkJEVl9FTkNPREUobikgICAgICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgxRik8PDI0KQorI2RlZmluZSAgIENQUjBfUExMRF9GQkRWX0RFQ09ERShuKSAgICAgKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCktMSkmMHgxRikrMSkKKyNkZWZpbmUgICBDUFIwX1BMTERfRldEVkFfTUFTSyAgICAgICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgICBDUFIwX1BMTERfRldEVkFfRU5DT0RFKG4pICAgICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwRik8PDE2KQorI2RlZmluZSAgIENQUjBfUExMRF9GV0RWQV9ERUNPREUobikgICAgKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4xNiktMSkmMHgwRikrMSkKKyNkZWZpbmUgICBDUFIwX1BMTERfRldEVkJfTUFTSyAgICAgICAgIDB4MDAwMDA3MDAKKyNkZWZpbmUgICBDUFIwX1BMTERfRldEVkJfRU5DT0RFKG4pICAgICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwNyk8PDgpCisjZGVmaW5lICAgQ1BSMF9QTExEX0ZXRFZCX0RFQ09ERShuKSAgICAoKCgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjgpLTEpJjB4MDcpKzEpCisjZGVmaW5lICAgQ1BSMF9QTExEX0xGQkRWX01BU0sgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lICAgQ1BSMF9QTExEX0xGQkRWX0VOQ09ERShuKSAgICAoKCgodW5zaWduZWQgbG9uZykobikpJjB4M0YpPDwwKQorI2RlZmluZSAgIENQUjBfUExMRF9MRkJEVl9ERUNPREUobikgICAgKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4wKS0xKSYweDNGKSsxKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENQUjBfUFJJTUFEICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lICAgQ1BSMF9QUklNQURfUFJBRFYwX01BU0sgICAgICAweDA3MDAwMDAwCisjZGVmaW5lICAgQ1BSMF9QUklNQURfUFJBRFYwX0VOQ09ERShuKSAoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDcpPDwyNCkKKyNkZWZpbmUgICBDUFIwX1BSSU1BRF9QUkFEVjBfREVDT0RFKG4pICgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjQpLTEpJjB4MDcpKzEpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1BSMF9QUklNQkQgICAgICAgICAgICAgICAgIDB4QTAKKyNkZWZpbmUgICBDUFIwX1BSSU1CRF9QUkJEVjBfTUFTSyAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1BSSU1CRF9QUkJEVjBfRU5DT0RFKG4pICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwNyk8PDI0KQorI2RlZmluZSAgIENQUjBfUFJJTUJEX1BSQkRWMF9ERUNPREUobikgKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCktMSkmMHgwNykrMSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIDAKKyNkZWZpbmUgQ1BSMF9DUE0wX0VSICAgICAgICAgICAgICAgIDB4QjAgICAgLyogQ1BNIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBDUFIwX0NQTTBfRlIgICAgICAgICAgICAgICAgMHhCMSAgICAvKiBDUE0gRm9yY2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX1NSICAgICAgICAgICAgICAgIDB4QjIgICAgLyogQ1BNIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBDUFIwX0NQTTBfSUlDMCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAgICAgLyogSW50ZXItSW50ZXJncmF0ZWQgQ2lyY3VpdDAgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX0lJQzEgICAgICAgICAgICAgICAweDQwMDAwMDAwICAgIC8qIEludGVyLUludGVyZ3JhdGVkIENpcmN1aXQxICovCisjZGVmaW5lIENQUjBfQ1BNMF9QQ0kgICAgICAgICAgICAgICAgMHgyMDAwMDAwMCAgICAvKiBQZXJpcGhlcmFsIENvbXBvbmVudCBJbnRlcmNvbm5lY3QgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX1VTQjFIICAgICAgICAgICAgICAweDA4MDAwMDAwICAgIC8qIFVTQjEuMSBIb3N0ICovCisjZGVmaW5lIENQUjBfQ1BNMF9GUFUgICAgICAgICAgICAgICAgMHgwNDAwMDAwMCAgICAvKiBQUEM0NDAgRlBVICovCisjZGVmaW5lIENQUjBfQ1BNMF9DUFUgICAgICAgICAgICAgICAgMHgwMjAwMDAwMCAgICAvKiBQUEM0NDB4NSBQcm9jZXNzb3IgQ29yZSAqLworI2RlZmluZSBDUFIwX0NQTTBfRE1BICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAgICAgLyogRGlyZWN0IE1lbW9yeSBBY2Nlc3MgQ29udHJvbGxlciAqLworI2RlZmluZSBDUFIwX0NQTTBfQkdPICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAgICAgLyogUExCIHRvIE9QQiBCcmlkZ2UgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX0JHSSAgICAgICAgICAgICAgICAweDAwNDAwMDAwICAgIC8qIE9QQiB0byBQTEIgQnJpZGdlICovCisjZGVmaW5lIENQUjBfQ1BNMF9FQkMgICAgICAgICAgICAgICAgMHgwMDIwMDAwMCAgICAvKiBFeHRlcm5hbCBCdXMgQ29udHJvbGxlciAqLworI2RlZmluZSBDUFIwX0NQTTBfTkRGQyAgICAgICAgICAgICAgIDB4MDAxMDAwMDAgICAgLyogTmFuZCBGbGFzaCBDb250cm9sbGVyICovCisjZGVmaW5lIENQUjBfQ1BNMF9NQURNQUwgICAgICAgICAgICAgMHgwMDA4MDAwMCAgICAvKiBERFIgU0RSQU0gQ29udHJvbGxlciBvciBNQURNQUwgPz8/ICovCisjZGVmaW5lIENQUjBfQ1BNMF9ETUMgICAgICAgICAgICAgICAgMHgwMDA4MDAwMCAgICAvKiBERFIgU0RSQU0gQ29udHJvbGxlciBvciBNQURNQUwgPz8/ICovCisjZGVmaW5lIENQUjBfQ1BNMF9QTEI0ICAgICAgICAgICAgICAgMHgwMDA0MDAwMCAgICAvKiBQTEI0IEFyYml0ZXIgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX1BMQjR4M3ggICAgICAgICAgICAweDAwMDIwMDAwICAgIC8qIFBMQjQgdG8gUExCMyAqLworI2RlZmluZSBDUFIwX0NQTTBfUExCM3g0eCAgICAgICAgICAgIDB4MDAwMTAwMDAgICAgLyogUExCMyB0byBQTEI0ICovCisjZGVmaW5lIENQUjBfQ1BNMF9QTEIzICAgICAgICAgICAgICAgMHgwMDAwODAwMCAgICAvKiBQTEIzIEFyYml0ZXIgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX1BQTSAgICAgICAgICAgICAgICAweDAwMDAyMDAwICAgIC8qIFBMQiBQZXJmb3JtYW5jZSBNb25pdG9yICovCisjZGVmaW5lIENQUjBfQ1BNMF9VSUMxICAgICAgICAgICAgICAgMHgwMDAwMTAwMCAgICAvKiBVbml2ZXJzYWwgSW50ZXJydXB0IENvbnRyb2xsZXIgMSAqLworI2RlZmluZSBDUFIwX0NQTTBfR1BJTyAgICAgICAgICAgICAgIDB4MDAwMDA4MDAgICAgLyogR2VuZXJhbCBQdXJwb3NlIElPICovCisjZGVmaW5lIENQUjBfQ1BNMF9HUFQgICAgICAgICAgICAgICAgMHgwMDAwMDQwMCAgICAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX1VBUlQwICAgICAgICAgICAgICAweDAwMDAwMjAwICAgIC8qIFVuaXZlcnNhbCBBc3luY2hyb25vdXMgUmN2ZXIvWG1pdHRlciAwICovCisjZGVmaW5lIENQUjBfQ1BNMF9VQVJUMSAgICAgICAgICAgICAgMHgwMDAwMDEwMCAgICAvKiBVbml2ZXJzYWwgQXN5bmNocm9ub3VzIFJjdmVyL1htaXR0ZXIgMSAqLworI2RlZmluZSBDUFIwX0NQTTBfVUlDMCAgICAgICAgICAgICAgIDB4MDAwMDAwODAgICAgLyogVW5pdmVyc2FsIEludGVycnVwdCBDb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX1RNUkNMSyAgICAgICAgICAgICAweDAwMDAwMDQwICAgIC8qIENQVSBUaW1lciAqLworI2RlZmluZSBDUFIwX0NQTTBfRU1DMCAgICAgICAgICAgICAgIDB4MDAwMDAwMjAgICAgLyogRXRoZXJuZXQgMCAqLworI2RlZmluZSBDUFIwX0NQTTBfRU1DMSAgICAgICAgICAgICAgIDB4MDAwMDAwMTAgICAgLyogRXRoZXJuZXQgMSAqLworI2RlZmluZSBDUFIwX0NQTTBfVUFSVDIgICAgICAgICAgICAgIDB4MDAwMDAwMDggICAgLyogVW5pdmVyc2FsIEFzeW5jaHJvbm91cyBSY3Zlci9YbWl0dGVyIDIgKi8KKyNkZWZpbmUgQ1BSMF9DUE0wX1VBUlQzICAgICAgICAgICAgICAweDAwMDAwMDA0ICAgIC8qIFVuaXZlcnNhbCBBc3luY2hyb25vdXMgUmN2ZXIvWG1pdHRlciAzICovCisjZGVmaW5lIENQUjBfQ1BNMF9VU0IyRCAgICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAvKiBVU0IyLjAgRGV2aWNlICovCisjZGVmaW5lIENQUjBfQ1BNMF9VU0IySCAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgICAvKiBVU0IyLjAgSG9zdCAqLworI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1BSMF9PUEJEICAgICAgICAgICAgICAgICAgIDB4QzAKKyNkZWZpbmUgICBDUFIwX09QQkRfT1BCRFYwX01BU0sgICAgICAgIDB4MDMwMDAwMDAKKyNkZWZpbmUgICBDUFIwX09QQkRfT1BCRFYwX0VOQ09ERShuKSAgICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMyk8PDI0KQorI2RlZmluZSAgIENQUjBfT1BCRF9PUEJEVjBfREVDT0RFKG4pICAgKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCktMSkmMHgwMykrMSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDUFIwX1BFUkQgICAgICAgICAgICAgICAgICAgMHhFMAorI2RlZmluZSAgIENQUjBfUEVSRF9QRVJEVjBfTUFTSyAgICAgICAgMHgwNzAwMDAwMAorI2RlZmluZSAgIENQUjBfUEVSRF9QRVJEVjBfRU5DT0RFKG4pICAgKCgoKHVuc2lnbmVkIGxvbmcpKG4pKSYweDA3KTw8MjQpCisjZGVmaW5lICAgQ1BSMF9QRVJEX1BFUkRWMF9ERUNPREUobikgICAoKCgoKCh1bnNpZ25lZCBsb25nKShuKSk+PjI0KS0xKSYweDA3KSsxKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENQUjBfTUFMRCAgICAgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lICAgQ1BSMF9NQUxEX01BTERWMF9NQVNLICAgICAgICAweDAzMDAwMDAwCisjZGVmaW5lICAgQ1BSMF9NQUxEX01BTERWMF9FTkNPREUobikgICAoKCgodW5zaWduZWQgbG9uZykobikpJjB4MDMpPDwyNCkKKyNkZWZpbmUgICBDUFIwX01BTERfTUFMRFYwX0RFQ09ERShuKSAgICgoKCgoKHVuc2lnbmVkIGxvbmcpKG4pKT4+MjQpLTEpJjB4MDMpKzEpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1BSMF9TUENJRCAgICAgICAgICAgICAgICAgMHgxMjAKKyNkZWZpbmUgICBDUFIwX1NQQ0lEX1NQQ0lEVjBfTUFTSyAgICAgIDB4MDMwMDAwMDAKKyNkZWZpbmUgICBDUFIwX1NQQ0lEX1NQQ0lEVjBfRU5DT0RFKG4pICgoKCh1bnNpZ25lZCBsb25nKShuKSkmMHgwMyk8PDI0KQorI2RlZmluZSAgIENQUjBfU1BDSURfU1BDSURWMF9ERUNPREUobikgKCgoKCgodW5zaWduZWQgbG9uZykobikpPj4yNCktMSkmMHgwMykrMSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDUFIwX0lDRkcgICAgICAgICAgICAgICAgICAweDE0MAorI2RlZmluZSAgIENQUjBfSUNGR19STElfTUFTSyAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSAgIENQUjBfSUNGR19STElfUkVTRVRDUFIgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSAgIENQUjBfSUNGR19STElfUFJFU0VSVkVDUFIgICAgMHg4MDAwMDAwMAorI2RlZmluZSAgIENQUjBfSUNGR19JQ1NfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwNworI2VuZGlmIC8qIGRlZmluZWQgKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQgKENPTkZJR180NDBHUlgpICovCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHwgSUlDIFJlZ2lzdGVyIE9mZnNldHMKICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyNjgsNyArMzA2Myw4IEBACiAjZGVmaW5lIFBDSVgwX0NGR0JBU0UJCShDRkdfUENJX0JBU0UgKyAweDBlYzgwMDAwKQogI2RlZmluZSBQQ0lYMF9JT0JBU0UJCShDRkdfUENJX0JBU0UgKyAweDA4MDAwMDAwKQogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQogCiAvKiBQQ0kgTG9jYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTM1NCw2ICszMTUwLDMzIEBACiAKICNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfNDQwRVApICFkZWZpbmVkKENPTkZJR180NDBHUikgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorCisvKiBVU0IyLjAgRGV2aWNlICovCisjZGVmaW5lIFVTQjJEMF9CQVNFICAgICAgICAgQ0ZHX1VTQjJEMF9CQVNFCisKKyNkZWZpbmUgVVNCMkQwX0lOVFJJTiAgICAgICAoVVNCMkQwX0JBU0UgKyAweDAwMDAwMDAwKQorCisjZGVmaW5lIFVTQjJEMF9JTlRSSU4gICAgICAgKFVTQjJEMF9CQVNFICsgMHgwMDAwMDAwMCkgLyogSW50ZXJydXB0IHJlZ2lzdGVyIGZvciBFbmRwb2ludCAwIHBsdXMgSU4gRW5kcG9pbnRzIDEgdG8gMyAqLworI2RlZmluZSBVU0IyRDBfUE9XRVIgICAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIFBvd2VyIG1hbmFnZW1lbnQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCMkQwX0ZBRERSICAgICAgICAoVVNCMkQwX0JBU0UgKyAweDAwMDAwMDAwKSAvKiBGdW5jdGlvbiBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQjJEMF9JTlRSSU5FICAgICAgKFVTQjJEMF9CQVNFICsgMHgwMDAwMDAwMCkgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgVVNCMkQwX0lOVFJJTiAqLworI2RlZmluZSBVU0IyRDBfSU5UUk9VVCAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgT1VUIEVuZHBvaW50cyAxIHRvIDMgKi8KKyNkZWZpbmUgVVNCMkQwX0lOVFJVU0JFICAgICAoVVNCMkQwX0JBU0UgKyAweDAwMDAwMDAwKSAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIGZvciBVU0IyRDBfSU5UUlVTQiAqLworI2RlZmluZSBVU0IyRDBfSU5UUlVTQiAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIEludGVycnVwdCByZWdpc3RlciBmb3IgY29tbW9uIFVTQiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFVTQjJEMF9JTlRST1VURSAgICAgKFVTQjJEMF9CQVNFICsgMHgwMDAwMDAwMCkgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBmb3IgSW50ck91dCAqLworI2RlZmluZSBVU0IyRDBfVFNUTU9ERSAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIEVuYWJsZXMgdGhlIFVTQiAyLjAgdGVzdCBtb2RlcyAqLworI2RlZmluZSBVU0IyRDBfSU5ERVggICAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIEluZGV4IHJlZ2lzdGVyIGZvciBzZWxlY3RpbmcgdGhlIEVuZHBvaW50IHN0YXR1cy9jb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0IyRDBfRlJBTUUgICAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIEZyYW1lIG51bWJlciAqLworI2RlZmluZSBVU0IyRDBfSU5DU1IwICAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBFbmRwb2ludCAwLiAoSW5kZXggcmVnaXN0ZXIgc2V0IHRvIHNlbGVjdCBFbmRwb2ludCAwKSAqLworI2RlZmluZSBVU0IyRDBfSU5DU1IgICAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIENvbnRyb2wgU3RhdHVzIHJlZ2lzdGVyIGZvciBJTiBFbmRwb2ludC4gKEluZGV4IHJlZ2lzdGVyIHNldCB0byBzZWxlY3QgRW5kcG9pbnRzIDEzKSAqLworI2RlZmluZSBVU0IyRDBfSU5NQVhQICAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIElOIEVuZHBvaW50LiAoSW5kZXggcmVnaXN0ZXIgc2V0IHRvIHNlbGVjdCBFbmRwb2ludHMgMTMpICovCisjZGVmaW5lIFVTQjJEMF9PVVRDU1IgICAgICAgKFVTQjJEMF9CQVNFICsgMHgwMDAwMDAwMCkgLyogQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgZm9yIE9VVCBFbmRwb2ludC4gKEluZGV4IHJlZ2lzdGVyIHNldCB0byBzZWxlY3QgRW5kcG9pbnRzIDEzKSAqLworI2RlZmluZSBVU0IyRDBfT1VUTUFYUCAgICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIE1heGltdW0gcGFja2V0IHNpemUgZm9yIE9VVCBFbmRwb2ludC4gKEluZGV4IHJlZ2lzdGVyIHNldCB0byBzZWxlY3QgRW5kcG9pbnRzIDEzKSAqLworI2RlZmluZSBVU0IyRDBfT1VUQ09VTlQwICAgIChVU0IyRDBfQkFTRSArIDB4MDAwMDAwMDApIC8qIE51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpbiBFbmRwb2ludCAwIEZJRk8uIChJbmRleCByZWdpc3RlciBzZXQgdG8gc2VsZWN0IEVuZHBvaW50IDApICovCisjZGVmaW5lIFVTQjJEMF9PVVRDT1VOVCAgICAgKFVTQjJEMF9CQVNFICsgMHgwMDAwMDAwMCkgLyogTnVtYmVyIG9mIGJ5dGVzIGluIE9VVCBFbmRwb2ludCBGSUZPLiAoSW5kZXggcmVnaXN0ZXIgc2V0IHRvIHNlbGVjdCBFbmRwb2ludHMgMTMpICovCisjZW5kaWYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR1BJTyBtYWNybyByZWdpc3RlciBkZWZpbmVzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTM2OSw3ICszMTkyLDggQEAKICNkZWZpbmUgR1BJTzBfSVIgICAgICAgICAgICAgICAoR1BJTzBfQkFTRSsweDFDKQogI2VuZGlmIC8qIENPTkZJR180NDBHUCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKQorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQogI2RlZmluZSBHUElPMF9CQVNFICAgICAgICAgICAgIChDRkdfUEVSSVBIRVJBTF9CQVNFKzB4MDAwMDBCMDApCiAjZGVmaW5lIEdQSU8xX0JBU0UgICAgICAgICAgICAgKENGR19QRVJJUEhFUkFMX0JBU0UrMHgwMDAwMEMwMCkKIApAQCAtMTQ5OCw2ICszMzIyLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZyZXFPUEI7CiAJdW5zaWduZWQgbG9uZyBmcmVxRVBCOwogCXVuc2lnbmVkIGxvbmcgZnJlcVBDSTsKKyNpZmRlZiBDT05GSUdfNDQwU1BFCisJdW5zaWduZWQgbG9uZyBmcmVxRERSOworI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBwY2lJbnRBcmJFbjsgICAgICAgICAgICAvKiBJbnRlcm5hbCBQQ0kgYXJiaXRlciBpcyBlbmFibGVkICovCiAJdW5zaWduZWQgbG9uZyBwY2lDbGtTeW5jOyAgICAgICAgICAgICAvKiBQQ0kgY2xvY2sgaXMgc3luY2hyb25vdXMgICAgICAgICovCiB9IFBQQzQ0MF9TWVNfSU5GTzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHBjNHh4X2VuZXQuaCBiL2luY2x1ZGUvcHBjNHh4X2VuZXQuaAppbmRleCBkNmQzM2I2Li40M2M1Y2E0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BwYzR4eF9lbmV0LmgKKysrIGIvaW5jbHVkZS9wcGM0eHhfZW5ldC5oCkBAIC0xMzMsMTUgKzEzMywyNiBAQAogI2RlZmluZSBFTUFDX05VTV9ERVYJICAgIDQKICNlbGlmIChkZWZpbmVkKENPTkZJR180NDApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKSkgJiYJXAogCWRlZmluZWQoQ09ORklHX05FVF9NVUxUSSkgJiYJCQlcCi0JIWRlZmluZWQoQ09ORklHXzQ0MFNQKQorCSFkZWZpbmVkKENPTkZJR180NDBTUCkgJiYgIWRlZmluZWQoQ09ORklHXzQ0MFNQRSkKICNkZWZpbmUgRU1BQ19OVU1fREVWCSAgICAyCiAjZWxzZQogI2RlZmluZSBFTUFDX05VTV9ERVYJICAgIDEKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0lCTV9FTUFDNF9WNAkvKiBFTUFDNCBWNCBjaGFuZ2VkIGJpdCBzZXR0aW5nICovCisjZGVmaW5lIEVNQUNfU1RBQ1JfT0NfTUFTSwkoMHgwMDAwODAwMCkKKyNlbHNlCisjZGVmaW5lIEVNQUNfU1RBQ1JfT0NfTUFTSwkoMHgwMDAwMDAwMCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfNDQwU1ApIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorI2RlZmluZSBTRFIwX1BGQzFfRU1fMTAwMAkoMHgwMDIwMDAwMCkKKyNlbmRpZgogCiAvKlpNSUkgQnJpZGdlIFJlZ2lzdGVyIGFkZHJlc3NlcyAqLwotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKICNkZWZpbmUgWk1JSV9CQVNFCQkJKENGR19QRVJJUEhFUkFMX0JBU0UgKyAweDBEMDApCiAjZWxzZQogI2RlZmluZSBaTUlJX0JBU0UJCQkoQ0ZHX1BFUklQSEVSQUxfQkFTRSArIDB4MDc4MCkKQEAgLTE1NCw2ICsxNjUsNyBAQAogI2RlZmluZSBaTUlJX01ESTAJCQkweDgwMDAwMDAwCiAKIC8qIFpNSUkgRkVSIFJlZ2lzdGVyIEJpdCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBaTUlJX0ZFUl9ESVMJCSgweDApCiAjZGVmaW5lIFpNSUlfRkVSX01ESQkJKDB4OCkKICNkZWZpbmUgWk1JSV9GRVJfU01JSQkJKDB4NCkKICNkZWZpbmUgWk1JSV9GRVJfUk1JSQkJKDB4MikKQEAgLTE4OCw3ICsyMDAsMTEgQEAKICNkZWZpbmUgWk1JSV9TTUlJU1JfVihfX3gpCSgoMyAtIF9feCkgKiA4KQogCiAvKiBSR01JSSBSZWdpc3RlciBBZGRyZXNzZXMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKKyNkZWZpbmUgUkdNSUlfQkFTRQkJKENGR19QRVJJUEhFUkFMX0JBU0UgKyAweDEwMDApCisjZWxzZQogI2RlZmluZSBSR01JSV9CQVNFCQkoQ0ZHX1BFUklQSEVSQUxfQkFTRSArIDB4MDc5MCkKKyNlbmRpZgogI2RlZmluZSBSR01JSV9GRVIJCShSR01JSV9CQVNFICsgMHgwMCkKICNkZWZpbmUgUkdNSUlfU1NSCQkoUkdNSUlfQkFTRSArIDB4MDQpCiAKQEAgLTIwNyw3ICsyMjMsMTEgQEAKICNkZWZpbmUgUkdNSUlfU1NSX1NQXzEwME1CUFMJKDB4MDIpCiAjZGVmaW5lIFJHTUlJX1NTUl9TUF8xMDAwTUJQUwkoMHgwNCkKIAorI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKQorI2RlZmluZSBSR01JSV9TU1JfVihfX3gpCSgoX194KSAqIDgpCisjZWxzZQogI2RlZmluZSBSR01JSV9TU1JfVihfX3gpCSgoX194IC0yKSAqIDgpCisjZW5kaWYKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTI3Nyw3ICsyOTcsOCBAQAogCiAvKiBFdGhlcm5ldCBNQUMgUmVnc2l0ZXIgQWRkcmVzc2VzICovCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEVQKSB8fCBkZWZpbmVkKENPTkZJR180NDBHUikKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NDBFUFgpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKICNkZWZpbmUgRU1BQ19CQVNFCQkJICAgIChDRkdfUEVSSVBIRVJBTF9CQVNFICsgMHgwRTAwKQogI2Vsc2UKICNkZWZpbmUgRU1BQ19CQVNFCQkJICAgIChDRkdfUEVSSVBIRVJBTF9CQVNFICsgMHgwODAwKQpAQCAtMzIzLDcgKzM0NCw5IEBACiAjZGVmaW5lIEVNQUNfTTBfV0tFCQkJICAgICgweDA0MDAwMDAwKQogCiAvKiBvbiA0NDBHWCBFTUFDX01SMSBoYXMgYSBkaWZmZXJlbnQgbGF5b3V0ISAqLwotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHXzQ0MEVQWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1JYKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwU1ApIHx8IGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKIC8qIE1PREUgUmVnIDEgKi8KICNkZWZpbmUgRU1BQ19NMV9GREUJCSgweDgwMDAwMDAwKQogI2RlZmluZSBFTUFDX00xX0lMRQkJKDB4NDAwMDAwMDApCkBAIC00MjQsOCArNDQ3LDIxIEBACiAvKiBTVEEgQ09OVFJPTCBSRUcgKi8KICNkZWZpbmUgRU1BQ19TVEFDUl9PQwkJCSgweDAwMDA4MDAwKQogI2RlZmluZSBFTUFDX1NUQUNSX1BIWUUJCQkoMHgwMDAwNDAwMCkKKworI2lmZGVmIENPTkZJR19JQk1fRU1BQzRfVjQJLyogRU1BQzQgVjQgY2hhbmdlZCBiaXQgc2V0dGluZyAqLworI2RlZmluZSBFTUFDX1NUQUNSX0lORElSRUNUX01PREUJKDB4MDAwMDIwMDApCisjZGVmaW5lIEVNQUNfU1RBQ1JfV1JJVEUJCSgweDAwMDAwODAwKSAvKiAkQlVDICovCisjZGVmaW5lIEVNQUNfU1RBQ1JfUkVBRAkJCSgweDAwMDAxMDAwKSAvKiAkQlVDICovCisjZGVmaW5lIEVNQUNfU1RBQ1JfT1BfTUFTSwkJKDB4MDAwMDE4MDApCisjZGVmaW5lIEVNQUNfU1RBQ1JfTURJT19BRERSCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRU1BQ19TVEFDUl9NRElPX1dSSVRFCQkoMHgwMDAwMDgwMCkKKyNkZWZpbmUgRU1BQ19TVEFDUl9NRElPX1JFQUQJCSgweDAwMDAxODAwKQorI2RlZmluZSBFTUFDX1NUQUNSX01ESU9fUkVBRF9JTkMJKDB4MDAwMDEwMDApCisjZWxzZQogI2RlZmluZSBFTUFDX1NUQUNSX1dSSVRFCQkoMHgwMDAwMjAwMCkKICNkZWZpbmUgRU1BQ19TVEFDUl9SRUFECQkJKDB4MDAwMDEwMDApCisjZW5kaWYKKwogI2RlZmluZSBFTUFDX1NUQUNSX0NMS184M01IWgkoMHgwMDAwMDgwMCkgIC8qIDAncyBmb3IgNTBNaHogKi8KICNkZWZpbmUgRU1BQ19TVEFDUl9DTEtfNjZNSFoJKDB4MDAwMDA0MDApCiAjZGVmaW5lIEVNQUNfU1RBQ1JfQ0xLXzEwME1IWgkoMHgwMDAwMEMwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHBjX2FzbS50bXBsIGIvaW5jbHVkZS9wcGNfYXNtLnRtcGwKaW5kZXggNzJkNjkwZS4uM2U0N2U4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wcGNfYXNtLnRtcGwKKysrIGIvaW5jbHVkZS9wcGNfYXNtLnRtcGwKQEAgLTMxMiw3ICszMTIsNyBAQAogCWx3eiAgICAgcjMsR09UKHRyYW5zZmVyX3RvX2hhbmRsZXIpOyAgICAgICAgICAgIFwKIAltdGxyICAgIHIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJYWRkaSAgICByMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsgICAgICAgICAgICAgXAotCWxpICAgICAgcjIwLE1TUl9LRVJORUw7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlsaSAgICAgIHIyMCwoTVNSX0tFUk5FTCAmIH4oTVNSX01FfE1TUl9ERXxNU1JfQ0UpKTsgXAogCXJsd2ltaSAgcjIwLHIyMywwLDI1LDI1OyAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlibHJsICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAuTF8gIyMgbGFiZWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvczNjMjQwMC5oIGIvaW5jbHVkZS9zM2MyNDAwLmgKaW5kZXggYmMxZjFlOS4uNGZkYzYyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zM2MyNDAwLmgKKysrIGIvaW5jbHVkZS9zM2MyNDAwLmgKQEAgLTYzLDcxICs2Myw3MSBAQAogI2luY2x1ZGUgPHMzYzI0eDAuaD4KIAogCi1zdGF0aWMgaW5saW5lIFMzQzI0WDBfTUVNQ1RMICogY29uc3QgUzNDMjRYMF9HZXRCYXNlX01FTUNUTCh2b2lkKQorc3RhdGljIGlubGluZSBTM0MyNFgwX01FTUNUTCAqIFMzQzI0WDBfR2V0QmFzZV9NRU1DVEwodm9pZCkKIHsKIAlyZXR1cm4gKFMzQzI0WDBfTUVNQ1RMICogY29uc3QpUzNDMjRYMF9NRU1DVExfQkFTRTsKIH0KLXN0YXRpYyBpbmxpbmUgUzNDMjRYMF9VU0JfSE9TVCAqIGNvbnN0IFMzQzI0WDBfR2V0QmFzZV9VU0JfSE9TVCh2b2lkKQorc3RhdGljIGlubGluZSBTM0MyNFgwX1VTQl9IT1NUICogUzNDMjRYMF9HZXRCYXNlX1VTQl9IT1NUKHZvaWQpCiB7CiAJcmV0dXJuIChTM0MyNFgwX1VTQl9IT1NUICogY29uc3QpUzNDMjRYMF9VU0JfSE9TVF9CQVNFOwogfQotc3RhdGljIGlubGluZSBTM0MyNFgwX0lOVEVSUlVQVCAqIGNvbnN0IFMzQzI0WDBfR2V0QmFzZV9JTlRFUlJVUFQodm9pZCkKK3N0YXRpYyBpbmxpbmUgUzNDMjRYMF9JTlRFUlJVUFQgKiBTM0MyNFgwX0dldEJhc2VfSU5URVJSVVBUKHZvaWQpCiB7CiAJcmV0dXJuIChTM0MyNFgwX0lOVEVSUlVQVCAqIGNvbnN0KVMzQzI0WDBfSU5URVJSVVBUX0JBU0U7CiB9Ci1zdGF0aWMgaW5saW5lIFMzQzI0WDBfRE1BUyAqIGNvbnN0IFMzQzI0WDBfR2V0QmFzZV9ETUFTKHZvaWQpCitzdGF0aWMgaW5saW5lIFMzQzI0WDBfRE1BUyAqIFMzQzI0WDBfR2V0QmFzZV9ETUFTKHZvaWQpCiB7CiAJcmV0dXJuIChTM0MyNFgwX0RNQVMgKiBjb25zdClTM0MyNFgwX0RNQV9CQVNFOwogfQotc3RhdGljIGlubGluZSBTM0MyNFgwX0NMT0NLX1BPV0VSICogY29uc3QgUzNDMjRYMF9HZXRCYXNlX0NMT0NLX1BPV0VSKHZvaWQpCitzdGF0aWMgaW5saW5lIFMzQzI0WDBfQ0xPQ0tfUE9XRVIgKiBTM0MyNFgwX0dldEJhc2VfQ0xPQ0tfUE9XRVIodm9pZCkKIHsKIAlyZXR1cm4gKFMzQzI0WDBfQ0xPQ0tfUE9XRVIgKiBjb25zdClTM0MyNFgwX0NMT0NLX1BPV0VSX0JBU0U7CiB9Ci1zdGF0aWMgaW5saW5lIFMzQzI0WDBfTENEICogY29uc3QgUzNDMjRYMF9HZXRCYXNlX0xDRCh2b2lkKQorc3RhdGljIGlubGluZSBTM0MyNFgwX0xDRCAqIFMzQzI0WDBfR2V0QmFzZV9MQ0Qodm9pZCkKIHsKIAlyZXR1cm4gKFMzQzI0WDBfTENEICogY29uc3QpUzNDMjRYMF9MQ0RfQkFTRTsKIH0KLXN0YXRpYyBpbmxpbmUgUzNDMjRYMF9VQVJUICogY29uc3QgUzNDMjRYMF9HZXRCYXNlX1VBUlQoUzNDMjRYMF9VQVJUU19OUiBucikKK3N0YXRpYyBpbmxpbmUgUzNDMjRYMF9VQVJUICogUzNDMjRYMF9HZXRCYXNlX1VBUlQoUzNDMjRYMF9VQVJUU19OUiBucikKIHsKIAlyZXR1cm4gKFMzQzI0WDBfVUFSVCAqIGNvbnN0KShTM0MyNFgwX1VBUlRfQkFTRSArIChuciAqIDB4NDAwMCkpOwogfQotc3RhdGljIGlubGluZSBTM0MyNFgwX1RJTUVSUyAqIGNvbnN0IFMzQzI0WDBfR2V0QmFzZV9USU1FUlModm9pZCkKK3N0YXRpYyBpbmxpbmUgUzNDMjRYMF9USU1FUlMgKiBTM0MyNFgwX0dldEJhc2VfVElNRVJTKHZvaWQpCiB7CiAJcmV0dXJuIChTM0MyNFgwX1RJTUVSUyAqIGNvbnN0KVMzQzI0WDBfVElNRVJfQkFTRTsKIH0KLXN0YXRpYyBpbmxpbmUgUzNDMjRYMF9VU0JfREVWSUNFICogY29uc3QgUzNDMjRYMF9HZXRCYXNlX1VTQl9ERVZJQ0Uodm9pZCkKK3N0YXRpYyBpbmxpbmUgUzNDMjRYMF9VU0JfREVWSUNFICogUzNDMjRYMF9HZXRCYXNlX1VTQl9ERVZJQ0Uodm9pZCkKIHsKIAlyZXR1cm4gKFMzQzI0WDBfVVNCX0RFVklDRSAqIGNvbnN0KVMzQzI0WDBfVVNCX0RFVklDRV9CQVNFOwogfQotc3RhdGljIGlubGluZSBTM0MyNFgwX1dBVENIRE9HICogY29uc3QgUzNDMjRYMF9HZXRCYXNlX1dBVENIRE9HKHZvaWQpCitzdGF0aWMgaW5saW5lIFMzQzI0WDBfV0FUQ0hET0cgKiBTM0MyNFgwX0dldEJhc2VfV0FUQ0hET0codm9pZCkKIHsKIAlyZXR1cm4gKFMzQzI0WDBfV0FUQ0hET0cgKiBjb25zdClTM0MyNFgwX1dBVENIRE9HX0JBU0U7CiB9Ci1zdGF0aWMgaW5saW5lIFMzQzI0WDBfSTJDICogY29uc3QgUzNDMjRYMF9HZXRCYXNlX0kyQyh2b2lkKQorc3RhdGljIGlubGluZSBTM0MyNFgwX0kyQyAqIFMzQzI0WDBfR2V0QmFzZV9JMkModm9pZCkKIHsKIAlyZXR1cm4gKFMzQzI0WDBfSTJDICogY29uc3QpUzNDMjRYMF9JMkNfQkFTRTsKIH0KLXN0YXRpYyBpbmxpbmUgUzNDMjRYMF9JMlMgKiBjb25zdCBTM0MyNFgwX0dldEJhc2VfSTJTKHZvaWQpCitzdGF0aWMgaW5saW5lIFMzQzI0WDBfSTJTICogUzNDMjRYMF9HZXRCYXNlX0kyUyh2b2lkKQogewogCXJldHVybiAoUzNDMjRYMF9JMlMgKiBjb25zdClTM0MyNFgwX0kyU19CQVNFOwogfQotc3RhdGljIGlubGluZSBTM0MyNFgwX0dQSU8gKiBjb25zdCBTM0MyNFgwX0dldEJhc2VfR1BJTyh2b2lkKQorc3RhdGljIGlubGluZSBTM0MyNFgwX0dQSU8gKiBTM0MyNFgwX0dldEJhc2VfR1BJTyh2b2lkKQogewogCXJldHVybiAoUzNDMjRYMF9HUElPICogY29uc3QpUzNDMjRYMF9HUElPX0JBU0U7CiB9Ci1zdGF0aWMgaW5saW5lIFMzQzI0WDBfUlRDICogY29uc3QgUzNDMjRYMF9HZXRCYXNlX1JUQyh2b2lkKQorc3RhdGljIGlubGluZSBTM0MyNFgwX1JUQyAqIFMzQzI0WDBfR2V0QmFzZV9SVEModm9pZCkKIHsKIAlyZXR1cm4gKFMzQzI0WDBfUlRDICogY29uc3QpUzNDMjRYMF9SVENfQkFTRTsKIH0KLXN0YXRpYyBpbmxpbmUgUzNDMjQwMF9BREMgKiBjb25zdCBTM0MyNDAwX0dldEJhc2VfQURDKHZvaWQpCitzdGF0aWMgaW5saW5lIFMzQzI0MDBfQURDICogUzNDMjQwMF9HZXRCYXNlX0FEQyh2b2lkKQogewogCXJldHVybiAoUzNDMjQwMF9BREMgKiBjb25zdClTM0MyNFgwX0FEQ19CQVNFOwogfQotc3RhdGljIGlubGluZSBTM0MyNFgwX1NQSSAqIGNvbnN0IFMzQzI0WDBfR2V0QmFzZV9TUEkodm9pZCkKK3N0YXRpYyBpbmxpbmUgUzNDMjRYMF9TUEkgKiBTM0MyNFgwX0dldEJhc2VfU1BJKHZvaWQpCiB7CiAJcmV0dXJuIChTM0MyNFgwX1NQSSAqIGNvbnN0KVMzQzI0WDBfU1BJX0JBU0U7CiB9Ci1zdGF0aWMgaW5saW5lIFMzQzI0MDBfTU1DICogY29uc3QgUzNDMjQwMF9HZXRCYXNlX01NQyh2b2lkKQorc3RhdGljIGlubGluZSBTM0MyNDAwX01NQyAqIFMzQzI0MDBfR2V0QmFzZV9NTUModm9pZCkKIHsKIAlyZXR1cm4gKFMzQzI0MDBfTU1DICogY29uc3QpUzNDMjQwMF9NTUNfQkFTRTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2VyaWFsLmggYi9pbmNsdWRlL3NlcmlhbC5oCmluZGV4IDhjN2IxYzIuLjQ4ODAwNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9zZXJpYWwuaApAQCAtMjYsNiArMjYsMTMgQEAKICAgIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKSB8fCBkZWZpbmVkKENPTkZJR19NUEM1eHh4KQogZXh0ZXJuIHN0cnVjdCBzZXJpYWxfZGV2aWNlIHNlcmlhbDBfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBzZXJpYWxfZGV2aWNlIHNlcmlhbDFfZGV2aWNlOworI2lmIGRlZmluZWQoQ0ZHX05TMTY1NTBfU0VSSUFMKQorZXh0ZXJuIHN0cnVjdCBzZXJpYWxfZGV2aWNlIGVzZXJpYWwxX2RldmljZTsKK2V4dGVybiBzdHJ1Y3Qgc2VyaWFsX2RldmljZSBlc2VyaWFsMl9kZXZpY2U7CitleHRlcm4gc3RydWN0IHNlcmlhbF9kZXZpY2UgZXNlcmlhbDNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBzZXJpYWxfZGV2aWNlIGVzZXJpYWw0X2RldmljZTsKKyNlbmRpZiAvKiBDRkdfTlMxNjU1MF9TRVJJQUwgKi8KKwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91c2IuaCBiL2luY2x1ZGUvdXNiLmgKaW5kZXggMzlkN2YyMy4uYmY3MTU1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91c2IuaAorKysgYi9pbmNsdWRlL3VzYi5oCkBAIC0xMDgsNiArMTA4LDcgQEAKIAl1bnNpZ25lZCBjaGFyICBpSW50ZXJmYWNlOwogCiAJdW5zaWduZWQgY2hhciAgbm9fb2ZfZXA7CisJdW5zaWduZWQgY2hhciAgbnVtX2FsdHNldHRpbmc7CiAJdW5zaWduZWQgY2hhciAgYWN0X2FsdHNldHRpbmc7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGVwX2Rlc2NbVVNCX01BWEVORFBPSU5UU107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUveHl6TW9kZW0uaCBiL2luY2x1ZGUveHl6TW9kZW0uaAppbmRleCA0ZWMxMGI1Li5mNDM3YmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3h5ek1vZGVtLmgKKysrIGIvaW5jbHVkZS94eXpNb2RlbS5oCkBAIC05Nyw3ICs5NywxMCBAQAogI2VuZGlmCiB9IGNvbm5lY3Rpb25faW5mb190OwogCisjaWZuZGVmCUJPT0xfV0FTX0RFRklORUQKKyNkZWZpbmUgQk9PTF9XQVNfREVGSU5FRAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgYm9vbDsKKyNlbmRpZgogCiAjZGVmaW5lIGZhbHNlIDAKICNkZWZpbmUgdHJ1ZSAxCmRpZmYgLS1naXQgYS9saWJfYXJtL01ha2VmaWxlIGIvbGliX2FybS9NYWtlZmlsZQppbmRleCBlNTZlMDZiLi4zZTBhNWM3IDEwMDY0NAotLS0gYS9saWJfYXJtL01ha2VmaWxlCisrKyBiL2xpYl9hcm0vTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjMgKzIzLDI0IEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEFSQ0gpLmEKK0xJQgk9ICQob2JqKWxpYiQoQVJDSCkuYQogCi1BT0JKUwk9IF9hc2hsZGkzLm8gX2FzaHJkaTMubyBfZGl2c2kzLm8gX21vZHNpMy5vIF91ZGl2c2kzLm8gX3Vtb2RzaTMubworU09CSlMJPSBfYXNobGRpMy5vIF9hc2hyZGkzLm8gX2RpdnNpMy5vIF9tb2RzaTMubyBfdWRpdnNpMy5vIF91bW9kc2kzLm8KIAogQ09CSlMJPSBhcm1saW51eC5vIGJvYXJkLm8gXAogCSAgY2FjaGUubyBkaXYwLm8KIAotT0JKUwk9ICQoQU9CSlMpICQoQ09CSlMpCitTUkNTIAk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykgJChDT0JKUykpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbGliX2JsYWNrZmluL01ha2VmaWxlIGIvbGliX2JsYWNrZmluL01ha2VmaWxlCmluZGV4IGJjMjgwZDAuLjU0OWM4YzEgMTAwNjQ0Ci0tLSBhL2xpYl9ibGFja2Zpbi9NYWtlZmlsZQorKysgYi9saWJfYmxhY2tmaW4vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAjIENvcHlyaWdodCAoYykgMjAwNSBibGFja2Zpbi51Y2xpbnV4Lm9yZwogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjcsMjEgKzI3LDIzIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEFSQ0gpLmEKK0xJQgk9ICQob2JqKWxpYiQoQVJDSCkuYQogCi1BT0JKUwk9CitTT0JKUwk9CiAKIENPQkpTCT0gYm9hcmQubyBiZjUzM19saW51eC5vIGJmNTMzX3N0cmluZy5vIGNhY2hlLm8gbXVsZGkzLm8KLU9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUyAJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvTWFrZWZpbGUgYi9saWJfZ2VuZXJpYy9NYWtlZmlsZQppbmRleCAxOGM0MWIxLi5mY2Q0M2M2IDEwMDY0NAotLS0gYS9saWJfZ2VuZXJpYy9NYWtlZmlsZQorKysgYi9saWJfZ2VuZXJpYy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIxICsyMywyNCBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliZ2VuZXJpYy5hCitMSUIJPSAkKG9iailsaWJnZW5lcmljLmEKIAotT0JKUwk9IGJ6bGliLm8gYnpsaWJfY3JjdGFibGUubyBiemxpYl9kZWNvbXByZXNzLm8gXAorQ09CSlMJPSBiemxpYi5vIGJ6bGliX2NyY3RhYmxlLm8gYnpsaWJfZGVjb21wcmVzcy5vIFwKIAkgIGJ6bGliX3JhbmR0YWJsZS5vIGJ6bGliX2h1ZmZtYW4ubyBcCiAJICBjcmMzMi5vIGN0eXBlLm8gZGlzcGxheV9vcHRpb25zLm8gbGRpdi5vIFwKIAkgIHN0cmluZy5vIHZzcHJpbnRmLm8gemxpYi5vCisJICAKK1NSQ1MgCTo9ICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbGliX2kzODYvTWFrZWZpbGUgYi9saWJfaTM4Ni9NYWtlZmlsZQppbmRleCBlNTkyNWU1Li44ZGM4MDllIDEwMDY0NAotLS0gYS9saWJfaTM4Ni9NYWtlZmlsZQorKysgYi9saWJfaTM4Ni9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMyArMjMsMjQgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQVJDSCkuYQorTElCCT0gJChvYmopbGliJChBUkNIKS5hCiAKLUFPQkpTCT0gYmlvcy5vIGJpb3NfcGNpLm8gcmVhbG1vZGVfc3dpdGNoLm8KK1NPQkpTCT0gYmlvcy5vIGJpb3NfcGNpLm8gcmVhbG1vZGVfc3dpdGNoLm8KIAogQ09CSlMJPSBib2FyZC5vIGJpb3Nfc2V0dXAubyBpMzg2X2xpbnV4Lm8gemltYWdlLm8gcmVhbG1vZGUubyBcCiAJICBwY2lfdHlwZTEubyBwY2kubyB2aWRlb19iaW9zLm8gdmlkZW8ubwogCi1PQkpTCT0gJChBT0JKUykgJChDT0JKUykKK1NSQ1MgCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9saWJfaTM4Ni9pMzg2X2xpbnV4LmMgYi9saWJfaTM4Ni9pMzg2X2xpbnV4LmMKaW5kZXggZTVkOGVlYS4uYjRhNmY1YSAxMDA2NDQKLS0tIGEvbGliX2kzODYvaTM4Nl9saW51eC5jCisrKyBiL2xpYl9pMzg2L2kzODZfbGludXguYwpAQCAtMTUxLDYgKzE1MSwxMiBAQAogCQlpbml0cmRfZW5kID0gMDsKIAl9CiAKKwkvKiBpZiBtdWx0aS1wYXJ0IGltYWdlLCB3ZSBuZWVkIHRvIGFkdmFuY2UgYmFzZSBwdHIgKi8KKwlpZiAoKGhkci0+aWhfdHlwZT09SUhfVFlQRV9NVUxUSSkgJiYgKGxlbl9wdHJbMV0pKSB7CisJCWludCBpOworCQlmb3IgKGk9MCwgYWRkcis9c2l6ZW9mKGludCk7IGxlbl9wdHJbaSsrXTsgYWRkcis9c2l6ZW9mKGludCkpOworCX0KKwogCWJhc2VfcHRyID0gbG9hZF96aW1hZ2UoKHZvaWQqKWFkZHIgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpLCBudG9obChoZHItPmloX3NpemUpLAogCQkJICAgICAgIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZC1pbml0cmRfc3RhcnQsIDApOwogCmRpZmYgLS1naXQgYS9saWJfbTY4ay9NYWtlZmlsZSBiL2xpYl9tNjhrL01ha2VmaWxlCmluZGV4IDY5OGRhMzYuLmY5ZTgzOTggMTAwNjQ0Ci0tLSBhL2xpYl9tNjhrL01ha2VmaWxlCisrKyBiL2xpYl9tNjhrL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIwICsyMywyMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChBUkNIKS5hCitMSUIJPSAkKG9iailsaWIkKEFSQ0gpLmEKIAotQU9CSlMJPQorU09CSlMJPQorCiBDT0JKUwk9IGNhY2hlLm8gdHJhcHMubyB0aW1lLm8gYm9hcmQubyBtNjhrX2xpbnV4Lm8KLU9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorU1JDUyAJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLXNpbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbGliX21pY3JvYmxhemUvTWFrZWZpbGUgYi9saWJfbWljcm9ibGF6ZS9NYWtlZmlsZQppbmRleCBlYzAxNzIyLi4zNWRlOTdmIDEwMDY0NAotLS0gYS9saWJfbWljcm9ibGF6ZS9NYWtlZmlsZQorKysgYi9saWJfbWljcm9ibGF6ZS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDQKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIyICsyMywyMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChBUkNIKS5hCitMSUIJPSAkKG9iailsaWIkKEFSQ0gpLmEKIAotQU9CSlMJPQorU09CSlMJPQogCiBDT0JKUwk9IGJvYXJkLm8gbWljcm9ibGF6ZV9saW51eC5vIHRpbWUubyBjYWNoZS5vCiAKLU9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQorU1JDUyAJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2xpYl9taXBzL01ha2VmaWxlIGIvbGliX21pcHMvTWFrZWZpbGUKaW5kZXggZDU5ODBlNi4uZTJhYzk5OSAxMDA2NDQKLS0tIGEvbGliX21pcHMvTWFrZWZpbGUKKysrIGIvbGliX21pcHMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMworIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjIgKzIzLDIzIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEFSQ0gpLmEKK0xJQgk9ICQob2JqKWxpYiQoQVJDSCkuYQogCi1BT0JKUwk9CitTT0JKUwk9CiAKIENPQkpTCT0gYm9hcmQubyB0aW1lLm8gbWlwc19saW51eC5vCiAKLU9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQorU1JDUyAJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2xpYl9uaW9zL01ha2VmaWxlIGIvbGliX25pb3MvTWFrZWZpbGUKaW5kZXggZWZmNDZkYi4uYWQ0YzZjNCAxMDA2NDQKLS0tIGEvbGliX25pb3MvTWFrZWZpbGUKKysrIGIvbGliX25pb3MvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMAorIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsMjIgKzIzLDIzIEBACiAKIGluY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5tawogCi1MSUIJPSBsaWIkKEFSQ0gpLmEKK0xJQgk9ICQob2JqKWxpYiQoQVJDSCkuYQogCi1BT0JKUwk9CitTT0JKUwk9CiAKIENPQkpTCT0gYm9hcmQubyBjYWNoZS5vIGRpdm1vZC5vIG5pb3NfbGludXgubyBtdWx0Lm8gdGltZS5vCiAKLU9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQorU1JDUyAJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2xpYl9uaW9zMi9NYWtlZmlsZSBiL2xpYl9uaW9zMi9NYWtlZmlsZQppbmRleCA0NGI4OTNjLi4xYzJhYzcyIDEwMDY0NAotLS0gYS9saWJfbmlvczIvTWFrZWZpbGUKKysrIGIvbGliX25pb3MyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIyICsyMywyMyBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotTElCCT0gbGliJChBUkNIKS5hCitMSUIJPSAkKG9iailsaWIkKEFSQ0gpLmEKIAotQU9CSlMJPSBjYWNoZS5vCitTT0JKUwk9IGNhY2hlLm8KIAogQ09CSlMJPSBib2FyZC5vIGRpdm1vZC5vIG5pb3NfbGludXgubyBtdWx0Lm8gdGltZS5vCiAKLU9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQorU1JDUyAJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQogCi0kKExJQik6CS5kZXBlbmQgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoQU9CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2xpYl9wcGMvTWFrZWZpbGUgYi9saWJfcHBjL01ha2VmaWxlCmluZGV4IDY1MmE0MTkuLmJhZThjYmMgMTAwNjQ0Ci0tLSBhL2xpYl9wcGMvTWFrZWZpbGUKKysrIGIvbGliX3BwYy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMywyMyArMjMsMjQgQEAKIAogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLUxJQgk9IGxpYiQoQVJDSCkuYQorTElCCT0gJChvYmopbGliJChBUkNIKS5hCiAKLUFPQkpTCT0gcHBjc3RyaW5nLm8gdGlja3MubworU09CSlMJPSBwcGNzdHJpbmcubyB0aWNrcy5vCiAKIENPQkpTCT0gYm9hcmQubyBcCiAJICBiYXRfcncubyBjYWNoZS5vIGV4dGFibGUubyBrZ2RiLm8gdGltZS5vIGludGVycnVwdHMubwogCi1PQkpTCT0gJChBT0JKUykgJChDT0JKUykKK1NSQ1MgCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKIAotJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQotCQkkKENDKSAtTSAkKENGTEFHUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9saWJfcHBjL2JvYXJkLmMgYi9saWJfcHBjL2JvYXJkLmMKaW5kZXggZTY4Y2YxZi4uNDZjZWE5OCAxMDA2NDQKLS0tIGEvbGliX3BwYy9ib2FyZC5jCisrKyBiL2xpYl9wcGMvYm9hcmQuYwpAQCAtMjcwLDcgKzI3MCw4IEBACiAKICNpZiAhZGVmaW5lZChDT05GSUdfOHh4X0NQVUNMS19ERUZBVUxUKQogCWdldF9jbG9ja3MsCQkvKiBnZXQgQ1BVIGFuZCBidXMgY2xvY2tzIChldGMuKSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1RRTTh4eEwpICYmICFkZWZpbmVkKENPTkZJR19UUU04NjZNKQorI2lmIGRlZmluZWQoQ09ORklHX1RRTTh4eEwpICYmICFkZWZpbmVkKENPTkZJR19UUU04NjZNKSBcCisgICAgJiYgIWRlZmluZWQoQ09ORklHX1RRTTg4NUQpCiAJYWRqdXN0X3NkcmFtX3Ric184eHgsCiAjZW5kaWYKIAlpbml0X3RpbWViYXNlLApAQCAtNTAzLDcgKzUwNCw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfODI2MCkgfHwgZGVmaW5lZChDT05GSUdfNXh4KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfRTUwMCkKKyAgICBkZWZpbmVkKENPTkZJR19FNTAwKSB8fCBkZWZpbmVkKENPTkZJR19NUEM4Nnh4KQogCWJkLT5iaV9pbW1yX2Jhc2UgPSBDRkdfSU1NUjsJLyogYmFzZSAgb2YgSU1NUiByZWdpc3RlciAgICAgKi8KICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01QQzV4eHgpCkBAIC02MTAsNiArNjExLDExIEBACiAJYmQgPSBnZC0+YmQ7CiAKIAlnZC0+ZmxhZ3MgfD0gR0RfRkxHX1JFTE9DOwkvKiB0ZWxsIG90aGVyczogcmVsb2NhdGlvbiBkb25lICovCisJZ2QtPnJlbG9jX29mZiA9IGRlc3RfYWRkciAtIENGR19NT05JVE9SX0JBU0U7CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01VTFRJCisJc2VyaWFsX2luaXRpYWxpemUoKTsKKyNlbmRpZgogCiAJZGVidWcgKCJOb3cgcnVubmluZyBpbiBSQU0gLSBVLUJvb3QgYXQ6ICUwOGx4XG4iLCBkZXN0X2FkZHIpOwogCkBAIC02MTksMTQgKzYyNSw4IEBACiAJYm9hcmRfZWFybHlfaW5pdF9yICgpOwogI2VuZGlmCiAKLQlnZC0+cmVsb2Nfb2ZmID0gZGVzdF9hZGRyIC0gQ0ZHX01PTklUT1JfQkFTRTsKLQogCW1vbml0b3JfZmxhc2hfbGVuID0gKHVsb25nKSZfX2luaXRfZW5kIC0gZGVzdF9hZGRyOwogCi0jaWZkZWYgQ09ORklHX1NFUklBTF9NVUxUSQotCXNlcmlhbF9pbml0aWFsaXplKCk7Ci0jZW5kaWYKLQogCS8qCiAJICogV2UgaGF2ZSB0byByZWxvY2F0ZSB0aGUgY29tbWFuZCB0YWJsZSBtYW51YWxseQogCSAqLwpAQCAtNzYzLDYgKzc2MywxMiBAQAogCXNwaV9pbml0X3IgKCk7CiAjZW5kaWYKIAorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisJV0FUQ0hET0dfUkVTRVQgKCk7CisJcHV0cyAoIk5BTkQ6ICAiKTsKKwluYW5kX2luaXQoKTsJCS8qIGdvIGluaXQgdGhlIE5BTkQgKi8KKyNlbmRpZgorCiAJLyogcmVsb2NhdGUgZW52aXJvbm1lbnQgZnVuY3Rpb24gcG9pbnRlcnMgZXRjLiAqLwogCWVudl9yZWxvY2F0ZSAoKTsKIApAQCAtODYyLDYgKzg2OCwxMCBAQAogCX0KICNlbmRpZgogCisjaWZkZWYgQ0ZHX0lEX0VFUFJPTQorCW1hY19yZWFkX2Zyb21fZWVwcm9tKCk7CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1RRTTh4eEwpIHx8IGRlZmluZWQoQ09ORklHX1RRTTgyNjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DQ00pIHx8IGRlZmluZWQoQ09ORklHX0tVUDRLKSB8fCBkZWZpbmVkKENPTkZJR19LVVA0WCkKIAlsb2FkX3Nlcm51bV9ldGhhZGRyICgpOwpAQCAtOTU5LDEyICs5NjksNiBAQAogCWRvY19pbml0ICgpOwogI2VuZGlmCiAKLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQotCVdBVENIRE9HX1JFU0VUICgpOwotCXB1dHMgKCJOQU5EOiAgIik7Ci0JbmFuZF9pbml0KCk7CQkvKiBnbyBpbml0IHRoZSBOQU5EICovCi0jZW5kaWYKLQogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05FVCkKICNpZiBkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpCiAJV0FUQ0hET0dfUkVTRVQgKCk7CmRpZmYgLS1naXQgYS9ta2NvbmZpZyBiL21rY29uZmlnCmluZGV4IDU0Nzc1ZDMuLmMzZTRjZWEgMTAwNzU1Ci0tLSBhL21rY29uZmlnCisrKyBiL21rY29uZmlnCkBAIC01LDQyICs1LDYwIEBACiAjCiAjIFBhcmFtZXRlcnM6ICBUYXJnZXQgIEFyY2hpdGVjdHVyZSAgQ1BVICBCb2FyZCBbVkVORE9SXSBbU09DXQogIwotIyAoQykgMjAwMiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorIyAoQykgMjAwMi0yMDA2IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CiAjCiAKIEFQUEVORD1ubwkjIERlZmF1bHQ6IENyZWF0ZSBuZXcgY29uZmlnIGZpbGUKK0JPQVJEX05BTUU9IiIJIyBOYW1lIHRvIHByaW50IGluIG1ha2Ugb3V0cHV0CiAKIHdoaWxlIFsgJCMgLWd0IDAgXSA7IGRvCiAJY2FzZSAiJDEiIGluCiAJLS0pIHNoaWZ0IDsgYnJlYWsgOzsKIAktYSkgc2hpZnQgOyBBUFBFTkQ9eWVzIDs7CisJLW4pIHNoaWZ0IDsgQk9BUkRfTkFNRT0iJHsxJSVfY29uZmlnfSIgOyBzaGlmdCA7OwogCSopICBicmVhayA7OwogCWVzYWMKIGRvbmUKIAorWyAiJHtCT0FSRF9OQU1FfSIgXSB8fCBCT0FSRF9OQU1FPSIkMSIKKwogWyAkIyAtbHQgNCBdICYmIGV4aXQgMQogWyAkIyAtZ3QgNiBdICYmIGV4aXQgMQogCi1lY2hvICJDb25maWd1cmluZyBmb3IgJDEgYm9hcmQuLi4iCi0KLWNkIC4vaW5jbHVkZQorZWNobyAiQ29uZmlndXJpbmcgZm9yICR7Qk9BUkRfTkFNRX0gYm9hcmQuLi4iCiAKICMKICMgQ3JlYXRlIGxpbmsgdG8gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGhlYWRlcnMKICMKLXJtIC1mIGFzbQotbG4gLXMgYXNtLSQyIGFzbQoraWYgWyAiJFNSQ1RSRUUiICE9ICIkT0JKVFJFRSIgXSA7IHRoZW4KKwlta2RpciAtcCAke09CSlRSRUV9L2luY2x1ZGUKKwlta2RpciAtcCAke09CSlRSRUV9L2luY2x1ZGUyCisJY2QgJHtPQkpUUkVFfS9pbmNsdWRlMgorCXJtIC1mIGFzbQorCWxuIC1zICR7U1JDVFJFRX0vaW5jbHVkZS9hc20tJDIgYXNtCisJTE5QUkVGSVg9Ii4uLy4uL2luY2x1ZGUyL2FzbS8iCisJY2QgLi4vaW5jbHVkZQorCXJtIC1yZiBhc20tJDIKKwlybSAtZiBhc20KKwlta2RpciBhc20tJDIKKwlsbiAtcyBhc20tJDIgYXNtCitlbHNlCisJY2QgLi9pbmNsdWRlCisJcm0gLWYgYXNtCisJbG4gLXMgYXNtLSQyIGFzbQorZmkKKwogcm0gLWYgYXNtLSQyL2FyY2gKIAogaWYgWyAteiAiJDYiIC1vICIkNiIgPSAiTlVMTCIgXSA7IHRoZW4KLQlsbiAtcyBhcmNoLSQzIGFzbS0kMi9hcmNoCisJbG4gLXMgJHtMTlBSRUZJWH1hcmNoLSQzIGFzbS0kMi9hcmNoCiBlbHNlCi0JbG4gLXMgYXJjaC0kNiBhc20tJDIvYXJjaAorCWxuIC1zICR7TE5QUkVGSVh9YXJjaC0kNiBhc20tJDIvYXJjaAogZmkKIAogaWYgWyAiJDIiID0gImFybSIgXSA7IHRoZW4KIAlybSAtZiBhc20tJDIvcHJvYwotCWxuIC1zIHByb2MtYXJtdiBhc20tJDIvcHJvYworCWxuIC1zICR7TE5QUkVGSVh9cHJvYy1hcm12IGFzbS0kMi9wcm9jCiBmaQogCiAjCmRpZmYgLS1naXQgYS9uYW5kX3NwbC9ib2FyZC9hbWNjL3NlcXVvaWEvTWFrZWZpbGUgYi9uYW5kX3NwbC9ib2FyZC9hbWNjL3NlcXVvaWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3YWE4YgotLS0gL2Rldi9udWxsCisrKyBiL25hbmRfc3BsL2JvYXJkL2FtY2Mvc2VxdW9pYS9NYWtlZmlsZQpAQCAtMCwwICsxLDgzIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaW5jbHVkZSBib2FyZC8kKEJPQVJERElSKS9jb25maWcubWsKKworTERTQ1JJUFQ9IGJvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5sZHMKK0xERkxBR1MJPSAtQnN0YXRpYyAtVCAkKExEU0NSSVBUKSAtVHRleHQgJChURVhUX0JBU0UpICQoUExBVEZPUk1fTERGTEFHUykKK0FGTEFHUwkrPSAtRENPTkZJR19OQU5EX1NQTAorQ0ZMQUdTCSs9IC1EQ09ORklHX05BTkRfU1BMCisKK1NPQkpTCT0gc3RhcnQubyBpbml0Lm8gcmVzZXR2ZWMubworQ09CSlMJPSBuYW5kX2Jvb3QubyBuZGZjLm8gc2RyYW0ubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKKworQUxMCT0gdS1ib290LXNwbCB1LWJvb3Qtc3BsLmJpbiB1LWJvb3Qtc3BsLTE2ay5iaW4KKworYWxsOgkkKG9iaikuZGVwZW5kICQoQUxMKQorCit1LWJvb3Qtc3BsLTE2ay5iaW46IHUtYm9vdC1zcGwKKwkkKE9CSkNPUFkpICR7T0JKQ0ZMQUdTfSAtLXBhZC10bz0kKFBBRF9UTykgLU8gYmluYXJ5ICQ8ICRACisKK3UtYm9vdC1zcGwuYmluOgl1LWJvb3Qtc3BsCisJJChPQkpDT1BZKSAke09CSkNGTEFHU30gLU8gYmluYXJ5ICQ8ICRACisKK3UtYm9vdC1zcGw6CSQoT0JKUykKKwkkKExEKSAkKExERkxBR1MpICQkVU5ERUZfU1lNICQoT0JKUykgXAorCQktTWFwIHUtYm9vdC1zcGwubWFwIC1vIHUtYm9vdC1zcGwKKworIyBjcmVhdGUgc3ltYm9saWMgbGlua3MgZm9yIGNvbW1vbiBmaWxlcworCisjIGZyb20gY3B1IGRpcmVjdG9yeQorbmRmYy5jOgorCUBybSAtZiBuZGZjLmMKKwlsbiAtcyAuLi9jcHUvcHBjNHh4L25kZmMuYyBuZGZjLmMKKworcmVzZXR2ZWMuUzoKKwlAcm0gLWYgcmVzZXR2ZWMuUworCWxuIC1zIC4uL2NwdS9wcGM0eHgvcmVzZXR2ZWMuUyByZXNldHZlYy5TCisKK3N0YXJ0LlM6CisJQHJtIC1mIHN0YXJ0LlMKKwlsbiAtcyAuLi9jcHUvcHBjNHh4L3N0YXJ0LlMgc3RhcnQuUworCisjIGZyb20gYm9hcmQgZGlyZWN0b3J5Citpbml0LlM6CisJQHJtIC1mIGluaXQuUworCWxuIC1zIC4uL2JvYXJkL2FtY2Mvc2VxdW9pYS9pbml0LlMgaW5pdC5TCisKK3NkcmFtLmM6CisJQHJtIC1mIHNkcmFtLmMKKwlsbiAtcyAuLi9ib2FyZC9hbWNjL3NlcXVvaWEvc2RyYW0uYyBzZHJhbS5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9uYW5kX3NwbC9ib2FyZC9hbWNjL3NlcXVvaWEvY29uZmlnLm1rIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9zZXF1b2lhL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjliYTVmCi0tLSAvZGV2L251bGwKKysrIGIvbmFuZF9zcGwvYm9hcmQvYW1jYy9zZXF1b2lhL2NvbmZpZy5tawpAQCAtMCwwICsxLDQ5IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjCisjIEFNQ0MgNDQwRVB4IFJlZmVyZW5jZSBQbGF0Zm9ybSAoU2VxdW9pYSkgYm9hcmQKKyMKKworIworIyBURVhUX0JBU0UgZm9yIFNQTDoKKyMKKyMgT24gNDQwRVAoeCkgcGxhdGZvcm1zIHRoZSBTUEwgaXMgbG9jYXRlZCBhdCAweGZmZmZmMDAwLi4uMHhmZmZmZmZmZiwKKyMgaW4gdGhlIGxhc3QgNGtCeXRlcyBvZiBtZW1vcnkgc3BhY2UgaW4gY2FjaGUuCisjIFdlIHdpbGwgY29weSB0aGlzIFNQTCBpbnRvIGludGVybmFsIFNSQU0gaW4gc3RhcnQuUy4gU28gd2Ugc2V0CisjIFRFWFRfQkFTRSB0byBzdGFydGluZyBhZGRyZXNzIGluIGludGVybmFsIFNSQU0gaGVyZS4KKyMKK1RFWFRfQkFTRSA9IDB4RTAwMTMwMDAKKworIyBQQURfVE8gdXNlZCB0byBnZW5lcmF0ZSBhIDE2a0J5dGUgYmluYXJ5IG5lZWRlZCBmb3IgdGhlIGNvbWJpbmVkIGltYWdlCisjIC0+IFBBRF9UTyA9IFRFWFRfQkFTRSArIDB4NDAwMAorUEFEX1RPCT0gMHhFMDAxNzAwMAorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR180NDA9MQorCitpZmVxICgkKGRlYnVnKSwxKQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURERUJVRworZW5kaWYKKworaWZlcSAoJChkYmNyKSwxKQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDRkdfSU5JVF9EQkNSPTB4OGNmZjAwMDAKK2VuZGlmCmRpZmYgLS1naXQgYS9uYW5kX3NwbC9ib2FyZC9hbWNjL3NlcXVvaWEvdS1ib290LmxkcyBiL25hbmRfc3BsL2JvYXJkL2FtY2Mvc2VxdW9pYS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjM2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9uYW5kX3NwbC9ib2FyZC9hbWNjL3NlcXVvaWEvdS1ib290LmxkcwpAQCAtMCwwICsxLDY1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0FSQ0gocG93ZXJwYzpjb21tb24pCitTRUNUSU9OUworeworICAucmVzZXR2ZWMgMHhFMDAxM0ZGQyA6CisgIHsKKyAgICAqKC5yZXNldHZlYykKKyAgfSA9IDB4ZmZmZgorCisgIC50ZXh0ICAgICAgOgorICB7CisgICAgc3RhcnQubwkoLnRleHQpCisgICAgaW5pdC5vCSgudGV4dCkKKyAgICBuYW5kX2Jvb3QubwkoLnRleHQpCisgICAgc2RyYW0ubwkoLnRleHQpCisgICAgbmRmYy5vCSgudGV4dCkKKworICAgICooLnRleHQpCisgICAgKiguZml4dXApCisgIH0KKyAgX2V0ZXh0ID0gLjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5yb2RhdGEqKQorICAgICooLmRhdGEqKQorICAgICooLnNkYXRhKikKKyAgICBfX2dvdDJfc3RhcnQgPSAuOworICAgICooLmdvdDIpCisgICAgX19nb3QyX2VuZCA9IC47CisgIH0KKworICBfZWRhdGEgID0gIC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykKKyAgICooLmJzcykKKyAgfQorCisgIF9lbmQgPSAuIDsKK30KZGlmZiAtLWdpdCBhL25hbmRfc3BsL25hbmRfYm9vdC5jIGIvbmFuZF9zcGwvbmFuZF9ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhYmIwOQotLS0gL2Rldi9udWxsCisrKyBiL25hbmRfc3BsL25hbmRfYm9vdC5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG5hbmQuaD4KKworI2RlZmluZSBDRkdfTkFORF9SRUFEX0RFTEFZIFwKKwl7IHZvbGF0aWxlIGludCBkdW1teTsgaW50IGk7IGZvciAoaT0wOyBpPDEwMDAwOyBpKyspIGR1bW15ID0gaTsgfQorCitleHRlcm4gdm9pZCBib2FyZF9uYW5kX2luaXQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCk7CitleHRlcm4gdm9pZCBuZGZjX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGludCBjbWQpOworZXh0ZXJuIHZvaWQgbmRmY193cml0ZV9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbywgdV9jaGFyIGJ5dGUpOworZXh0ZXJuIHVfY2hhciBuZGZjX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8pOworZXh0ZXJuIGludCBuZGZjX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8pOworZXh0ZXJuIGludCBqdW1wX3RvX3JhbSh1bG9uZyBkZWx0YSk7CitleHRlcm4gaW50IGp1bXBfdG9fdWJvb3QodWxvbmcgYWRkcik7CisKK3N0YXRpYyBpbnQgbmFuZF9pc19iYWRfYmxvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBibG9jaykKK3sKKyAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgcGFnZV9hZGRyID0gYmxvY2sgKiBDRkdfTkFORF9QQUdFX0NPVU5UOworCisJLyogQmVnaW4gY29tbWFuZCBsYXRjaCBjeWNsZSAqLworCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7CisJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIE5BTkRfQ01EX1JFQURPT0IpOworCS8qIFNldCBBTEUgYW5kIGNsZWFyIENMRSB0byBzdGFydCBhZGRyZXNzIGN5Y2xlICovCisJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKKwl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRBTEUpOworCS8qIENvbHVtbiBhZGRyZXNzICovCisJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIENGR19OQU5EX0JBRF9CTE9DS19QT1MpOwkJCS8qIEFbNzowXSAqLworCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodWNoYXIpKHBhZ2VfYWRkciAmIDB4ZmYpKTsJCS8qIEFbMTY6OV0gKi8KKwl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVjaGFyKSgocGFnZV9hZGRyID4+IDgpICYgMHhmZikpOwkvKiBBWzI0OjE3XSAqLworI2lmZGVmIENGR19OQU5EXzRfQUREUl9DWUNMRQorCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGRldmljZXMgPiAzMk1pQiAqLworCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodWNoYXIpKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZikpOwkvKiBBW3h4OjI1XSAqLworI2VuZGlmCisJLyogTGF0Y2ggaW4gYWRkcmVzcyAqLworCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkFMRSk7CisKKwkvKgorCSAqIFdhaXQgYSB3aGlsZSBmb3IgdGhlIGRhdGEgdG8gYmUgcmVhZHkKKwkgKi8KKwlpZiAodGhpcy0+ZGV2X3JlYWR5KQorCQl0aGlzLT5kZXZfcmVhZHkobXRkKTsKKwllbHNlCisJCUNGR19OQU5EX1JFQURfREVMQVk7CisKKwkvKgorCSAqIFJlYWQgb24gYnl0ZQorCSAqLworCWlmICh0aGlzLT5yZWFkX2J5dGUobXRkKSAhPSAweGZmKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYmxvY2ssIGludCBwYWdlLCB1Y2hhciAqZHN0KQoreworICAgICAgICBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBwYWdlX2FkZHIgPSBwYWdlICsgYmxvY2sgKiBDRkdfTkFORF9QQUdFX0NPVU5UOworCWludCBpOworCisJLyogQmVnaW4gY29tbWFuZCBsYXRjaCBjeWNsZSAqLworCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7CisJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIE5BTkRfQ01EX1JFQUQwKTsKKwkvKiBTZXQgQUxFIGFuZCBjbGVhciBDTEUgdG8gc3RhcnQgYWRkcmVzcyBjeWNsZSAqLworCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7CisJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQUxFKTsKKwkvKiBDb2x1bW4gYWRkcmVzcyAqLworCXRoaXMtPndyaXRlX2J5dGUobXRkLCAwKTsJCQkJCS8qIEFbNzowXSAqLworCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodWNoYXIpKHBhZ2VfYWRkciAmIDB4ZmYpKTsJCS8qIEFbMTY6OV0gKi8KKwl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVjaGFyKSgocGFnZV9hZGRyID4+IDgpICYgMHhmZikpOwkvKiBBWzI0OjE3XSAqLworI2lmZGVmIENGR19OQU5EXzRfQUREUl9DWUNMRQorCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGRldmljZXMgPiAzMk1pQiAqLworCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodWNoYXIpKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZikpOwkvKiBBW3h4OjI1XSAqLworI2VuZGlmCisJLyogTGF0Y2ggaW4gYWRkcmVzcyAqLworCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkFMRSk7CisKKwkvKgorCSAqIFdhaXQgYSB3aGlsZSBmb3IgdGhlIGRhdGEgdG8gYmUgcmVhZHkKKwkgKi8KKwlpZiAodGhpcy0+ZGV2X3JlYWR5KQorCQl0aGlzLT5kZXZfcmVhZHkobXRkKTsKKwllbHNlCisJCUNGR19OQU5EX1JFQURfREVMQVk7CisKKwkvKgorCSAqIFJlYWQgcGFnZSBpbnRvIGJ1ZmZlcgorCSAqLworCWZvciAoaT0wOyBpPENGR19OQU5EX1BBR0VfU0laRTsgaSsrKQorCQkqZHN0KysgPSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5hbmRfbG9hZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG9mZnMsIGludCB1Ym9vdF9zaXplLCB1Y2hhciAqZHN0KQoreworCWludCBibG9jazsKKwlpbnQgYmxvY2tjb3B5X2NvdW50OworCWludCBwYWdlOworCisJLyoKKwkgKiBvZmZzIGhhcyB0byBiZSBhbGlnbmVkIHRvIGEgYmxvY2sgYWRkcmVzcyEKKwkgKi8KKwlibG9jayA9IG9mZnMgLyBDRkdfTkFORF9CTE9DS19TSVpFOworCWJsb2NrY29weV9jb3VudCA9IDA7CisKKwl3aGlsZSAoYmxvY2tjb3B5X2NvdW50IDwgKHVib290X3NpemUgLyBDRkdfTkFORF9CTE9DS19TSVpFKSkgeworCQlpZiAoIW5hbmRfaXNfYmFkX2Jsb2NrKG10ZCwgYmxvY2spKSB7CisJCQkvKgorCQkJICogU2tpcCBiYWQgYmxvY2tzCisJCQkgKi8KKwkJCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBDRkdfTkFORF9QQUdFX0NPVU5UOyBwYWdlKyspIHsKKwkJCQluYW5kX3JlYWRfcGFnZShtdGQsIGJsb2NrLCBwYWdlLCBkc3QpOworCQkJCWRzdCArPSBDRkdfTkFORF9QQUdFX1NJWkU7CisJCQl9CisKKwkJCWJsb2NrY29weV9jb3VudCsrOworCQl9CisKKwkJYmxvY2srKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBuYW5kX2Jvb3Qodm9pZCkKK3sKKwl1bG9uZyBtZW1fc2l6ZTsKKwlzdHJ1Y3QgbmFuZF9jaGlwIG5hbmRfY2hpcDsKKwluYW5kX2luZm9fdCBuYW5kX2luZm87CisJaW50IHJldDsKKwl2b2lkICgqdWJvb3QpKHZvaWQpOworCisJLyoKKwkgKiBJbml0IHNkcmFtLCBzbyB3ZSBoYXZlIGFjY2VzcyB0byBtZW1vcnkKKwkgKi8KKwltZW1fc2l6ZSA9IGluaXRkcmFtKDApOworCisJLyoKKwkgKiBJbml0IGJvYXJkIHNwZWNpZmljIG5hbmQgc3VwcG9ydAorCSAqLworCW5hbmRfaW5mby5wcml2ID0gJm5hbmRfY2hpcDsKKwluYW5kX2NoaXAuSU9fQUREUl9SID0gbmFuZF9jaGlwLklPX0FERFJfVyA9ICh2b2lkICBfX2lvbWVtICopQ0ZHX05BTkRfQkFTRTsKKwluYW5kX2NoaXAuZGV2X3JlYWR5ID0gTlVMTDsJLyogcHJlc2V0IHRvIE5VTEwgKi8KKwlib2FyZF9uYW5kX2luaXQoJm5hbmRfY2hpcCk7CisKKwkvKgorCSAqIExvYWQgVS1Cb290IGltYWdlIGZyb20gTkFORCBpbnRvIFJBTQorCSAqLworCXJldCA9IG5hbmRfbG9hZCgmbmFuZF9pbmZvLCBDRkdfTkFORF9VX0JPT1RfT0ZGUywgQ0ZHX05BTkRfVV9CT09UX1NJWkUsCisJCQkodWNoYXIgKilDRkdfTkFORF9VX0JPT1RfRFNUKTsKKworCS8qCisJICogSnVtcCB0byBVLUJvb3QgaW1hZ2UKKwkgKi8KKwl1Ym9vdCA9ICh2b2lkICgqKSh2b2lkKSlDRkdfTkFORF9VX0JPT1RfU1RBUlQ7CisJKCp1Ym9vdCkoKTsKK30KZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZSBiL25ldC9NYWtlZmlsZQppbmRleCA3YTcwNDg5Li42ZmU0MDAyIDEwMDY0NAotLS0gYS9uZXQvTWFrZWZpbGUKKysrIGIvbmV0L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI1LDE5ICsyNSwyMyBAQAogCiAjIENGTEFHUyArPSAtREVUX0RFQlVHIC1EREVCVUcKIAotTElCCT0gbGlibmV0LmEKK0xJQgk9ICQob2JqKWxpYm5ldC5hCiAKLU9CSlMJPSBuZXQubyB0ZnRwLm8gYm9vdHAubyByYXJwLm8gZXRoLm8gbmZzLm8gc250cC5vCitDT0JKUwk9IG5ldC5vIHRmdHAubyBib290cC5vIHJhcnAubyBldGgubyBuZnMubyBzbnRwLm8KKworU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCisKIGFsbDoJJChMSUIpCiAKLSQoTElCKToJJChTVEFSVCkgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9uZXQvZXRoLmMgYi9uZXQvZXRoLmMKaW5kZXggNmY0OGFhYy4uZThhYzI1MSAxMDA2NDQKLS0tIGEvbmV0L2V0aC5jCisrKyBiL25ldC9ldGguYwpAQCAtMTk2LDYgKzE5NiwyMiBAQAogCXRzZWNfaW5pdGlhbGl6ZShiaXMsIDMsIENPTkZJR19NUEM4M1hYX1RTRUM0X05BTUUpOwogIyAgICBlbmRpZgogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDMSkKKyAgICAgICB0c2VjX2luaXRpYWxpemUoYmlzLCAwLCBDT05GSUdfTVBDODZYWF9UU0VDMV9OQU1FKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDMikKKyAgICAgICB0c2VjX2luaXRpYWxpemUoYmlzLCAxLCBDT05GSUdfTVBDODZYWF9UU0VDMl9OQU1FKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDMykKKyAgICAgICB0c2VjX2luaXRpYWxpemUoYmlzLCAyLCBDT05GSUdfTVBDODZYWF9UU0VDM19OQU1FKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVBDODZYWF9UU0VDNCkKKyAgICAgICB0c2VjX2luaXRpYWxpemUoYmlzLCAzLCBDT05GSUdfTVBDODZYWF9UU0VDNF9OQU1FKTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChGRUNfRU5FVCkgfHwgZGVmaW5lZChDT05GSUdfRVRIRVJfT05fRkNDKQogCWZlY19pbml0aWFsaXplKGJpcyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90ZnRwLmMgYi9uZXQvdGZ0cC5jCmluZGV4IGVjYTIxZDIuLmYzYTU0NzEgMTAwNjQ0Ci0tLSBhL25ldC90ZnRwLmMKKysrIGIvbmV0L3RmdHAuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJCWlmIChUZnRwQmxvY2sgPT0gMCkgewogCQkJVGZ0cEJsb2NrV3JhcCsrOwogCQkJVGZ0cEJsb2NrV3JhcE9mZnNldCArPSBURlRQX0JMT0NLX1NJWkUgKiBURlRQX1NFUVVFTkNFX1NJWkU7Ci0JCQlwcmludGYgKCJcblx0ICVsdSBNQiByZXZlaXZlZFxuXHQgIiwgVGZ0cEJsb2NrV3JhcE9mZnNldD4+MjApOworCQkJcHJpbnRmICgiXG5cdCAlbHUgTUIgcmVjZWl2ZWRcblx0ICIsIFRmdHBCbG9ja1dyYXBPZmZzZXQ+PjIwKTsKIAkJfSBlbHNlIHsKIAkJCWlmICgoKFRmdHBCbG9jayAtIDEpICUgMTApID09IDApIHsKIAkJCQlwdXRjICgnIycpOwpkaWZmIC0tZ2l0IGEvcG9zdC9NYWtlZmlsZSBiL3Bvc3QvTWFrZWZpbGUKaW5kZXggNGVlNDI5ZC4uMjI4YmFmYyAxMDA2NDQKLS0tIGEvcG9zdC9NYWtlZmlsZQorKysgYi9wb3N0L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAyLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKZGlmZiAtLWdpdCBhL3Bvc3QvY3B1L01ha2VmaWxlIGIvcG9zdC9jcHUvTWFrZWZpbGUKaW5kZXggNDNmYzA0NC4uNjQ1ZTgzOCAxMDA2NDQKLS0tIGEvcG9zdC9jcHUvTWFrZWZpbGUKKysrIGIvcG9zdC9jcHUvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjCi0jIChDKSBDb3B5cmlnaHQgMjAwMgorIyAoQykgQ29weXJpZ2h0IDIwMDItMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpkaWZmIC0tZ2l0IGEvcG9zdC9ydWxlcy5tayBiL3Bvc3QvcnVsZXMubWsKaW5kZXggMWFkNjk1OS4uYTJmMzNhZCAxMDA2NDQKLS0tIGEvcG9zdC9ydWxlcy5taworKysgYi9wb3N0L3J1bGVzLm1rCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgKEMpIENvcHlyaWdodCAyMDAyLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDIwICsyMywyMiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotT0JKUwk9ICQoQU9CSlMpICQoQ09CSlMpCitTUkNTIAk6PSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChBT0JKUykgJChDT0JKUykpCitMSUIJOj0gJChvYmopJChMSUIpCiAKIENQUEZMQUdTICs9IC1JJChUT1BESVIpCiAKIGFsbDoJJChMSUIpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDogTWFrZWZpbGUgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLQkkKENDKSAtTSAkKENGTEFHUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgPiAuZGVwZW5kCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3J0Yy9NYWtlZmlsZSBiL3J0Yy9NYWtlZmlsZQppbmRleCAyYzVkMDk5Li5jYTViNjZiIDEwMDY0NAotLS0gYS9ydGMvTWFrZWZpbGUKKysrIGIvcnRjL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNAorIyAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNgogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogIwogIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjUsMjQgKzI1LDI3IEBACiAKICNDRkxBR1MgKz0gLURERUJVRwogCi1MSUIJPSBsaWJydGMuYQorTElCCT0gJChvYmopbGlicnRjLmEKIAotT0JKUwk9IGRhdGUubyAgIFwKK0NPQkpTCT0gZGF0ZS5vICAgXAogCSAgYmY1MzNfcnRjLm8gZHMxMjg4Ny5vIGRzMTMwMi5vIGRzMTMwNi5vIGRzMTMwNy5vIFwKIAkgIGRzMTMzNy5vIGRzMTM3NC5vIGRzMTU1Ni5vIGRzMTY0eC5vIGRzMTc0eC5vIFwKIAkgIG00MXQxMS5vIG1heDY5MDAubyBtNDh0MzVheC5vIG1jMTQ2ODE4Lm8gbWs0OHQ1OS5vIFwKIAkgIG1wYzV4eHgubyBtcGM4eHgubyBwY2Y4NTYzLm8gczNjMjR4MF9ydGMubyByczVjMzcyLm8KIAorU1JDUwk6PSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCisKIGFsbDoJJChMSUIpCiAKLSQoTElCKToJJChTVEFSVCkgJChPQkpTKQorJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKIAkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChDRkxBR1MpICQoT0JKUzoubz0uYykgPiAkQAorIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKIAotc2luY2x1ZGUgLmRlcGVuZAorc2luY2x1ZGUgJChvYmopLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ydWxlcy5tayBiL3J1bGVzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzQ1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9ydWxlcy5tawpAQCAtMCwwICsxLDM1IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK19kZXBlbmQ6CSQob2JqKS5kZXBlbmQKKworJChvYmopLmRlcGVuZDoJJChzcmMpTWFrZWZpbGUgJChUT1BESVIpL2NvbmZpZy5tayAkKFNSQ1MpCisJCUBybSAtZiAkQAorCQlAZm9yIGYgaW4gJChTUkNTKTsgZG8gXAorCQkJZz1gYmFzZW5hbWUgJCRmIHwgc2VkIC1lICdzL1woLipcKVwuXHcvXDEuby8nYDsgXAorCQkJJChDQykgLU0gJChIT1NUX0NGTEFHUykgJChDUFBGTEFHUykgLU1RICQob2JqKSQkZyAkJGYgPj4gJEAgOyBcCisJCWRvbmUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUgYi90b29scy9NYWtlZmlsZQppbmRleCBkM2RjYzdkLi42MDZmMDI0IDEwMDY0NAotLS0gYS90b29scy9NYWtlZmlsZQorKysgYi90b29scy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIxLDIyICsyMSwyMyBAQAogIyBNQSAwMjExMS0xMzA3IFVTQQogIwogCi1CSU5TCT0gaW1nMnNyZWMkKFNGWCkgbWtpbWFnZSQoU0ZYKSBlbnZjcmMkKFNGWCkgZ2VuX2V0aF9hZGRyJChTRlgpIGJtcF9sb2dvJChTRlgpCitCSU5fRklMRVMJPSBpbWcyc3JlYyQoU0ZYKSBta2ltYWdlJChTRlgpIGVudmNyYyQoU0ZYKSBnZW5fZXRoX2FkZHIkKFNGWCkgYm1wX2xvZ28kKFNGWCkKIAotT0JKUwk9IGVudmlyb25tZW50Lm8gaW1nMnNyZWMubyBta2ltYWdlLm8gY3JjMzIubyBlbnZjcmMubyBnZW5fZXRoX2FkZHIubyBibXBfbG9nby5vCitPQkpfTElOS1MJPSBlbnZpcm9ubWVudC5vIGNyYzMyLm8KK09CSl9GSUxFUwk9IGltZzJzcmVjLm8gbWtpbWFnZS5vIGVudmNyYy5vIGdlbl9ldGhfYWRkci5vIGJtcF9sb2dvLm8KIAogaWZlcSAoJChBUkNIKSxtaXBzKQotQklOUyAgICs9IGluY2Etc3dhcC1ieXRlcyQoU0ZYKQotT0JKUyAgICs9IGluY2Etc3dhcC1ieXRlcy5vCitCSU5fRklMRVMJKz0gaW5jYS1zd2FwLWJ5dGVzJChTRlgpCitPQkpfRklMRVMJKz0gaW5jYS1zd2FwLWJ5dGVzLm8KIGVuZGlmCiAKICMgRG9uJ3QgYnVpbGQgYnkgZGVmYXVsdAogI2lmZXEgKCQoQVJDSCkscHBjKQotI0JJTlMgICArPSBtcGM4NnhfY2xrJChTRlgpCi0jT0JKUyAgICs9IG1wYzg2eF9jbGsubworI0JJTl9GSUxFUwkJKz0gbXBjODZ4X2NsayQoU0ZYKQorI09CSl9GSUxFUwkrPSBtcGM4NnhfY2xrLm8KICNlbmRpZgogCi1MT0dPX0gJPSAkKFRPUERJUikvaW5jbHVkZS9ibXBfbG9nby5oCitMT0dPX0gJPSAkKE9CSlRSRUUpL2luY2x1ZGUvYm1wX2xvZ28uaAogCiBpZmVxICgkKExPR09fQk1QKSwpCiBMT0dPX0JNUD0gbG9nb3MvZGVueC5ibXAKQEAgLTEwNiw2OSArMTA3LDc2IEBACiAjCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAorIyBub3cgJChvYmopIGlzIGRlZmluZWQKK1NSQ1MJOj0gJChhZGRwcmVmaXggJChvYmopLCQoT0JKX0xJTktTOi5vPS5jKSkgJChPQkpfRklMRVM6Lm89LmMpIAorQklOUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChCSU5fRklMRVMpKQorCiAjCiAjIFVzZSBuYXRpdmUgdG9vbHMgYW5kIG9wdGlvbnMKICMKLUNQUEZMQUdTICAgPSAtaWRpcmFmdGVyIC4uL2luY2x1ZGUgLURURVhUX0JBU0U9JChURVhUX0JBU0UpIC1EVVNFX0hPU1RDQworQ1BQRkxBR1MgICA9IC1pZGlyYWZ0ZXIgJChTUkNUUkVFKS9pbmNsdWRlIFwKKwkJLWlkaXJhZnRlciAkKE9CSlRSRUUpL2luY2x1ZGUyIFwKKwkJLWlkaXJhZnRlciAkKE9CSlRSRUUpL2luY2x1ZGUgXAorCQktRFRFWFRfQkFTRT0kKFRFWFRfQkFTRSkgLURVU0VfSE9TVENDCiBDRkxBR1MgICAgID0gJChIT1NUX0NGTEFHUykgJChDUFBGTEFHUykgLU8KIEFGTEFHUwkgICA9IC1EX19BU1NFTUJMWV9fICQoQ1BQRkxBR1MpCiBDQwkgICA9ICQoSE9TVENDKQogU1RSSVAJICAgPSAkKEhPU1RTVFJJUCkKIE1BS0VERVBFTkQgPSBtYWtlZGVwZW5kCiAKLWFsbDoJLmRlcGVuZCAkKEJJTlMpICQoTE9HT19IKSBzdWJkaXJzCithbGw6CSQob2JqKS5kZXBlbmQgJChCSU5TKSAkKExPR09fSCkgc3ViZGlycwogCi1lbnZjcmMkKFNGWCk6CWVudmNyYy5vIGNyYzMyLm8gZW52aXJvbm1lbnQubworJChvYmopZW52Y3JjJChTRlgpOgkkKG9iaillbnZjcmMubyAkKG9iailjcmMzMi5vICQob2JqKWVudmlyb25tZW50Lm8KIAkJJChDQykgJChDRkxBR1MpIC1vICRAICReCiAKLWltZzJzcmVjJChTRlgpOglpbWcyc3JlYy5vCiskKG9iailpbWcyc3JlYyQoU0ZYKToJJChvYmopaW1nMnNyZWMubwogCQkkKENDKSAkKENGTEFHUykgJChIT1NUX0xERkxBR1MpIC1vICRAICReCiAJCSQoU1RSSVApICRACiAKLW1raW1hZ2UkKFNGWCk6CW1raW1hZ2UubyBjcmMzMi5vCiskKG9iailta2ltYWdlJChTRlgpOgkkKG9iailta2ltYWdlLm8gJChvYmopY3JjMzIubwogCQkkKENDKSAkKENGTEFHUykgJChIT1NUX0xERkxBR1MpIC1vICRAICReCiAJCSQoU1RSSVApICRACiAKLW5jYiQoU0ZYKToJbmNiLm8KKyQob2JqKW5jYiQoU0ZYKToJJChvYmopbmNiLm8KIAkJJChDQykgJChDRkxBR1MpICQoSE9TVF9MREZMQUdTKSAtbyAkQCAkXgogCQkkKFNUUklQKSAkQAogCi1nZW5fZXRoX2FkZHIkKFNGWCk6CWdlbl9ldGhfYWRkci5vCiskKG9iailnZW5fZXRoX2FkZHIkKFNGWCk6CSQob2JqKWdlbl9ldGhfYWRkci5vCiAJCSQoQ0MpICQoQ0ZMQUdTKSAkKEhPU1RfTERGTEFHUykgLW8gJEAgJF4KIAkJJChTVFJJUCkgJEAKIAotYm1wX2xvZ28kKFNGWCk6CWJtcF9sb2dvLm8KKyQob2JqKWJtcF9sb2dvJChTRlgpOgkkKG9iailibXBfbG9nby5vCiAJCSQoQ0MpICQoQ0ZMQUdTKSAkKEhPU1RfTERGTEFHUykgLW8gJEAgJF4KIAkJJChTVFJJUCkgJEAKIAotaW5jYS1zd2FwLWJ5dGVzJChTRlgpOglpbmNhLXN3YXAtYnl0ZXMubworJChvYmopaW5jYS1zd2FwLWJ5dGVzJChTRlgpOgkkKG9iailpbmNhLXN3YXAtYnl0ZXMubwogCQkkKENDKSAkKENGTEFHUykgJChIT1NUX0xERkxBR1MpIC1vICRAICReCiAJCSQoU1RSSVApICRACiAKLW1wYzg2eF9jbGskKFNGWCk6CW1wYzg2eF9jbGsubworJChvYmopbXBjODZ4X2NsayQoU0ZYKToJJChvYmopbXBjODZ4X2Nsay5vCiAJCSQoQ0MpICQoQ0ZMQUdTKSAkKEhPU1RfTERGTEFHUykgLW8gJEAgJF4KIAkJJChTVFJJUCkgJEAKIAotZW52Y3JjLm86CWVudmNyYy5jCi0JCSQoQ0MpIC1nICQoQ0ZMQUdTKSAtYyAkPAorJChvYmopZW52Y3JjLm86CSQoc3JjKWVudmNyYy5jCisJCSQoQ0MpIC1nICQoQ0ZMQUdTKSAtYyAtbyAkQCAkPAogCi1jcmMzMi5vOgljcmMzMi5jCi0JCSQoQ0MpIC1nICQoQ0ZMQUdTKSAtYyAkPAorJChvYmopY3JjMzIubzoJJChvYmopY3JjMzIuYworCQkkKENDKSAtZyAkKENGTEFHUykgLWMgLW8gJEAgJDwKIAotbWtpbWFnZS5vOglta2ltYWdlLmMKLQkJJChDQykgLWcgJChDRkxBR1MpIC1jICQ8CiskKG9iailta2ltYWdlLm86CSQoc3JjKW1raW1hZ2UuYworCQkkKENDKSAtZyAkKENGTEFHUykgLWMgLW8gJEAgJDwKIAotbmNiLm86CQluY2IuYwotCQkkKENDKSAtZyAkKENGTEFHUykgLWMgJDwKKyQob2JqKW5jYi5vOgkJJChzcmMpbmNiLmMKKwkJJChDQykgLWcgJChDRkxBR1MpIC1jIC1vICRAICQ8CiAKLWdlbl9ldGhfYWRkci5vOglnZW5fZXRoX2FkZHIuYwotCQkkKENDKSAtZyAkKENGTEFHUykgLWMgJDwKKyQob2JqKWdlbl9ldGhfYWRkci5vOgkkKHNyYylnZW5fZXRoX2FkZHIuYworCQkkKENDKSAtZyAkKENGTEFHUykgLWMgLW8gJEAgJDwKIAotaW5jYS1zd2FwLWJ5dGVzLm86CWluY2Etc3dhcC1ieXRlcy5jCi0JCSQoQ0MpIC1nICQoQ0ZMQUdTKSAtYyAkPAorJChvYmopaW5jYS1zd2FwLWJ5dGVzLm86CSQoc3JjKWluY2Etc3dhcC1ieXRlcy5jCisJCSQoQ0MpIC1nICQoQ0ZMQUdTKSAtYyAtbyAkQCAkPAogCi1tcGM4NnhfY2xrLm86CW1wYzg2eF9jbGsuYwotCQkkKENDKSAtZyAkKENGTEFHUykgLWMgJDwKKyQob2JqKW1wYzg2eF9jbGsubzoJJChzcmMpbXBjODZ4X2Nsay5jCisJCSQoQ0MpIC1nICQoQ0ZMQUdTKSAtYyAtbyAkQCAkPAogCiBzdWJkaXJzOgogaWZlcSAoJChUT09MU1VCRElSUyksKQpAQCAtMTg0LDI1ICsxOTIsMjUgQEAKIAkJZG9uZQogZW5kaWYKIAotZW52aXJvbm1lbnQuYzoKLQkJQHJtIC1mIGVudmlyb25tZW50LmMKLQkJbG4gLXMgLi4vY29tbW9uL2Vudmlyb25tZW50LmMgZW52aXJvbm1lbnQuYworJChvYmopZW52aXJvbm1lbnQuYzoKKwkJQHJtIC1mICQob2JqKWVudmlyb25tZW50LmMKKwkJbG4gLXMgJChzcmMpLi4vY29tbW9uL2Vudmlyb25tZW50LmMgJChvYmopZW52aXJvbm1lbnQuYwogCi1lbnZpcm9ubWVudC5vOiBlbnZpcm9ubWVudC5jCi0JCSQoQ0MpIC1nICQoSE9TVF9FTlZJUk9fQ0ZMQUdTKSAkKENQUEZMQUdTKSAtYyAkPAorJChvYmopZW52aXJvbm1lbnQubzoJJChvYmopZW52aXJvbm1lbnQuYworCQkkKENDKSAtZyAkKEhPU1RfRU5WSVJPX0NGTEFHUykgJChDUFBGTEFHUykgLWMgLW8gJEAgJDwKIAotY3JjMzIuYzoKLQkJQHJtIC1mIGNyYzMyLmMKLQkJbG4gLXMgLi4vbGliX2dlbmVyaWMvY3JjMzIuYyBjcmMzMi5jCiskKG9iailjcmMzMi5jOgorCQlAcm0gLWYgJChvYmopY3JjMzIuYworCQlsbiAtcyAkKHNyYykuLi9saWJfZ2VuZXJpYy9jcmMzMi5jICQob2JqKWNyYzMyLmMKIAotJChMT0dPX0gpOglibXBfbG9nbyAkKExPR09fQk1QKQotCQkuL2JtcF9sb2dvICQoTE9HT19CTVApID4kQAorJChMT0dPX0gpOgkkKG9iailibXBfbG9nbyAkKExPR09fQk1QKQorCQkkKG9iaikuL2JtcF9sb2dvICQoTE9HT19CTVApID4kQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoT0JKUzoubz0uYykKLQkJJChDQykgLU0gJChIT1NUX0NGTEFHUykgJChDUFBGTEFHUykgJChPQkpTOi5vPS5jKSA+ICRACisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3Rvb2xzL2Vhc3lsb2dvL2Vhc3lsb2dvLmMgYi90b29scy9lYXN5bG9nby9lYXN5bG9nby5jCmluZGV4IGNiZWM3MGIuLjlmMWQxZmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Vhc3lsb2dvL2Vhc3lsb2dvLmMKKysrIGIvdG9vbHMvZWFzeWxvZ28vZWFzeWxvZ28uYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJCXJldHVybiAtMSA7CiAKIC8qICBBdXRob3IgaW5mb3JtYXRpb24gKi8KLQlmcHJpbnRmKGZpbGUsICIvKlxuICogR2VuZXJhdGVkIGJ5IEVhc3lMb2dvLCAoQykgMjAwMCBieSBQYW9sbyBTY2FmZmFyZGlcbi8qXG4iKTsgKi8KKwlmcHJpbnRmKGZpbGUsICIvKlxuICogR2VuZXJhdGVkIGJ5IEVhc3lMb2dvLCAoQykgMjAwMCBieSBQYW9sbyBTY2FmZmFyZGlcbiAqXG4iKTsKIAlmcHJpbnRmKGZpbGUsICIgKiBUbyB1c2UgdGhpcywgaW5jbHVkZSBpdCBhbmQgY2FsbDogZWFzeWxvZ29fcGxvdChzY3JlZW4sJiVzLCB3aWR0aCx4LHkpXG4gKlxuIiwgdmFybmFtZSk7CiAJZnByaW50ZihmaWxlLCAiICogV2hlcmU6XHQnc2NyZWVuJ1x0aXMgdGhlIHBvaW50ZXIgdG8gdGhlIGZyYW1lIGJ1ZmZlclxuIik7CiAJZnByaW50ZihmaWxlLCAiICpcdFx0J3dpZHRoJ1x0aXMgdGhlIHNjcmVlbiB3aWR0aFxuIik7CmRpZmYgLS1naXQgYS90b29scy9lbnYvTWFrZWZpbGUgYi90b29scy9lbnYvTWFrZWZpbGUKaW5kZXggOWNlNDc3Yy4uMWYxNjc2OCAxMDA2NDQKLS0tIGEvdG9vbHMvZW52L01ha2VmaWxlCisrKyBiL3Rvb2xzL2Vudi9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgKEMpIENvcHlyaWdodCAyMDAyCisjIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA2CiAjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAjCiAjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMSwyNSArMjEsMjggQEAKICMgTUEgMDIxMTEtMTMwNyBVU0EKICMKIAotU09VUkNFUyA6PSBjcmMzMi5jICBmd19lbnYuYyAgZndfZW52X21haW4uYwotSEVBREVSUyA6PSBmd19lbnYuaAoraW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKLWFsbDoJZndfcHJpbnRlbnYKK1NSQ1MJOj0gJChvYmopY3JjMzIuYyAgZndfZW52LmMgIGZ3X2Vudl9tYWluLmMKK0hFQURFUlMJOj0gZndfZW52LmgKIAotZndfcHJpbnRlbnY6CSQoU09VUkNFUykgJChIRUFERVJTKQotCSQoQ1JPU1NfQ09NUElMRSlnY2MgLVdhbGwgLURVU0VfSE9TVENDICQoU09VUkNFUykgLW8gZndfcHJpbnRlbnYKK0NQUEZMQUdTIDo9IC1XYWxsIC1EVVNFX0hPU1RDQworCithbGw6CSQob2JqKWZ3X3ByaW50ZW52CisKKyQob2JqKWZ3X3ByaW50ZW52OgkkKFNSQ1MpICQoSEVBREVSUykKKwkkKENST1NTX0NPTVBJTEUpZ2NjICQoQ1BQRkxBR1MpICQoU1JDUykgLW8gJChvYmopZndfcHJpbnRlbnYKIAogY2xlYW46Ci0Jcm0gLWYgZndfcHJpbnRlbnYgY3JjMzIuYworCXJtIC1mICQob2JqKWZ3X3ByaW50ZW52ICQob2JqKWNyYzMyLmMKIAotY3JjMzIuYzoKLQlsbiAtcyAuLi8uLi9saWJfZ2VuZXJpYy9jcmMzMi5jIGNyYzMyLmMKKyQob2JqKWNyYzMyLmM6CisJbG4gLXMgJChzcmMpLi4vLi4vbGliX2dlbmVyaWMvY3JjMzIuYyAkKG9iailjcmMzMi5jCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotLmRlcGVuZDoJTWFrZWZpbGUgJChTT1VSQ0VTKQotCQkkKENDKSAtTSAkKEhPU1RfQ0ZMQUdTKSAkKENQUEZMQUdTKSAtRFVTRV9IT1NUQ0MgJChTT1VSQ0VTKSA+ICRACitpbmNsdWRlICQoVE9QRElSKS9ydWxlcy5tawogCi1zaW5jbHVkZSAuZGVwZW5kCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3Rvb2xzL2dkYi9NYWtlZmlsZSBiL3Rvb2xzL2dkYi9NYWtlZmlsZQppbmRleCBlNzYxOGI3Li5kYmNiOTFmIDEwMDY0NAotLS0gYS90b29scy9nZGIvTWFrZWZpbGUKKysrIGIvdG9vbHMvZ2RiL01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKICMgKEMpIENvcHlyaWdodCAyMDAwCiAjIE11cnJheSBKZW5zZW4gPE11cnJheS5KZW5zZW5AY3Npcm8uYXU+CiAjCkBAIC0yNSw3ICsyOCwxMSBAQAogCiBCSU5TCT0gZ2Ric2VuZCBnZGJjb250CiAKLU9CSlMJPSBnZGJzZW5kLm8gZ2RiY29udC5vIGVycm9yLm8gcmVtb3RlLm8gc2VyaWFsLm8KK0NPQkpTCT0gZ2Ric2VuZC5vIGdkYmNvbnQubyBlcnJvci5vIHJlbW90ZS5vIHNlcmlhbC5vCisKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU1JDUwk6PSAkKENPQkpTOi5vPS5jKSAKK0JJTlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQklOUykpCiAKICMKICMgVXNlIG5hdGl2ZSB0b29scyBhbmQgb3B0aW9ucwpAQCAtNDQsMjYgKzUxLDI2IEBACiAKIGVsc2UJIyAhIENZR1dJTgogCi1hbGw6CSQoQklOUykKK2FsbDoJJChvYmopLmRlcGVuZCAkKEJJTlMpCiAKLWdkYnNlbmQ6CWdkYnNlbmQubyBlcnJvci5vIHJlbW90ZS5vIHNlcmlhbC5vCiskKG9iailnZGJzZW5kOgkkKG9iailnZGJzZW5kLm8gJChvYmopZXJyb3IubyAkKG9iailyZW1vdGUubyAkKG9iailzZXJpYWwubwogCQkkKENDKSAkKENGTEFHUykgJChIT1NUX0xERkxBR1MpIC1vICRAICReCiAKLWdkYmNvbnQ6CWdkYmNvbnQubyBlcnJvci5vIHJlbW90ZS5vIHNlcmlhbC5vCiskKG9iailnZGJjb250OgkkKG9iailnZGJjb250Lm8gJChvYmopZXJyb3IubyAkKG9iailyZW1vdGUubyAkKG9iailzZXJpYWwubwogCQkkKENDKSAkKENGTEFHUykgJChIT1NUX0xERkxBR1MpIC1vICRAICReCiAKIGNsZWFuOgogCXJtIC1mICQoT0JKUykKIAogZGlzdGNsZWFuOgljbGVhbgotCXJtIC1mICQoQklOUykgY29yZSAqLmJhayAuZGVwZW5kCisJcm0gLWYgJChCSU5TKSAkKG9iailjb3JlICQob2JqKSouYmFrICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0uZGVwZW5kOglNYWtlZmlsZSAkKE9CSlM6Lm89LmMpCi0JCSQoQ0MpIC1NICQoQ1BQRkxBR1MpIC1JLi4vaW5jbHVkZSAkKE9CSlM6Lm89LmMpID4gJEAKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCiAKLS1pbmNsdWRlIC5kZXBlbmQKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS90b29scy9ta2ltYWdlLmMgYi90b29scy9ta2ltYWdlLmMKaW5kZXggZmVhM2U1Yi4uYWI0MWIzZCAxMDA2NDQKLS0tIGEvdG9vbHMvbWtpbWFnZS5jCisrKyBiL3Rvb2xzL21raW1hZ2UuYwpAQCAtMTMwLDYgKzEzMCw3IEBACiAgICAgewlJSF9UWVBFX1JBTURJU0ssICAgICJyYW1kaXNrIiwJICAiUkFNRGlzayBJbWFnZSIsCX0sCiAgICAgewlJSF9UWVBFX1NDUklQVCwgICAgICJzY3JpcHQiLAkgICJTY3JpcHQiLAkJfSwKICAgICB7CUlIX1RZUEVfU1RBTkRBTE9ORSwgInN0YW5kYWxvbmUiLCAiU3RhbmRhbG9uZSBQcm9ncmFtIiwgfSwKKyAgICB7CUlIX1RZUEVfRkxBVERULCAgICAgImZsYXRfZHQiLCAgICAiRmxhdCBEZXZpY2UgVHJlZSIsCX0sCiAgICAgewktMSwJCSAgICAiIiwJCSAgIiIsCQkJfSwKIH07CiAKQEAgLTYzMiw3ICs2MzMsNyBAQAogCWlmIChoZHItPmloX3R5cGUgPT0gSUhfVFlQRV9NVUxUSSB8fCBoZHItPmloX3R5cGUgPT0gSUhfVFlQRV9TQ1JJUFQpIHsKIAkJaW50IGksIHB0cnM7CiAJCXVpbnQzMl90IHBvczsKLQkJdW5zaWduZWQgbG9uZyAqbGVuX3B0ciA9ICh1bnNpZ25lZCBsb25nICopICgKKwkJdWludDMyX3QgKmxlbl9wdHIgPSAodWludDMyX3QgKikgKAogCQkJCQkodW5zaWduZWQgbG9uZyloZHIgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpCiAJCQkJKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdXBkYXRlci9NYWtlZmlsZSBiL3Rvb2xzL3VwZGF0ZXIvTWFrZWZpbGUKaW5kZXggM2ZhMTkxMi4uZTk2ODRjYiAxMDA2NDQKLS0tIGEvdG9vbHMvdXBkYXRlci9NYWtlZmlsZQorKysgYi90b29scy91cGRhdGVyL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIwotIyAoQykgQ29weXJpZ2h0IDIwMDAKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTI1LDYyICsyNSw4MSBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotUFJPRyAgICA9IHVwZGF0ZXIKLUlNQUdFICAgPSB1cGRhdGVyLmltYWdlCi1TUkMgICAgID0gdXBkYXRlLmMgZmxhc2guYyBmbGFzaF9ody5jIHV0aWxzLmMgY21kX2ZsYXNoLmMgc3RyaW5nLmMgY3R5cGUuYyBkdW1teS5jCi1BU1JDICAgID0gcHBjc3RyaW5nLlMKLU9CSlMJPSAkKFNSQzouYz0ubykgJChBU1JDOi5TPS5vKQorUFJPRwkJPSAkKG9iail1cGRhdGVyCitJTUFHRQkJPSAkKG9iail1cGRhdGVyLmltYWdlCiAKLUxJQgk9ICQoVE9QRElSKS9leGFtcGxlcy9saWJzdHVicy5hCi1MSUJBT0JKUz0KLUxJQkNPQkpTPSAkKFRPUERJUikvZXhhbXBsZXMvc3R1YnMubwotTElCT0JKUwk9ICQoTElCQU9CSlMpICQoTElCQ09CSlMpCitDT0JKUwkJPSB1cGRhdGUubyBmbGFzaC5vIGZsYXNoX2h3Lm8gdXRpbHMubyBjbWRfZmxhc2gubyBzdHJpbmcubyBjdHlwZS5vIGR1bW15Lm8KK0NPQkpTX0xJTktTCT0gc3R1YnMubworQU9CSlMJCT0gcHBjc3RyaW5nLm8KK0FPQkpTX0xJTktTCT0gbWVtaW8ubworCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSAkKENPQkpTX0xJTktTKSAkKEFPQkpTKSAkKEFPQkpTX0xJTktTKSkKK1NSQ1MJOj0gJChDT0JKUzoubz0uYykgJChBT0JKUzoubz0uUykgJChhZGRwcmVmaXggJChvYmopLCAkKENPQkpTX0xJTktTOi5vOi5jKSAkKEFPQkpTX0xJTktTOi5vOi5TKSkKIAogQ1BQRkxBR1MgKz0gLUkkKFRPUERJUikgLUkkKFRPUERJUikvYm9hcmQvTUFJL0FtaWdhT25lRzNTRQogQ0ZMQUdTICAgKz0gLUkkKFRPUERJUikvYm9hcmQvTUFJL0FtaWdhT25lRzNTRQorQUZMQUdTICAgKz0gLUkkKFRPUERJUikvYm9hcmQvTUFJL0FtaWdhT25lRzNTRQogCi1hbGw6CS5kZXBlbmQgJChMSUIpICQoUFJPRykKK0RFUFMgPSAkKE9CSlRSRUUpL3UtYm9vdC5iaW4gJChPQkpUUkVFKS90b29scy9ta2ltYWdlCitpZm5lcSAoJChERVBTKSwkKHdpbGRjYXJkICQoREVQUykpKQorJChlcnJvciAidXBkYXRlcjogTWlzc2luZyByZXF1aXJlZCBvYmplY3RzLCBwbGVhc2UgcnVuIHJlZ3VsYXIgYnVpbGQgZmlyc3QiKQorZW5kaWYKKworYWxsOgkkKG9iaikuZGVwZW5kICQoUFJPRykgJChJTUFHRSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotJChMSUIpOiAuZGVwZW5kICQoTElCT0JKUykKLQkkKEFSKSBjcnYgJEAgJChMSUJPQkpTKQogCi0lLnNyZWM6CSUubyAkKExJQikKKyQob2JqKSUuc3JlYzoJJS5vICQoTElCKQogCSQoTEQpIC1nIC1UdGV4dCAkKExPQURfQUREUikgLW8gJCg8Oi5vPSkgLWUgJCg8Oi5vPSkgJDwgJChMSUIpCiAJJChPQkpDT1BZKSAtTyBzcmVjICQoPDoubz0pICRACiAKLSUubzogJS5jCi0JJChDQykgJChDUFBGTEFHUykgLWMgJDwKKyQob2JqKSUubzogJS5jCisJJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CiAKLSUubzogJS5TCi0JJChDQykgJChDUFBGTEFHUykgLWMgJDwKKyQob2JqKSUubzogJS5TCisJJChDQykgJChBRkxBR1MpIC1jIC1vICRAICQ8CisKKyQob2JqKW1lbWlvLm86ICQob2JqKW1lbWlvLlMKKwkkKENDKSAkKEFGTEFHUykgLWMgLW8gJEAgJDwKKworJChvYmopbWVtaW8uUzoKKwlybSAtZiAkKG9iailtZW1pby5jCisJbG4gLXMgJChTUkNUUkVFKS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL21lbWlvLlMgJChvYmopbWVtaW8uUworCiskKG9iailzdHVicy5vOiAkKG9iailzdHVicy5jCisJJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CisKKyQob2JqKXN0dWJzLmM6CisJcm0gLWYgJChvYmopc3R1YnMuYworCWxuIC1zICQoU1JDVFJFRSkvZXhhbXBsZXMvc3R1YnMuYyAkKG9iailzdHVicy5jCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotdXBkYXRlcjogJChPQkpTKSAkKExJQikgJChUT1BESVIpL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8ubwotCSQoTEQpIC1nIC1UdGV4dCAkKExPQURfQUREUikgLW8gdXBkYXRlciAtZSBfbWFpbiAkKE9CSlMpICQoTElCKSAgXAotCSQoVE9QRElSKS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL21lbWlvLm8KLQkkKE9CSkNPUFkpIC1PIGJpbmFyeSB1cGRhdGVyIHVwZGF0ZXIuYmluCiskKG9iail1cGRhdGVyOiAkKE9CSlMpCisJJChMRCkgLWcgLVR0ZXh0ICQoTE9BRF9BRERSKSAtbyAkKG9iail1cGRhdGVyIC1lIF9tYWluICQoT0JKUykKKwkkKE9CSkNPUFkpIC1PIGJpbmFyeSAkKG9iail1cGRhdGVyICQob2JqKXVwZGF0ZXIuYmluCiAKLXVwZGF0ZXIuaW1hZ2U6IHVwZGF0ZXIgJChUT1BESVIpL3UtYm9vdC5iaW4KLQljYXQgPi90bXAvdGVtcGltYWdlIHVwZGF0ZXIuYmluIGp1bmsgJChUT1BESVIpL3UtYm9vdC5iaW4KLQkkKFRPUERJUikvdG9vbHMvbWtpbWFnZSAtQSBwcGMgLU8gdS1ib290IC1UIHN0YW5kYWxvbmUgLUMgbm9uZSAtYSAkKExPQURfQUREUikgXAotCS1lIGBwcGMtZWxmMzItbm0gdXBkYXRlciB8IGdyZXAgX21haW4gfCBjdXQgLS1ieXRlcz0wLThgIFwKLQktbiAiRmlybXdhcmUgVXBkYXRlciIgLWQgL3RtcC90ZW1waW1hZ2UgdXBkYXRlci5pbWFnZQorJChvYmopdXBkYXRlci5pbWFnZTogJChvYmopdXBkYXRlciAkKE9CSlRSRUUpL3UtYm9vdC5iaW4KKwljYXQgPi90bXAvdGVtcGltYWdlICQob2JqKXVwZGF0ZXIuYmluIGp1bmsgJChPQkpUUkVFKS91LWJvb3QuYmluCisJJChPQkpUUkVFKS90b29scy9ta2ltYWdlIC1BIHBwYyAtTyB1LWJvb3QgLVQgc3RhbmRhbG9uZSAtQyBub25lIC1hICQoTE9BRF9BRERSKSBcCisJLWUgYCQoTk0pICQob2JqKXVwZGF0ZXIgfCBncmVwIF9tYWluIHwgY3V0IC0tYnl0ZXM9MC04YCBcCisJLW4gIkZpcm13YXJlIFVwZGF0ZXIiIC1kIC90bXAvdGVtcGltYWdlICQob2JqKXVwZGF0ZXIuaW1hZ2UKIAlybSAvdG1wL3RlbXBpbWFnZQotCWNwIHVwZGF0ZXIuaW1hZ2UgL3RmdHBib290CisJY3AgJChvYmopdXBkYXRlci5pbWFnZSAvdGZ0cGJvb3QKIAotdXBkYXRlci5pbWFnZTI6IHVwZGF0ZXIgJChUT1BESVIpL3UtYm9vdC5iaW4KLQljYXQgPi90bXAvdGVtcGltYWdlIHVwZGF0ZXIuYmluIGp1bmsgLi4vLi4vY3JlYXRlX2ltYWdlL2ltYWdlCi0JJChUT1BESVIpL3Rvb2xzL21raW1hZ2UgLUEgcHBjIC1PIHUtYm9vdCAtVCBzdGFuZGFsb25lIC1DIG5vbmUgLWEgJChMT0FEX0FERFIpIFwKLQktZSBgcHBjLWVsZjMyLW5tIHVwZGF0ZXIgfCBncmVwIF9tYWluIHwgY3V0IC0tYnl0ZXM9MC04YCBcCi0JLW4gIkZpcm13YXJlIFVwZGF0ZXIiIC1kIC90bXAvdGVtcGltYWdlIHVwZGF0ZXIuaW1hZ2UKKyhvYmopdXBkYXRlci5pbWFnZTI6ICQob2JqKXVwZGF0ZXIgJChPQkpUUkVFKS91LWJvb3QuYmluCisJY2F0ID4vdG1wL3RlbXBpbWFnZSAkKG9iail1cGRhdGVyLmJpbiBqdW5rIC4uLy4uL2NyZWF0ZV9pbWFnZS9pbWFnZQorCSQoT0JKVFJFRSkvdG9vbHMvbWtpbWFnZSAtQSBwcGMgLU8gdS1ib290IC1UIHN0YW5kYWxvbmUgLUMgbm9uZSAtYSAkKExPQURfQUREUikgXAorCS1lIGAkKE5NKSAkKG9iail1cGRhdGVyIHwgZ3JlcCBfbWFpbiB8IGN1dCAtLWJ5dGVzPTAtOGAgXAorCS1uICJGaXJtd2FyZSBVcGRhdGVyIiAtZCAvdG1wL3RlbXBpbWFnZSAkKG9iail1cGRhdGVyLmltYWdlCiAJcm0gL3RtcC90ZW1waW1hZ2UKLQljcCB1cGRhdGVyLmltYWdlIC90ZnRwYm9vdAorCWNwICQob2JqKXVwZGF0ZXIuaW1hZ2UgL3RmdHBib290CiAKLS5kZXBlbmQ6CU1ha2VmaWxlICQoU1JDKSAkKEFTUkMpICQoTElCQ09CSlM6Lm89LmMpICQoTElCQU9CSlM6Lm89LlMpCi0JCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNSQykgJChBU1JDKSAkKExJQkNPQkpTOi5vPS5jKSAkKExJQkFPQkpTOi5vPS5TKSA+ICRACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLXNpbmNsdWRlIC5kZXBlbmQKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvdG9vbHMvdXBkYXRlci9mbGFzaC5jIGIvdG9vbHMvdXBkYXRlci9mbGFzaC5jCmluZGV4IDMyYTE3NjcuLjFlZDc3YjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3VwZGF0ZXIvZmxhc2guYworKysgYi90b29scy91cGRhdGVyL2ZsYXNoLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDAwCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgogICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgKgkJCShvbmx5IHNvbWUgdGFyZ2V0cyByZXF1aXJlIGFsaWdubWVudCkKICAqLwogaW50Ci1mbGFzaF93cml0ZSAodWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQorZmxhc2hfd3JpdGUgKGNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQogewogI2lmZGVmIENPTkZJR19TUEQ4MjNUUwogCXJldHVybiAoRVJSX1RJTU9VVCk7CS8qIGFueSBvdGhlciBlcnJvciBjb2RlcyBhcmUgcG9zc2libGUgYXMgd2VsbCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdXBkYXRlci91cGRhdGUuYyBiL3Rvb2xzL3VwZGF0ZXIvdXBkYXRlLmMKaW5kZXggYjZkNTBkNS4uMThmMTIyYSAxMDA2NDQKLS0tIGEvdG9vbHMvdXBkYXRlci91cGRhdGUuYworKysgYi90b29scy91cGRhdGVyL3VwZGF0ZS5jCkBAIC00NiwxMCArNDYsNiBAQAogICAgIHdoaWxlICgxKTsKIH0KIAotaW50IGZsYXNoX3NlY3RfcHJvdGVjdCAoaW50IHAsIHVsb25nIGFkZHJfZmlyc3QsIHVsb25nIGFkZHJfbGFzdCk7Ci1pbnQgZmxhc2hfc2VjdF9lcmFzZSAodWxvbmcgYWRkcl9maXJzdCwgdWxvbmcgYWRkcl9sYXN0KTsKLWludCBmbGFzaF93cml0ZSAodWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KTsKLQogdm9pZCBkb191cGRhdGVyKHZvaWQpCiB7CiAgICAgdW5zaWduZWQgbG9uZyAqYWRkciA9ICZfX2R1bW15ICsgNjU7Cg==